在执行 SKAction moveTo 时跟踪 SKSpriteNode 的位置

Track the position of SKSpriteNode while doing a SKAction moveTo

我正在尝试寻找一种方法来跟踪多个节点的位置,该位置随机出现在屏幕上,因此我可以在到达随机位置时移动时对它们进行更改。

节点只是沿 x 轴移动,我希望能够生成球的从 0 到 postion.x 的随机数,并在到达位置

时改变颜色
override func update(currentTime: CFTimeInterval)

我尝试在更新方法中添加更改,但一旦新节点出现,我就忘记了之前的节点

我也试过

        let changecolor = SKAction.runBlock{
        let wait = SKAction.waitForDuration(2, withRange: 6)
        let changecoloratpoint = SKAction.runBlock { self.changecolorfunc(self.ball)}
        let sequence1 = SKAction.sequence([wait, changecoloratpoint])
        self.runAction(SKAction.repeatAction(sequence1, count: 3))
    }

但我无法控制随机位置

可能有一百种不同的方法可以做到这一点。这是我的做法。

在你的更新函数中

checkForCollisions()

这只会滚动浏览您随机生成的 "obstacles",然后放置您希望触发颜色的任何人。它们可以是您想要的任何名称,只需更改名称即可。如果它们与您的 "ball" 重叠,那么您可以为一个或另一个着色。

func checkForCollisions() {

    self.enumerateChildNodesWithName("obstacles") { node, stop in

        if let obstacle: Obstacle = node as? Obstacle {

            if self.ball.intersectsNode(obstacle) {

                //color node or ball whichever you want
            }
        }
    }
}

您已经拥有了所需的一切。

假设您有一个节点参考:

var sprite1: SKSpriteNode!

并且您想将其生成到随机位置(示例方法..):

self.spawnToRandomPos(sprite1)

假设你想 moveTo 你的 sprite1:

self.sprite1.runAction( SKAction.moveToY(height, duration: 0))

每次你检查他的位置你就知道它在哪里:

print(sprite1.position)

所以要始终了解您的 sprite1 位置,您可以执行此代码并查看它的所有动作:

override func update(currentTime: CFTimeInterval) {
    print(sprite1.position)
}

P.S.:

如果您没有关于您生成的对象的引用,您还可以为通用对象命名,例如通过一个词后跟一个计数器(这只是一个例子):

for i in 0..<10 {
   var spriteTexture = SKTexture(imageNamed: "sprite.png")
   let sprite = SKSpriteNode(texture: spriteTexture, size: spriteTexture.size)
   sprite.name = "sprite\(i)"
   self.addChild(sprite)
}

在此之后 retrieve/re-obtain 你的 sprite 做:

 let sprite1 = self.childNodeWithName("sprite1")