2011-12-03 31 views
0

在我的遊戲中,我的主角是CCSprite。該CCSprite由UIAccelerometer控制,我通過執行self.isAccelerometerEnabled = YES;啓用了加速度計方法,然後將updateInterval設置爲:1/30使用UIAccelerometer CCSprite不夠快地重繪?

問題不在於我的加速度值不是實際的好值,而是它與我的CCSprite沒有得到足夠快的重繪速度。因此,如果我的CCSprite每0.1秒移動很多像素,那麼精靈開始閃爍,然後它越快閃爍越快。

我在我的.h中聲明瞭我的加速度值,並將它們設置在加速度計委託方法中,然後在我的遊戲循環中設置了CCSprite的位置。

任何想法,爲什麼會發生這種情況?

謝謝!

編輯:加速度計代碼:

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

回答

2

閃爍精靈指示錯誤別處。除非你的意思是這個精靈有一些「緊張的」動作。如果您還沒有,則應該添加accelerometer filtering以平滑加速度計輸入值。

Btw,Kobold2D已經內置了最常用的accelerometer filtering(高通和低通)。

+0

我已經做了一個高通濾波器!看看我的edit1。這不能成爲其他地方的錯誤,但我不確定什麼可以讓我的精靈做到這一點!我的過濾器值是0.2 btw。 –

+0

這是一個低通濾波器和用於消除突然移動的正確濾波器類型。但是,您通過將結果值乘以50來達到目的。這可以將任何剩餘差異放大50倍。加速度範圍從-1到+1,濾波不改變數值範圍,這意味着在最極端的情況下,您的加速度計控制的精靈可以在一幀中移動多達50個像素。下一條評論的另一條線索......。 – LearnCocos2D

+0

您的加速度計updateInterval是30幀。除非你還將遊戲鎖定在30 fps,否則就意味着每隔一幀你就會得到新的加速值。在其他所有框架上,我可以想象你正在運行某種代碼來改變精靈的位置或者改變rollingX。例如,加速度計告訴精靈向右移動25個像素,下一個幀將其他精度重新定位到左側-20個像素,然後重複每一幀,您就會得到一個閃爍的精靈,閃爍的精靈會更快地閃爍更快的加速度值。 – LearnCocos2D

1

您應該更新更新方法中的精靈位置,而不是在加速度計方法中。 (如果你還沒有)

+0

這就是我最終做的 –