控制我游戏中的速度?

4

我该如何控制我的玩家速度?我正在使用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

你需要考虑(或不考虑)帧率独立性,或改变游戏或物理计算的结构。更重要的是,现在可能是开始消除代码中主要低效的好时机...这是一个“入门者”问题清单,可以问问自己:

  • 你是如何组织你的对象的?你只是循环遍历所有对象并对它们执行物理计算和碰撞检测,而不考虑那些不需要进行这些计算的条件吗?
  • 你是否将对象分区到空间树中,还是只是循环遍历它们(最重要的是用于碰撞检测)?
  • 你有多少个对象?你需要多少个对象?是否可以从游戏中删除任何东西而不会影响用户体验?
  • 你是否为屏幕外的对象执行物理计算?
  • 你的物理或逻辑计算中是否存在严重的算法缺陷?是否有任何可以通过数量级改进的地方?
  • 你是否以明智的方式存储对象?虽然不如上面的项目立即有效,但你可以考虑例如对象池。
  • 你是否使用了任何可以在昂贵的循环体内替换为C代码的Objective-C代码?(C函数调用在2个CPU周期内执行,而ARC中的Objective-C消息在9个周期内执行-这不是你应该首先考虑的事情,但如果你处理大量对象,则可能值得考虑。如果你处理大量对象,则4.5倍的加速效果还不错-但这可能不是你的瓶颈)。

这篇关于learn-cocos2d.com的好文章更详细地讨论了FPS问题,特别是针对iOS。

这篇关于gafferongames.com的好文章详细介绍了处理时间步更新的各种方法。虽然很有趣,但在过于忙于时间步之前,您应该先查看数据结构和算法是否存在明显的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接