我希望能够让图像在加速度计控制下移动得逼真,就像任何迷宫游戏一样。下面显示了我到目前为止所拥有的,但它看起来非常紧张,根本不现实。球的图像似乎永远不会停止,到处都会有很多颤动的动作。
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
deviceTilt.x = 0.01 * deviceTilt.x + (1.0 - 0.01) * acceleration.x;
deviceTilt.y = 0.01 * deviceTilt.y + (1.0 - 0.01) * acceleration.y;
}
-(void)onTimer {
ballImage.center = CGPointMake(ballImage.center.x + (deviceTilt.x * 50), ballImage.center.y + (deviceTilt.y * 50));
if (ballImage.center.x > 279) {
ballImage.center = CGPointMake(279, ballImage.center.y);
}
if (ballImage.center.x < 42) {
ballImage.center = CGPointMake(42, ballImage.center.y);
}
if (ballImage.center.y > 419) {
ballImage.center = CGPointMake(ballImage.center.x, 419);
}
if (ballImage.center.y < 181) {
ballImage.center = CGPointMake(ballImage.center.x, 181);
}
发布于 2010-02-16 21:11:03
有没有什么原因不能使用在回答你之前的问题时提供的平滑过滤器:How do you use a moving average to filter out accelerometer values in iPhone OS?
发布于 2010-02-16 21:04:53
您需要计算这些值的运行平均值。为此,您需要将最后一个n
值存储在数组中,然后在读取加速度计数据时将值推入和弹出数组。下面是一些伪代码:
const SIZE = 10;
float[] xVals = new float[SIZE];
float xAvg = 0;
function runAverage(float newX){
xAvg += newX/SIZE;
xVals.push(newX);
if(xVals.length > SIZE){
xAvg -= xVals.pop()/SIZE;
}
}
您需要对所有三个轴执行此操作。玩弄大小的值;它越大,值越平滑,但响应速度似乎越慢。这真的取决于你读取加速度计数值的频率。如果每秒读取10次,则SIZE = 10
可能太大。
https://stackoverflow.com/questions/2272969
复制相似问题