Z.O*_*.O. 22 nstimer game-engine ios
所以我正处于我的第一个iOS游戏之中,并且正在努力寻找如何整合对象移动的最佳方法.
游戏在很大程度上依赖于快速移动的对象和持续快速的用户输入变化.因此,我试图让对象集成和约束求解器尽可能快速准确地运行(以最小化连续游戏循环调用之间的用户输入变化).
更具体地说,我不确定NSTimer类和CACurrentMediaTime()函数的功能.很难根据经验进行测试,因为我不确定哪个有更大的错误.例如,使用重复间隔为0.008(~2updates /屏幕刷新)的NSTimer并在连续调用时调用CACurrentMediaTime(),我发现调用之间的时间间隔在0.0075 - 0.009之间变化.很难说哪个是(小)不一致的原因.因此,我应该确定时间步长:
假设NSTimer足够准确,可以使用NSTimer时间间隔作为游戏循环时间步长
使用CACurrentMediaTime()来确定连续游戏循环调用之间的时间间隔.
学生和所有这一切的新手 - 请好!:)非常感谢任何建议.谢谢你的时间.
Rob*_*ier 38
NSTimer
不是一个实时计时器.它甚至不是很接近,也不是故意的.如果你看到任何比半秒快的东西,NSTimer
是错误的工具.我甚至不推荐它用于不到一秒钟的事情.对于多秒钟的事情,特别是多分钟的事情,如果你真的不关心什么时候开火,那就太棒了.我用它所有的时间.
CACurrentMediaTime()
不是计时器.它是系统中最准确的时间函数的包装:mach_absolute_time()
.所以,如果你真正关心它现在的时间,并且你想要一个人类可以理解的数字,那CACurrentMediaTime()
就是你的功能.mach_absolute_time()
会给你一个非常准确的数字,但它是基于马赫绝对时间单位,它实际上并没有映射到任何讨厌的人类思想(并且每个CPU都有不同的比例).这就是我们必须CACurrentMediaTime()
让生活更轻松的原因.
好的,所以NSTimer
不是实时的,CACurrentMediaTime()
也不是计时器.什么是游戏程序员?
Grand Central Dispatch包括我们拥有的最好的"使这次运行"系统中的一些.这是一个调度源.我说"关于这个时间",因为GCD仍然不像RTOS家伙那样真正"实时".但对于游戏开发者来说,这是实时的.在" 并发编程指南"中查找"创建计时器".另外看一下dispatch_after()
,这对于一次性"延迟运行"非常有用.
请记住,在主线程(UI线程,所有绘图都已完成)上运行的任何内容都将与该线程上的其他内容共享时间.因此,当您在主线程上处理绘图和用户交互时,通常需要在后台线程上进行计算.这是GCD dispatch_queues旨在帮助您的事情.另一方面,请记住许多iOS设备都是单核的.所以"背景线程"有点用词不当.在CPU上一次只能运行一件事.这就是将内容移动到GPU非常重要的原因(见下文).
你可能也想认真看看像cocos2d这样的系统,这是一个非常好的游戏引擎.它为您处理了很多这类细节,让您专注于游戏部分.
继续使用Apple框架,您还应该看看Core Animation.如果你用计时器在屏幕上移动东西,你不应该这样做.核心动画是你在屏幕上移动东西的方式.它可以为您提供更多细节,更快,使用的电量比您自己做的少得多,并且它将大量工作转移到GPU(如上所述).它比UI元素更多地设计而不是游戏,但它绝对可以用来构建简单的游戏.
当然还有GLKit,但那是一个完全不同的东西....
归档时间: |
|
查看次数: |
9232 次 |
最近记录: |