首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在iPhone OS上用加速度计像迷宫游戏一样编程流畅的移动?

如何在iPhone OS上用加速度计像迷宫游戏一样编程流畅的移动?
EN

Stack Overflow用户
提问于 2010-02-16 20:56:04
回答 2查看 7.6K关注 0票数 4

我希望能够让图像在加速度计控制下移动得逼真,就像任何迷宫游戏一样。下面显示了我到目前为止所拥有的,但它看起来非常紧张,根本不现实。球的图像似乎永远不会停止,到处都会有很多颤动的动作。

代码语言:javascript
复制
- (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);
    }
EN

回答 2

Stack Overflow用户

发布于 2010-02-16 21:11:03

有没有什么原因不能使用在回答你之前的问题时提供的平滑过滤器:How do you use a moving average to filter out accelerometer values in iPhone OS

票数 3
EN

Stack Overflow用户

发布于 2010-02-16 21:04:53

您需要计算这些值的运行平均值。为此,您需要将最后一个n值存储在数组中,然后在读取加速度计数据时将值推入和弹出数组。下面是一些伪代码:

代码语言:javascript
复制
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可能太大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2272969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档