2010-01-21 16 views
6

मैं अपने आईफोन गेम के लिए एक्सेलेरोमीटर को सही तरीके से कैलिब्रेट कैसे करूं? वर्तमान में, जब फोन एक सपाट सतह पर है, तो पैडल बाईं ओर जाता है। उच्च या निम्न पास फ़िल्टर स्वीकार्य समाधान नहीं हैं क्योंकि मुझे कम & उच्च मानों पर भी पैडल पर पूर्ण नियंत्रण की आवश्यकता है। मुझे पता है कि ऐप्पल में बबललेवल नमूना है लेकिन मुझे इसका पालन करना मुश्किल लगता है ... क्या कोई प्रक्रिया को सरल बना सकता है?आईफोन एक्सेलेरोमीटर अंशांकन

मेरे accelerometer कोड इस तरह दिखता है:

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 

float acelx = -acceleration.y; 
float x = acelx*40; 

Board *board = [Board sharedBoard]; 
AtlasSprite *paddle = (AtlasSprite *)[board.spriteManager getChildByTag:10]; 

if (paddle.position.x > 0 && paddle.position.x < 480) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 

if (paddle.position.x < 55) { 
    paddle.position = ccp(56, paddle.position.y); 
} 

if (paddle.position.x > 435) { 
    paddle.position = ccp(434, paddle.position.y); 
} 

if (paddle.position.x < 55 && x > 1) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 

if (paddle.position.x > 435 && x < 0) { 
    paddle.position = ccp(paddle.position.x+x, paddle.position.y); 
} 
} 

धन्यवाद!

उत्तर

9

ठीक है, समस्या हल हो गई है और समाधान इतना आसान है कि मैं वास्तव में शर्मिंदा हूं, मैं जल्द ही इसके साथ नहीं आया था।

एक "कैलिब्रेशन बटन" में: यह इस रूप में सरल है

//store the current offset for a "neutral" position 
calibration = -currentAccelX * accelerationFactor; 

खेल समय accelerometer समारोह में:

//add the offset to the accel value 
float x = (-acceleration.y * accelerationFactor) + calibration; 

यह ऑफसेट जोड़ने के रूप में सरल है। * उसके सिर *

+0

यहाँ विषय के लिए एक व्यापक व्याख्या दी गई है http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials /39833- ट्यूटोरियल-accelerometer-calibration-optimizations.html –

+2

हां, मैंने वह पोस्ट लिखा है;) – user2393462435

+0

यह एक पुराना धागा है, लेकिन मैं उत्सुक हूं कि किस प्रकार की ऑब्जेक्ट्स वर्तमान एक्सेलएक्स है और एक्सेलेरेशन फैक्टर है। क्या आप इसके साथ सहायता कर सकते हैं? –

0

छुपाता है इस कोड है मैं अब तक है:

//calibrate code from StackOverflow 
float calibration = -acceleration.x * accelerationFraction; 
float x = (-acceleration.y * accelerationFraction) + calibration; 

//My original code 
accelerationFraction = acceleration.y*2; 
if (accelerationFraction < -1) { 
    accelerationFraction = -1; 
} else if (accelerationFraction > 1) { 
    accelerationFraction = 1; 
} 
//API CHANGE set delegate to self 
if (orientation == UIDeviceOrientationLandscapeLeft){ 
    accelerationFraction *= -1; 
} 
संबंधित मुद्दे