在我的游戏中,我的主角是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);
我已经做了一个高通滤波器!看看我的edit1。这不能成为其他地方的错误,但我不确定什么可以让我的精灵做到这一点!我的过滤器值是0.2 btw。 –
这是一个低通滤波器和用于消除突然移动的正确滤波器类型。但是,您通过将结果值乘以50来达到目的。这可以将任何剩余差异放大50倍。加速度范围从-1到+1,滤波不改变数值范围,这意味着在最极端的情况下,您的加速度计控制的精灵可以在一帧中移动多达50个像素。下一条评论的另一条线索......。 – LearnCocos2D
您的加速度计updateInterval是30帧。除非你还将游戏锁定在30 fps,否则就意味着每隔一帧你就会得到新的加速值。在其他所有框架上,我可以想象你正在运行某种代码来改变精灵的位置或者改变rollingX。例如,加速度计告诉精灵向右移动25个像素,下一个帧将其他精度重新定位到左侧-20个像素,然后重复每一帧,您就会得到一个闪烁的精灵,闪烁的精灵会更快地闪烁更快的加速度值。 – LearnCocos2D