移动节点后,SKSpriteNode的X,Y坐标不会更改

问题描述 投票:1回答:2

我有以下代码将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

ios sprite-kit skspritenode
2个回答
1
投票

SKAction在0.5秒的时间内移动节点。执行allNodes[0].run(moveNodePos)行,moveBy动作开始,紧随其后的代码(即打印语句)立即执行。这意味着当您执行print语句时,操作仍未完成且节点尚未移动。在动作完成后尝试打印节点的位置,例如运用

allNodes[0].run(moveNodePos, completion: { insert the print statements here } )

希望这可以帮助!


0
投票

SKAction随着时间的推移发生,因为该程序反复通过the rendering loop

由于程序没有通过allNodes[0].run(moveNodePos)运行语句和以下print语句之间的渲染循环,因此该操作没有机会在print语句时修改节点的位置。

© www.soinside.com 2019 - 2024. All rights reserved.