我正在尝试将节点从一个Tile移动到另一个Tile。这里的问题是:如果我运行它,那么来自节点的position.y会有一些像63.9999而不是64,如果从32开始并在启动屏幕后立即触摸。
class A: SKScene {
//Changed if screen Touched
var abc = 0
var node = SKSprideNode!
override viewDidLoad() {
node.run(SKAction.repeatForever(SKAction.sequence(
[
SKAction.moveBy(x: 0, y: 32, duration: 1),
SKAction.run{
self.node.position.y = round(self.node.position.y)
if self.abc != 1 {
self.node.removeAllActions()
}
}
]
)))
}
override func touchesBegan(...) {
abc = 1
}
override update() {
print(node.position.y)
}
}
这里是控制台的输出:
32.0
32.0
33.4936981201172
34.4316482543945
35.3333969116211
36.4936981201172
...
...
63.9936981201172
64.0
64.4936981201172
64.4936981201172
64.4936981201172
它应该是64.0,为什么它不是64.0?
答案 0 :(得分:0)
我想使用当前iOS 9的术语,swift 2.3。
来自Apple docs:
“要重复的动作必须具有非瞬时持续时间。”。
执行 runBlock 时,会立即执行操作。因此,您没有使用repeatActionForever
,因为它意味着要使用。
你只需要添加一点延迟就可以了。事实上,如果你试图在你的行动之前稍微等待一下,那么:
SKAction.waitForDuration(0.1),
SKAction.moveBy(x: 0, y: 32, duration: 1),
SKAction.run{ ...
你应该按照自己的意愿获得64.0。