- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
因此,我正在玩我的第一个 iOS 游戏,并且正在为如何找到集成对象移动的最佳方式而苦苦挣扎。
该游戏在很大程度上依赖于快速移动的物体和持续、快速的用户输入变化。因此,我试图让对象集成和约束求解器尽可能快速准确地运行(以尽量减少连续游戏循环调用之间的用户输入变化)。
更具体地说,我不确定 NSTimer 类和 CACurrentMediaTime() 函数的功能。很难根据经验进行测试,因为我不确定哪个误差更大。例如,使用重复间隔为 0.008(~2 次更新/屏幕刷新)的 NSTimer 并在连续调用时调用 CACurrentMediaTime(),我发现调用之间的时间间隔在 0.0075 - 0.009 之间变化。很难说哪个是(小的)不一致的原因。因此,为了确定时间步长,我应该:
假设 NSTimer 足够准确,可以使用 NSTimer 时间间隔作为游戏循环时间步长
使用 CACurrentMediaTime() 确定连续游戏循环调用之间的时间间隔。
学生和所有这一切的新手 - 请友善 :) 非常感谢任何建议。感谢您的宝贵时间。
最佳答案
NSTimer
不是实时计时器。它甚至不接近,也不意味着接近。如果您正在查看任何快于大约半秒的东西,NSTimer
是错误的工具。我什至不会在一秒钟内推荐它。对于多秒的事情,尤其是多分钟的事情,当你真的不关心它什么时候触发时,这很好。我一直在用它。
CACurrentMediaTime()
不是计时器。它是系统中最准确的时间函数的包装器:mach_absolute_time()
。因此,如果您真的很在意现在几点,并且希望以人类可理解的数字表示,CACurrentMediaTime()
就是您的函数。 mach_absolute_time()
会给你一个非常准确的数字,但它是基于 Mach absolute time unit它实际上并没有映射到任何令人讨厌的人类想法(并且每个 CPU 都有不同的规模)。这就是为什么我们有 CACurrentMediaTime()
来让我们的生活更轻松。
好的,所以 NSTimer
不是实时的,CACurrentMediaTime()
也不是计时器。游戏程序员要做什么?
Grand Central Dispatch包括我们拥有的一些最好的“大约在此时运行”系统之一。这是一个调度源。我说“大约这个时候”是因为 GCD 仍然不是 RTOS 人员所说的真正“实时”。但它对游戏开发者来说已经足够实时了。在 Concurrency Programming Guide 中寻找创建计时器.另请查看 dispatch_after()
,它非常适合一次性“延迟运行”。
请记住,在您的主线程(UI 线程,完成所有绘图的地方)上运行的任何内容都将与该线程上的其他所有内容共享时间。因此,当您在主线程上处理绘图和用户交互时,您经常需要在后台线程上进行计算。这就是 GCD dispatch_queues 旨在帮助您的事情。另一方面,请记住许多 iOS 设备是单核的。所以“后台线程”有点用词不当。 CPU 上一次只能真正运行一件事。这就是为什么将东西转移到 GPU 如此重要(见下文)。
您可能还想认真查看像 cocos2d 这样的系统,这是一个非常好的游戏引擎。它会为您处理很多此类细节,让您专注于游戏部分。
留在 Apple 框架中,您还应该看看 Core Animation。如果您使用计时器在屏幕上四处移动事物,则不应该这样做。核心动画是你如何在屏幕上移动东西。它会为您处理很多细节,比您自己处理速度更快,耗电量更少,而且它会将大量工作转移到 GPU(正如我上面提到的)。与游戏相比,它更多地是为 UI 元素设计的,但它绝对可以用于构建简单的游戏。
当然还有 GLKit,但那是完全不同的东西....
关于ios - NSTimer 与 CACurrentMediaTime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660403/
注意:我在这个项目中使用 swift。 我目前正在开发我的第一个项目,如果在一段时间后没有按下按钮,我会尝试停止(无效)NSTimer。我找到了其他停止 NSTimer 的方法,但没有说明如何在一定时
我正在 Xcode4 中工作,在一个项目中,出于组织目的,我一直使用三个不同的 NSTimer,但我意识到,除了名称之外,计时器是相同的,因此很容易将所有三个计时器合并为一。对于我的项目来说,哪一个更
根据 Apple 文档,将同时使用 WKInterfaceTimer(Watch 本地,倒计时但在结束时不触发任何事件)和 NSTimer(在计时器结束时触发方法)。所以,我的 App Interfa
我目前正在尝试制作一个 queueHandler,它将一个对象数组作为输入,用于在一个简单的 Double 机器人上执行驱动命令。我目前正在尝试使用 GCD 以串行执行我的函数,但是当我在我的队列中使
有个问题...我有定时器 [NSTimer scheduledTimerWithTimeInterval:120
我创建了一个计时器, self.scanTimer = [NSTimer scheduledTimerWithTimeInterval:TIMEOUT_SECONDS target:self s
我尝试使用以下代码停止 NSTimer: - (void)viewDidLoad { [super viewDidLoad]; timer3 = [NSTimer timerWithT
我正在制作一个带有计时器的应用程序。我从给定时间开始计算分钟和秒,直到 0。发生这种情况时,我启动一个警报 View 。 我的结构是这样的: 主线程方法分配一个新线程并初始化它。线程的入口点(方法)有
好吧,这段代码非常基本。用户将答案输入文本框,如果等于“第一+第二”,他们就得到一分。然后,他们有 5 秒钟的时间回答下一个数学问题。如果他们这样做了,函数“doCalculation”将再次运行,他
我正在创建益智游戏应用程序,并使用 NSTimer 显示时间(即 01:20)。当应用程序进入后台时,NSTimer 会暂停,但即使应用程序处于后台状态,我也想继续它。 例如,当应用程序进入后台时,计
我有一个带有 NSTimer *myTimer; 变量的类。在某些时候我会这样做: myTimer = [NSTimer scheduledTimerWithTimeInterval:20 targe
Edit2:为什么在“doSomething”方法中只更新了进度而不是point0? 编辑:使用我拥有的代码。我知道我一定忽略了一些东西,但我就是找不到它。 我正在编写一个 iPhone 应用程序,它
我的应用是一款体育应用。即使在后台游戏也应该继续,我为此使用了 nstimer。但我无法在后台运行计时器。每当应用程序处于后台时,计时器就会停止,返回时它会从离开时的同一时间继续。 最佳答案 您无法在
它将不断倒计时并更新当前时间。任何人都知道如何解决这个问题?我不明白 NStimer 如何识别这样的日期格式:20110803 23:59:59 最佳答案 查找NSDateFormatter 。您可以
是否可以在主线程上运行由 nstimer 调用的选择器? NSTimer 在它自己的线程中生成。 我的结构是一个线程调用一个带有 nstimer 的方法,nstimer 调用一个执行一些更新的方法,但
我在我的应用程序中使用了很多计时器。用于记录时间、移动物体、淡入淡出等。我在不同时间、同一 View 中使用同一个计时器来实现多个目的。我应该如何正确声明和无效或释放我的计时器? Atm 我这样声明计
我正在尝试使用 iPhone SDK 3.0 在线程上运行 NSTimer。我认为我做的一切都是正确的(新的运行循环等)。如果我在 viewDidDissappear 上调用 [timer inval
这是让我困惑了一段时间的事情。 我有一个 NSTimer,添加到 currentRunLoop 中,如果我不保留它,它就会崩溃。 NSTimer *timer = [[NSTimer timerWit
当我们使用 NSTimer 时,一旦在上述时间间隔后调用回调,UI 是否会被阻塞? 最佳答案 这要看情况。大多数时候,这不会成为问题。 如果,但是,满足以下两个条件,NSTimer 将阻塞 UI 线程
我使用大约 20 个 UIImageView 的小型飞机图像(50x50 像素)在 iPhone 屏幕上制作简单的动画。动画是通过按计时器间隔移动 UIImageView center 属性来完成的。
我是一名优秀的程序员,十分优秀!