问题标签 [cadisplaylink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 使用 CADisplayLink 强制重绘
我目前正在使用CADisplayLink
显示效果很好的 OpenGL 动画。有时,但是参数发生变化,我需要立即重绘视图,不能等到下一帧被CADisplayLink
. 如果我不这样做,我会得到一帧错误,这在我的情况下看起来非常糟糕。
那么,我怎样才能在EAGLView
不干扰CADisplayLink
内容的情况下强制重绘?
syntax - 如何用 CADisplayLink 替换 NSTimer?
我使用 NSTimer 调用 doPoof 方法,如下所示:
如何使用 CADisplayLink 而不是 NSTimer 替换上述内容?
ios - CADisplayLink 目标选择器在失效后被触发
我有一个触发draw
Director 对象中的方法的 CADisplayLink。我想使 CADisplayLink 无效,然后取消分配 Director 对象使用的一些单例缓存对象。该draw
方法不保留单例缓存对象。
在 Director 中调用的一个方法stopAnimation
中(此方法与方法无关draw
),我这样做:
然后我开始释放单例缓存对象,但随后 CADisplayLink 触发并且该draw
方法最后一次被调用。这些draw
方法尝试访问已释放的单例对象并且一切都崩溃了。
这只有时会发生:有时应用程序不会崩溃,因为在 displayLink 实际无效并且 draw 方法已经完成运行之后释放了 Cache 对象。
在使 displayLink 无效后,如何检查 draw 方法是否已完成运行并且它不会再次触发,以便安全地使 Cache 对象无效?如果可能的话,我不想修改draw
方法。
我尝试了多种组合,包括displayLink invalidate
在主线程上使用
[self performSelectorOnMainThread:@selector(stopAnimation) withObject:self waitUntilDone:YES]
或尝试通过使用在 currentRunLoop 中执行它
[[NSRunLoop currentRunLoop] performSelector:@selector(stopAnimation) target:self argument:nil order:10 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];
但结果总是一样的,有时它会过早释放共享缓存。
我也不想performSelector:withObject:afterDelay:
随意延迟使用该方法。我想确保 displayLink 无效,draw 方法结束,并且不会再次运行。
iphone - 在 xcode 上有多个 CADisplayLink
我想知道一个应用程序中是否可以有两个 CADisplayLink ?
对不起我的英语我是法国人
iphone - iOS 的定时器 1 毫秒分辨率
在我的应用程序中,我有一个需要在屏幕上移动的对象(汽车图像)。如果可能的话,我需要每 1ms 安排一次 myFunction 。我阅读了苹果文档,我了解到 NSTimer 分辨率限制为 50-100 毫秒,这对于我的用例(在屏幕上快速移动对象)来说是不够的。
NSTimer 对象的替代品可能是什么?
提前致谢。
iphone - 从 Xcode 启动 iPhone 应用程序时运行方式不同
我正在开发一款基本上有两个计时器来控制游戏玩法的游戏。一个计时器是 CADisplayLink,它每帧都会调用以重绘显示(使用 OpenGL),因此频率略低于 60 Hz。另一个计时器是更新游戏逻辑的 NSTimer,我曾尝试在 30 Hz 和 100 Hz 之间的任何地方运行它。
当我在 iOS 模拟器中运行程序时,它很迟钝,似乎在跳帧。当我使用 Xcode 在手机上运行程序时,它运行良好,没有任何延迟或跳过。然后,当我从手机主屏幕上的图标运行程序时,它会出现延迟。
在我的手机上加载程序并从 Xcode 运行它并从手机本身启动它有什么区别?我知道它正在与 Xcode 调试器进行通信,但是连接到 Xcode 时如何才能更好地工作?
最后,当我从同一个 CADisplayLink 运行游戏逻辑和图形时,延迟似乎要小得多。有一个显示链接和一个 NSTimer 真的会导致这样的问题吗?
iphone - CADisplayLink 前向声明错误
好的,所以我已经被这个编译器错误困扰了好几个小时,问题是我所做的所有谷歌搜索都表明它应该按照我的方式工作!我正在关注 iPhone 游戏开发的书籍教程,但由于随机编译器错误,我被困在第二章。
注意:我目前正在使用 iOS 5 beta 在 XCode 4.1 中运行和测试
这是声明:
在头文件中:
在 .m 文件中
这两个都会引发错误: Receiver 'CADisplayLink' for class message is a forward declaration
但是网上所有的帖子都有完全一样的行。错误类型是“自动引用计数问题”。
任何帮助是极大的赞赏!
iphone - iPhone OpenGL ES glFlush() 始终慢
似乎是随机的(但在任何给定的程序运行期间通常是一致的),我的presentRenderBuffer
调用非常慢。我把它追踪到了一个调用glFlush()
,presentRenderBuffer
所以现在我glFlush()
在 presentRenderBuffer 之前调用。我放了一个计时器glFlush()
,它会做两件事之一,似乎是随机的。
glFlush()
任何一个
1) 始终需要 0.0003 秒
或者
2) 在大约 0.019 和 0.030 秒之间交替
最奇怪的是,这与绘图代码无关。即使我注释掉所有绘图代码以便它所做的只是调用glClear()
,我仍然只是随机获得两个结果之一。
绘图方法由CADisplayLink
具有以下设置的 an 调用:
我发现无法确定导致其中一个结果发生的原因。任何人都可以提供想法吗?
iphone - CADisplayLink 在停止后会再触发一次
一切都很好,直到昨天我的应用程序开始表现得很奇怪。它在模拟器上工作正常,但在 iPhone4 上,即使停止它,它也会执行一个额外的循环。这是我的初始化程序,它创建一个新的 CADisplayLink 计时器或恢复现有的计时器:
}
我需要非常频繁地停止和恢复计时器,所以我用 pause 属性停止计时器:
然后我调用初始化程序来恢复它(self.theTimer.pause = NO)。如前所述,它对选择器方法执行了一次额外的调用。很奇怪,我让这个应用程序运行了一个多月没有出现 CADisplayLink 问题。我最近没有对 iPhone 进行任何更新。此外,系统声音同时停止播放,但 AVAudioPlayer 对象仍然有效。正如我所说,计时器和声音都可以在模拟器上完美运行,但我想找出导致 iPhone 出现问题的原因。所有的东西都是用纯 UIKit 完成的。任何想法从哪里开始?
ios - 将 CADisplayLink 添加到 Cocos2D
我的应用程序中有 Cocos2D,我将它用作我的游戏的游戏引擎。在这一点上,我需要以屏幕刷新的速度进行游戏循环。所以这让我认为我需要使用 CADisplayLink。那么我将如何实现 CADisplayLink 以便以屏幕刷新的速度调用包含 Cocos2D 的游戏循环?
谢谢!