【发布时间】:2017-07-12 12:15:30
【问题描述】:
我的SKShapeNode 上的SKAction 不起作用,代码没有被执行,节点也没有移动,即使控制台正在记录“Snake 正在移动”。是因为节点是 SKScene 的属性,而动作是较低范围函数的一部分?
class LevelScene: SKScene, SnakeShower {
var snake: Snake {
let theSnake = Snake(inWorld: self.size)
return theSnake
}
override func didMove(to view: SKView) {
self.backgroundColor = .green
snake.delegate = self
}
var myNode: SKShapeNode {
let node = SKShapeNode(rectOf: snake.componentSize)
node.position = snake.head
node.fillColor = .red
return node
}
func presentSnake() { // function called by the snake in the delegate (self)
self.addChild(myNode)
startMoving()
}
func startMoving() {
print("snake is moving")
myNode.run(SKAction.repeatForever(SKAction.sequence([
SKAction.move(by: self.snake.direction.getVector(), duration: 0.2),
SKAction.run({
if self.myNode.position.y > (self.size.height / 2 - self.snake.componentSize.height / 2) {
self.myNode.removeAllActions()
}
})
])))
}
}
当他们的属性被声明在与动作相同的函数中时,它曾经工作过
【问题讨论】:
-
“不工作”是什么意思 - 究竟发生了什么?
-
@SteveIves 已编辑。
-
我会说(从简短的角度来看)他正在处理错误的节点。他首先创建一个节点并添加它,然后获取另一个节点并尝试对其执行操作,但该节点不在节点树中。
-
@Whirlwind。我想你是正确的。
myNode是一个计算属性。self.addChild(myNode)添加一个节点,但没有myNode属性。然后myNode.run计算一个新节点,但在尝试对其运行操作之前不将其添加到场景中。但无论如何它是一个不同的节点。 -
@Fayyouz 实际上,您没有一个名为 myNode 的节点。您有一个计算属性 myNode,每次引用它时,都会返回一个新的、不同的 SKShapeNode。
标签: ios swift sprite-kit