2011-12-03 99 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

这就是我最终做的 –