2012-11-28 182 views
2

所以我在遊戲中做一個基本的校準像這樣: 校準代碼:UIA加速度計校準後更敏感嗎?

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    [[NSUserDefaults standardUserDefaults] setFloat:acceleration.x forKey:@"X-Calibrate"]; 
} 

然後在我的遊戲中查看這些都爲加速度計的一些定義:

#define kFilteringFactor 0.13 
#define MAXXACCELERATION 24 

在init方法我的遊戲類的我這樣做:

calibrationFloat = [[NSUserDefaults standardUserDefaults] floatForKey:@"X-Calibrate"]; 

那麼我這樣做:

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    //Low Pass Filter (gets rid of little jitters) + Calibration value combined 
    rollingX = ((acceleration.x - calibrationFloat) * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor)); 
} 

calibrationFloat設置爲在遊戲開始之前從NSUserDefaults讀取的值。

然後在遊戲圈我這樣做:

int rollingAmount = (IS_IPAD() ? 52 : 44); 
CGFloat xFloat = (rollingX * rollingAmount); 
pos.x += xFloat < -MAXXACCELERATION ? -MAXXACCELERATION : (xFloat > MAXXACCELERATION ? MAXXACCELERATION : xFloat); 

然後我把我的圖像的位置基於pos.x. 然而,這是問題: 我校準後,我的形象的運動的敏感性,因爲非常高,使它非常快速的運動。在校準之前,運動速度不錯,所以校準時必須出錯。

在這裏看起來有什麼不對嗎,我是否在計算中做錯了什麼?

謝謝!

+0

「calibrationValue設爲從NSUserDefaults讀取的值「我在代碼中的任何地方都看不到'calibrationValue'。 –

+0

我加了。對於那個很抱歉! :) –

+0

好的,沒問題。但是,我仍然沒有看到在任何地方使用該變量。你的意思是'calibrationFloat'而不是這兩個不同的變量? (另外,我看到你問了一個有關這個問題的答案,說你正在做'rollingX'的計算不正確,你是否完全排除了這個問題?) –

回答

1

嘗試添加同步,只是要確定你寫在NSUserDefaults的權值:

「病程你不能確定你讀它之前,你的設置寫到磁盤,所以你最好到迫使你的應用程序現在

把它寫在蘋果DOC:

同步寫入任何修改永久域名磁盤 和更新所有未修改的持久域,什麼是在磁盤上。

  • (BOOL)synchronize返回值YES如果數據已成功保存到磁盤,否則返回NO。

,並嘗試使用setDouble:不是的setFloat(UIAccelerationValue x被定義爲雙...當然使用doubleForKey和:當你日後讀取)

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 
    [[NSUserDefaults standardUserDefaults] setDouble:acceleration.x forKey:@"X-Calibrate"]; 
    if ([[NSUserDefaults standardUserDefaults] synchronize]) { 
     NSLog(@"OK: well written!!!"); 
    }else { 
     NSLog(@"NO! Error!!!"); 
    } 

} 
+0

不幸的是,這不是問題,價值是正確的,它只是我的計算似乎是錯誤的,我不知道他們應該改爲什麼。 –