如何在不使用 NSTimer 的情况下在 iPhone 上循环游戏

2024-01-04

为了将我的游戏干净地移植到 iPhone,我正在尝试制作一个不使用 NSTimer 的游戏循环。

我在一些示例代码中注意到,如果使用 NSTimer,您需要在开始时使用类似的内容进行设置

    self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];

其中drawView看起来像这样:


- (void)drawView 
{
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
    mFooModel->render();
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
}

使用此技术时,mFooModel 渲染得很好,但我想制作自己的游戏循环来调用drawView,而不是让NSTimer 每秒调用drawView 60 次。我想要这样的东西:


while(gGameState != kShutDown)
{
    [self drawView]
}

不幸的是,当我这样做时,我得到的只是黑屏。为什么会发生这种情况?无论如何,我可以实现我在这里描述的内容吗?

我想避免 NSTimer 的原因是因为我想在游戏循环中进行物理和 AI 更新。我使用自己的时钟/计时器来跟踪已经过去的时间,以便我可以准确地做到这一点。渲染尽可能快地发生。我尝试使用中描述的一些技术本文 http://dewitters.koonsolo.com/gameloop.html

这是一个有点冲动的问题(你在编码一整天后遇到的问题,被困住了,希望早上就能得到答案)

干杯,伙计们。


iPhoneOS 3.1 的另一个选择是使用新的 CADisplayLink api。当屏幕内容需要更新时,这将调用您指定的选择器。

displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(renderAndUpdate)];
[displayLink setFrameInterval:2];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

如果您需要更多示例代码,XCode 中的新 OpenGL 项目模板也使用 CADisplayLink。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 NSTimer 的情况下在 iPhone 上循环游戏 的相关文章

  • 在 iPhone 应用程序中显示来自 RSS 源的内容

    我看过一些关于这个主题的教程 但它们都只讨论了一半 然后让人感到困惑 如何将 RSS feed 流式传输到 iPhone 应用程序中 我知道 xml 应该被读入 解析等 但随后我不确定如何显示我需要的信息 例如图像 嵌入视频等 如果有人能指
  • iPhone只能使用SQLite数据库吗?

    iPhone 可以使用 SQLite 之外的其他数据库吗 比如 MySQL iPhone 只能直接在设备上使用 SQLite 作为数据库 这意味着 iPhone 内部没有 MySQL 服务器 但是您可以并且可以自由地拥有 您自己的 MySQ
  • iPhone - 从网络服务器获取文件的上次修改日期

    我想检查网络服务器上文件的上次修改日期 任何帮助都会很棒 谢谢 NSURLRequest request NSURLRequest alloc initWithURL aURL NSHTTPURLResponse response NSUR
  • 无法使用 Python 循环分页 API 响应

    所以 我对这个感到摸不着头脑 使用 HubSpot 的 API 我需要获取我客户的 门户 帐户 中所有公司的列表 遗憾的是 标准 API 调用一次只能返回 100 家公司 当它返回响应时 它包含两个参数 使分页响应成为可能 其中之一是 ha
  • NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

    我想解析 Windows 1256 编码的 rss 文件 但解析器没有读取它 我用 UTF8 编码做了很多解析 但只有这个不起作用 为什么 带有 Windows 1256 的 rss 文件 http youm7 com Rss asp 解决
  • Excel VBA 循环遍历 10,000 组行,每组包含 20 行

    如何将当前按行循环的 Excel VBA 代码转换为循环 20 行集 据我了解 Step函数可能与以下行一起使用 Range V1 Value Application Index vInput1 r 0 但是 我不确定如何修改代码以循环遍历
  • iOS Javascript 引擎 parseFloat(1) 返回负数

    这段代码将使错误出现 function causeBug d var k var n parseFloat 1 var c Math abs d if n lt 0 k else k return k n function for var
  • iPhone 应用程序在 iPhone 4 尺寸下运行,更新后出现黑条

    此前 该应用程序支持 iPhone 5s SE 屏幕和 iPhone 6 8 屏幕 不包括加大尺寸 这是使用启动图像完成的 因此 在 Plus 尺寸设备和 iPhone X 设备上 它会在应用程序上方和下方显示黑条 然后我们发布了一个更新
  • YouTube 嵌入不适用于 iPhone ios <= 12

    在 ios 您甚至可以在 YouTube 官方文档中尝试此操作 https developers google com youtube youtube player demo https developers google com yout
  • iPhone 公钥加密 SecKeyEncrypt 返回错误 9809 (errSSLCrypto)

    我试图使用 iPhone 的 PKI 库来加密一个短字符串 12345678 但每当我尝试使用 SecKeyEncrypt 时 我总是收到错误 9809 即 errSSLCrypto SecureTransport h 头文件将此错误简单地
  • 使用 OpenGL ES 绘制地球仪

    我正在尝试渲染一个地球仪 上面有地图的球体 OpenGL ES 1 1 on iOS 我能够绘制球体并绘制边界 但有一个问题 在我看来 不面向前方的线条也被绘制在屏幕上 像这样 在图片中 您可以看到美国渲染得很好 但您可以看到澳大利亚渲染在
  • 设备锁定时播放 iPod 库中的音频

    只是一个简单的问题 我已经将我的程序设置为能够播放AVAudioPlayer and AVPlayer在后台 运行良好 我可以播放歌曲 锁定屏幕 声音将继续播放 我遇到的问题是打电话 AVPlayer play 虽然我的屏幕已经锁定 这最终
  • 如何从 iPhone 直播视频 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想开发 iPhone 应用程序来将实时视频播放到网络上 Ustream 有从 iPhone 向网络广播的应用程序 有什么建议吗 我应该使
  • 如何提高 iPhone 上的核心数据获取性能?

    Core data在iPhone上的表现绝对是惨不忍睹 索引是完全损坏还是只是一个糟糕的实现 我的核心数据存储 SQLite 后备存储 中有大约 21500 个单一类型的对象 这些对象在 UUID 上建立索引 该 UUID 是一个 NSSt
  • dyld:未加载库:AVFoundation.framework 原因:未找到图像

    我该如何解决 dyld 库未加载 System Library Frameworks AVFoundation framework Versions A AVFoundation 引用自 Users Library Application
  • 具有同步功能的 iPhone 离线应用程序

    我正在考虑构建一个可以在离线状态下和在线状态下一样运行的应用程序 由于应用程序在离线状态下无法与服务器通信 因此需要进行某种程度的同步 在规划 iPhone 同步离线操作时 有哪些值得阅读和开始思考的好工具 与苹果已经提供的工具来帮助解决这
  • 允许从 servlet 进行渐进式下载吗?

    我在传送多媒体数据的 servlet 方面遇到问题 我尝试在 iPhone 上的 mobile safari 中使用它 但收到 服务器配置不正确 错误 我在 Mac Apache 上使用网络共享来服务器相同的多媒体文件 并且工作正常 我开始
  • 如何让付费版和免费版iOS应用共享FB App ID?

    我有同一个 iPhone 应用程序的免费版和付费版 我希望他们共享一个 Facebook 应用程序 ID 因为它们本质上是同一个应用程序 我认为我可以通过使用 Facebook 类中的这个方法来完成此任务 void authorize NS
  • iOS OpenGL ES 2.0:离屏渲染并将结果保存到 UIImage

    我正在使用 OpenGL ES 渲染一些特殊效果 我不想向用户显示这些效果 我只想将结果保存为 UIImage 有人可以帮助我吗 这是我正在使用的代码 我可以获得一个包含我使用的红色透明颜色的图像 但没有显示几何图形 import Rend
  • 您无权使用此服务 iTunes 应用程序上传错误 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 自 2015 年 11 月末 Apple 用户和角色 更新至 iTunesConnect 以来 一些人一直遇到错误消息 iTunes

随机推荐

  • Android:如何在设置背景可绘制时保持角半径?

  • 如何在 Vim 中使用“wildignore”?

    我在弄清楚语法时遇到了很多麻烦wildignoreVim 中的设置 假设我想要我的文件查找器插件 我使用Ctrlp http kien github com ctrlp vim 它使用wildignore 不搜索隐藏的文件和文件夹 即以 a
  • 如何删除树枝中数组的第一项?

    我在树枝中有一个名为 Posts 的数组 有没有办法轻松删除该数组的第一项 所以它的结构就像这样 array post 1 post 2 post 3 我想知道是否可以使用 twig 中的函数轻松删除第一篇文章 array post 2 p
  • 如何使表单的特定部分可滚动?

    我正在用 vb6 编写一个程序 要求我能够向右滚动屏幕的某个区域 它仅由线条和图片框组成 有没有办法只滚动该区域 谢谢 您可以利用以下事实 某些可视控件可以充当其他可视控件的容器 举个例子 在 VBIDE 中 放置一个Frame通过 VB
  • 对所有参数组合应用函数

    我希望能够将函数应用于一组输入参数的所有组合 我有一个可行的解决方案 如下 但如果没有更好 更通用的方法来执行此操作 例如 我会感到惊讶plyr 但到目前为止还没有发现任何东西 有更好的解决方案吗 Apply function FUN to
  • 固定内存OpenCL,有人成功使用过吗?

    我用的是CL MEM ALLOC HOST PTR与我的旗帜clCreateBuffer调用 但计算分析器将我的所有 主机内存传输类型 显示为可分页 我在两种不同的内核设置中尝试过它 但分析器不会显示我正在使用固定内存 当内核开始使用固定内
  • ICS 模拟器没有软件按钮吗?

    因此 我正在将我的应用程序从 3 0 更新到 4 0 但我遇到了模拟器问题 具体来说 软件按钮可以not使用 Galaxy Nexus ish 皮肤时会出现 我不确定它是否准确 但应该足够接近 这是WXGA720 它的值 Hardware
  • 将树状图与 Python 的 scipy.cluster.hierarchy 中的簇号进行匹配

    以下代码生成一个具有 10 个叶节点的简单层次聚类树状图 import scipy import scipy cluster hierarchy as sch import matplotlib pylab as plt X scipy r
  • Python tkinter画布闪烁

    首先 我应该声明 我知道该网站上还有其他名称相似的帖子 我已经经历过它们 但据我所知 它们并没有解决我的问题 实际上我想说我的问题比大多数例子要简单得多 简而言之 我想创建一个透明矩形 可以用来显示拖动选择区域 当我发现 tkinter 不
  • 我制作的相机效果不佳,为什么玩家移动速度比相机快?

    我制作了一个游戏 但是当我想添加相机来移动玩家时 它不起作用 玩家移动得比相机快并离开屏幕 我尝试从地形中移除玩家的大小 但没有任何效果 玩家仍然从屏幕中消失 这是我的代码 pygame init scsizeX 600 scsizeY 4
  • 为什么这个数字会加一? [复制]

    这个问题在这里已经有答案了 console log 10209761399365907 为什么此代码输出一个大一的数字 10209761399365908 而不是 10209761399365907 仅此特定号码才会发生这种情况 例如 使用
  • 在sql中按月份名称分组

    我有一张桌子 看起来像 id Item Quantity Amount created 1 Monitor 10 5000 2013 01 11 2 Keyboard 10 200 2013 02 19 3 Monitor 10 5000
  • 在 Scala 2.8 集合中,为什么在 Iterable 之上添加 Traversable 类型?

    我知道那是Traversable 你只需要有一个foreach方法 Iterable需要一个iterator method Scala 2 8 集合 SID 和 Fighting Bitrot with Types 论文基本上都没有提及为什
  • AMPL:对 cplex 使用“timelimit”选项后的结果是否满足所有约束?

    我有一个虚拟问题 我需要知道它的答案 我正在开发一个需要 AMPL 和 CPLEX 作为求解器的项目 现在这个问题一般需要140秒以上才能解决 当我搜索时 我进入了一个名为timelimit 我有价值地使用了这个选项option cplex
  • 类型错误:无法将 datetime.timedelta 与 float 进行比较

    我正在编写 python 脚本来计算开始日期和结束日期之间的持续时间格式 例如20140520160000 and 20140520170000这样我就能得到时间 我在使用这段代码时遇到了问题 if epgDuration gt 0 10
  • 如何正确使用php fopen()

    我正在学习 php 尝试使用fopen 功能 我正在编码的php文件位于这个目录中 domains xxxxx com au public html phpfile php我为要打开的文件指定什么路径 我正在查看的示例基于电脑上的服务器 其
  • 如何在 C 中对单个数字的所有位进行异或?

    有没有一种简单的方法将单个数字的所有位异或在一起 即 C 中的一元异或 具有以下效果的东西 result 0x45 0 1 0 0 0 1 0 1 1 result 0x33 0 0 1 1 0 0 1 1 0 GCC 为此内置了一个 in
  • 大量在线对话文本的情感分析

    标题说明了一切 我有一个 SQL 数据库 其中充满了在线对话文本 我已经用 Python 完成了这个项目的大部分内容 所以我想使用 Python 的 NLTK 库来完成此操作 除非有一个strong不这样做的理由 数据的组织方式为Threa
  • 何时使用 cudaHostRegister() 和 cudaHostAlloc()? “固定或页面锁定”内存是什么意思? OpenCL 中哪些是等效的?

    我刚刚接触 Nvidia 的 API 有些表达对我来说不太清楚 我想知道是否有人可以帮助我了解何时以及如何以简单的方式使用这些 CUDA 命令 更准确地说 在研究如何通过内核并行执行 例如使用 CUDA 来加速某些应用程序时 在某些时候我面
  • 如何在不使用 NSTimer 的情况下在 iPhone 上循环游戏

    为了将我的游戏干净地移植到 iPhone 我正在尝试制作一个不使用 NSTimer 的游戏循环 我在一些示例代码中注意到 如果使用 NSTimer 您需要在开始时使用类似的内容进行设置 self animationTimer NSTimer