gpt4 book ai didi

ios - SKAction 未在 SKSpriteNode 上运行

转载 作者:搜寻专家 更新时间:2023-10-31 21:59:05 25 4
gpt4 key购买 nike

我的 SKShapeNode 上的 SKAction 不工作,代码没有执行,节点没有移动,即使控制台正在记录“蛇在动”。是因为节点是 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()
}
})
])))
}
}

过去,当它们的属性在与操作相同的函数中声明时,它可以工作

最佳答案

myNode 是一个计算属性。 self.addChild(myNode) 添加一个节点,但是没有 myNode 存储属性。

myNode.run 首先计算一个新节点而不将其添加到场景中。然后它调用运行它的 Action 。但由于它是一个不在现场的不同节点,它永远不会运行。

将您的 myNode 定义更改为:

var myNode : SKShapeNode!

并在 didMove(查看: 添加:

myNode = SKShapeNode(rectOf: snake.componentSize)
myNode.position = snake.head
myNode.fillColor = .red

关于ios - SKAction 未在 SKSpriteNode 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com