在执行 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")
我正在尝试寻找一种方法来跟踪多个节点的位置,该位置随机出现在屏幕上,因此我可以在到达随机位置时移动时对它们进行更改。
节点只是沿 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")