控制我游戏的速度?

时间:2014-02-13 14:30:37

标签: ios iphone objective-c sprite-kit

如何控制播放器的速度?我使用didSimulatePhysics()方法进行移动:

   if(([self childNodeWithName:@"hero"].position.x >= 180)
   &&
   (self.touchedHero == YES)
    && _canMove ==YES){

    [[self childNodeWithName:@"hero"]setPosition:CGPointMake(180, [self childNodeWithName:@"hero"].position.y)];

    [self.world setPosition:CGPointMake(self.world.position.x-5, self.world.position.y)];

但是这种方法取决于设备性能,当在iOs设备上运行我的应用程序时速度非常不稳定,有时速度非常快,有时速度慢,我怎样才能控制这个速度?

1 个答案:

答案 0 :(得分:0)

您需要考虑(或不考虑)帧率独立性,或者改变游戏或物理计算结构的方式。更重要的是,这可能是开始消除代码中的主要低效率的好时机......这是一个问题的“首发”列表:

  • 你是如何组织你的对象的?您是否只是循环浏览所有内容并对所有内容执行物理计算和碰撞检测,而不考虑那些不需要进行这些计算的条件?
  • 您是将对象划分为空间树,还是只是循环遍历所有这些对象(最重要的是用于碰撞检测)?
  • 你有多少个物品?你需要多少?是否可以在不牺牲用户体验的情况下从游戏中删除任何内容?
  • 您是否正在为离屏对象执行物理计算?
  • 在任何物理或逻辑计算中存在任何严重的算法缺陷?任何可以通过数量级改进的东西?
  • 您是否以合理的方式存储物品?不像上面的项目那样立即生效,但您可以考虑使用对象池。
  • 您是否正在使用任何可以用昂贵的循环体内的C代码替换的Objective-C代码? (C函数调用在2个CPU周期内执行,而ARC中的Objective-C消息在9个周期内执行 - 这不是你应该看的第一件事,但值得考虑。如果你的话,4.5倍的加速并不是太破旧了“处理很多对象 - 但这可能不是你的瓶颈。”

This good post on learn-cocos2d.com详细介绍了FPS问题,并考虑了iOS。

This good post on gafferongames.com详细介绍了处理时间步更新的各种方法。一个有趣的读物,但你会想看看你的数据结构和算法首先针对任何显而易见的事情,然后才会占用你的时间步。