2011-12-01 84 views
0

我試圖從ViewA校準我的UIAccelerometer,但我的遊戲視圖是ViewB。 所以我非常想要實現的是讓用戶在他們身邊玩,我希望我的遊戲表現得像坐在正常位置時玩的一樣。如何校準UIA加速度計?

所以在ViewA我會做一些像這樣?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]); 
[[NSUserDefaults standardUserDefaults] setFloat:accelX forKey:@"value1"]; 

然後在我的遊戲類,我會做這在我的UIAccelerometer委託方法?:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]); 
//Low Pass Filter 
rollingX = (accelX * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor)); 
    AccelPoint.x += (rollingX*50); 

然後我會做像這樣:

mySprite.position = ccp(accelX, yValue); 

我做錯了什麼?

謝謝!

編輯:ViewB的新代碼,我現在還需要某種形式的摩擦嗎?

rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor));  

AccelPoint.x += (rollingX*50); 

然後在那段代碼之後,我將設置我的對象的位置。

+0

你試過嗎?如果是這樣,你看到了什麼行爲? –

+0

是的,我已經嘗試過,看起來好像根本沒有校準。這是我應該怎麼做的? –

回答

1

在這個問題的例子出現在類似的方式進行校準,以你所描述的:對視圖A Accelerometer & Calibration - iPhone SDK

您的示例代碼:

float accelX = (acceleration.x - [[NSUserDefaults standardUserDefaults] floatForKey:@"value1"]); 

[NSUserDefaults的standardUserDefaults]的setFloat: accelX forKey:@「value1」];

這將存儲預校準值。所以如果您之前曾經校準過,校準的效果會被最小化。

我認爲只是:

[[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"value1"]; 

可能會更你以後。這樣你就可以在用戶的​​起始位置消除重力的整個影響。

您對View B的代碼看起來很好,但請記住這會讓您的角色速度無限增加。考慮添加某種形式的摩擦。

+0

AccelX應該是accelX :)無論如何,我認爲我只需要在X軸上進行校準,因爲我的遊戲只是肖像,並且只能通過X軸上的加速度計移動字符。 –

+0

加速度計爲我處理的唯一動作是向左或向右移動我的角色,就是這樣。 –

+0

但是你做了什麼動作來左右移動角色? –