问题标签 [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.

0 投票
2 回答
564 浏览

iphone - 使用 CADisplayLink 强制重绘

我目前正在使用CADisplayLink显示效果很好的 OpenGL 动画。有时,但是参数发生变化,我需要立即重绘视图,不能等到下一帧被CADisplayLink. 如果我不这样做,我会得到一帧错误,这在我的情况下看起来非常糟糕。

那么,我怎样才能在EAGLView不干扰CADisplayLink内容的情况下强制重绘?

0 投票
1 回答
618 浏览

syntax - 如何用 CADisplayLink 替换 NSTimer?

我使用 NSTimer 调用 doPoof 方法,如下所示:

如何使用 CADisplayLink 而不是 NSTimer 替换上述内容?

0 投票
2 回答
4798 浏览

ios - CADisplayLink 目标选择器在失效后被触发

我有一个触发drawDirector 对象中的方法的 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 方法结束,并且不会再次运行。

0 投票
1 回答
851 浏览

iphone - 在 xcode 上有多个 CADisplayLink

我想知道一个应用程序中是否可以有两个 CADisplayLink ?

对不起我的英语我是法国人

0 投票
1 回答
487 浏览

iphone - iOS 的定时器 1 毫秒分辨率

在我的应用程序中,我有一个需要在屏幕上移动的对象(汽车图像)。如果可能的话,我需要每 1ms 安排一次 myFunction 。我阅读了苹果文档,我了解到 NSTimer 分辨率限制为 50-100 毫秒,这对于我的用例(在屏幕上快速移动对象)来说是不够的。

NSTimer 对象的替代品可能是什么?

提前致谢。

0 投票
0 回答
243 浏览

iphone - 从 Xcode 启动 iPhone 应用程序时运行方式不同

我正在开发一款基本上有两个计时器来控制游戏玩法的游戏。一个计时器是 CADisplayLink,它每帧都会调用以重绘显示(使用 OpenGL),因此频率略低于 60 Hz。另一个计时器是更新游戏逻辑的 NSTimer,我曾尝试在 30 Hz 和 100 Hz 之间的任何地方运行它。

当我在 iOS 模拟器中运行程序时,它很迟钝,似乎在跳帧。当我使用 Xcode 在手机上运行程序时,它运行良好,没有任何延迟或跳过。然后,当我从手机主屏幕上的图标运行程序时,它会出现延迟。

在我的手机上加载程序并从 Xcode 运行它并从手机本身启动它有什么区别?我知道它正在与 Xcode 调试器进行通信,但是连接到 Xcode 时如何才能更好地工作?

最后,当我从同一个 CADisplayLink 运行游戏逻辑和图形时,延迟似乎要小得多。有一个显示链接和一个 NSTimer 真的会导致这样的问题吗?

0 投票
2 回答
2943 浏览

iphone - CADisplayLink 前向声明错误

好的,所以我已经被这个编译器错误困扰了好几个小时,问题是我所做的所有谷歌搜索都表明它应该按照我的方式工作!我正在关注 iPhone 游戏开发的书籍教程,但由于随机编译器错误,我被困在第二章。

注意:我目前正在使用 iOS 5 beta 在 XCode 4.1 中运行和测试

这是声明:

在头文件中:

在 .m 文件中

这两个都会引发错误: Receiver 'CADisplayLink' for class message is a forward declaration

但是网上所有的帖子都有完全一样的行。错误类型是“自动引用计数问题”。

任何帮助是极大的赞赏!

0 投票
2 回答
3129 浏览

iphone - iPhone OpenGL ES glFlush() 始终慢

似乎是随机的(但在任何给定的程序运行期间通常是一致的),我的presentRenderBuffer调用非常慢。我把它追踪到了一个调用glFlush()presentRenderBuffer所以现在我glFlush()在 presentRenderBuffer 之前调用。我放了一个计时器glFlush(),它会做两件事之一,似乎是随机的。

glFlush()任何一个

1) 始终需要 0.0003 秒

或者

2) 在大约 0.019 和 0.030 秒之间交替

最奇怪的是,这与绘图代码无关。即使我注释掉所有绘图代码以便它所做的只是调用glClear(),我仍然只是随机获得两个结果之一。

绘图方法由CADisplayLink具有以下设置的 an 调用:

我发现无法确定导致其中一个结果发生的原因。任何人都可以提供想法吗?

0 投票
1 回答
617 浏览

iphone - CADisplayLink 在停止后会再触发一次

一切都很好,直到昨天我的应用程序开始表现得很奇怪。它在模拟器上工作正常,但在 iPhone4 上,即使停止它,它也会执行一个额外的循环。这是我的初始化程序,它创建一个新的 CADisplayLink 计时器或恢复现有的计时器:

}

我需要非常频繁地停止和恢复计时器,所以我用 pause 属性停止计时器:

然后我调用初始化程序来恢复它(self.theTimer.pause = NO)。如前所述,它对选择器方法执行了一次额外的调用。很奇怪,我让这个应用程序运行了一个多月没有出现 CADisplayLink 问题。我最近没有对 iPhone 进行任何更新。此外,系统声音同时停止播放,但 AVAudioPlayer 对象仍然有效。正如我所说,计时器和声音都可以在模拟器上完美运行,但我想找出导致 iPhone 出现问题的原因。所有的东西都是用纯 UIKit 完成的。任何想法从哪里开始?

0 投票
1 回答
269 浏览

ios - 将 CADisplayLink 添加到 Cocos2D

我的应用程序中有 Cocos2D,我将它用作我的游戏的游戏引擎。在这一点上,我需要以屏幕刷新的速度进行游戏循环。所以这让我认为我需要使用 CADisplayLink。那么我将如何实现 CADisplayLink 以便以屏幕刷新的速度调用包含 Cocos2D 的游戏循环?

谢谢!