我试图找到一种方法来跟踪多个节点的位置,这些位置在屏幕上随机出现,这样我就可以在到达随机位置时移动它们。
节点只是沿着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))
}
但它并没有给我任何控制随机位置
答案 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
}
}
}
}