移动节点后,SKSpriteNode的X,Y坐标不会更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移动节点后,SKSpriteNode的X,Y坐标不会更改相关的知识,希望对你有一定的参考价值。
我有以下代码将SKSpriteNode从屏幕外的位置移动到屏幕上的位置。 spawnNode在屏幕外创建一个起始位置的节点。 nodePositions是一个包含x,y和Zposition点的struct数组。代码确实将节点移动到我想要的位置。但是,我想使用当前节点位置来稍后定位更多节点。打印语句显示相同的结果。 Pre&Post是一样的。这对我来说毫无意义。任何人都可以向我解释这个吗?看起来可能需要创建连续节点的子节点。我不想这样做。
spawnNode()
allNodes[0].texture = SKTexture(imageNamed: imageName)
print("Pre: x: (String(describing: allNodes[0].position.x))")
print("Pre: y: (String(describing: allNodes[0].position.y))")
let duration: CGFloat = 0.5
moveNodePos = SKAction.moveBy(x: nodePositions[0].posX, y: nodePositions[0].posY, duration: TimeInterval(duration))
moveNodePos.timingMode = .easeIn
allNodes[0].zPosition = nodePositions[0].zPosition
allNodes[0].run(moveNodePos)
print("Post: x: (String(describing: allNodes[0].position.x))")
print("Post: y: (String(describing: allNodes[0].position.y))")
对于:x:0.0对于:y:500.0 Post:x:0.0 Post:y:500.0
答案
SKAction在0.5秒的时间内移动节点。执行allNodes[0].run(moveNodePos)
行,moveBy
动作开始,紧随其后的代码(即打印语句)立即执行。这意味着当您执行print语句时,操作仍未完成且节点尚未移动。在动作完成后尝试打印节点的位置,例如运用
allNodes[0].run(moveNodePos, completion: { insert the print statements here } )
希望这可以帮助!
另一答案
SKAction
随着时间的推移发生,因为该程序反复通过the rendering loop。
由于程序没有通过allNodes[0].run(moveNodePos)
运行语句和以下print
语句之间的渲染循环,因此该操作没有机会在print语句时修改节点的位置。
以上是关于移动节点后,SKSpriteNode的X,Y坐标不会更改的主要内容,如果未能解决你的问题,请参考以下文章