
游戏的设计
|
23
定时器可以仅触发一次,也可以触发无限次,只需要将
repeats
参数由
false
替换
为
true
即可。
1.8
每帧刷新
问题
我们想在屏幕每绘制一帧时,就刷新游戏状态。
解决方案
可以用
CADisplayLink
,它可以在屏幕每次重绘时发送消息给你。
首先,导入
QuartzCore
框架:
import QuartzCore
然后,在
View Controller
中声明一个实例变量:
var displayLink : CADisplayLink?
新增一个以一个
CADisplayLink
对象作为参数的方法:
@objc func screenUpdated(displayLink : CADisplayLink) {
//
进行游戏的刷新
}
最后,用以下代码开始接收屏幕重绘通知:
//
获得一个方法引用,当显示器刷新时执行这个方法
let screenUpdated = #selector(screenUpdated(displayLink:))
//
创建、启动
display link
displayLink = CADisplayLink(target: self, selector: screenUpdated)
displayLink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
如果想暂停屏幕刷新通知,可以将
CADisplayLink
的
paused
属性设置为
true
:
//
暂停屏幕重绘通知
displayLink?.ispaused ...