Fay*_*ouz 3 ios sprite-kit swift
在SKAction我SKShapeNode不工作,是没有得到执行的代码,并且节点是不动的,即使控制台登录"蛇正朝着".是因为节点是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()
}
})
])))
}
}
Run Code Online (Sandbox Code Playgroud)
当它们在与动作相同的函数中声明属性时,它曾经工作过
myNode是计算属性.self.addChild(myNode)添加节点,但没有myNode存储属性.
myNode.run首先计算新节点而不将其添加到场景中.然后它调用运行它的动作.但由于它是一个不在场的不同节点,它永远不会运行.
将你的myNode定义改为:
var myNode : SKShapeNode!
Run Code Online (Sandbox Code Playgroud)
并didMove(to view:补充:
myNode = SKShapeNode(rectOf: snake.componentSize)
myNode.position = snake.head
myNode.fillColor = .red
Run Code Online (Sandbox Code Playgroud)
我遇到了与此几乎相同的问题,其中引用的节点中有无响应的子节点。事实证明,引用的节点默认 isPaused 为 true(此处找到答案线程)
解决方案是将 isPaused 属性更改为 false。
referencedNode.isPaused = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |