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

时间:2016-06-26 20:11:55

标签: ios swift sprite-kit skspritenode skaction

我试图找到一种方法来跟踪多个节点的位置,这些位置在屏幕上随机出现,这样我就可以在到达随机位置时移动它们。

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

override func update(currentTime: CFTimeInterval)

我尝试在更新方法中进行更改,但是一旦新节点出现,我就会失去对previos的追踪

我也试过

        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))
    }

但它并没有给我任何控制随机位置

2 个答案:

答案 0 :(得分:1)

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

假设您有一个节点的引用:

var sprite1: SKSpriteNode!

你想把它产生到一个随机位置(一个示例方法......):

self.spawnToRandomPos(sprite1)

并且假设你想要moveTo你的精灵1:

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)
}

在此之后检索/重新获取你的精灵:

 let sprite1 = self.childNodeWithName("sprite1")

答案 1 :(得分:0)

可能有一百种不同的方法。我就是这样做的。

在您的更新功能

checkForCollisions()

这将只是滚动您随机生成的“障碍物”,并将您想要的任何颜色触发器发生。它们可以是您想要的任何内容,只需更改名称即可。如果它们与你的“球”重叠,那么你可以为其中一个着色。

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
            }
        }
    }
}