我是 SpriteKit/iOS 开发者的 super 菜鸟,如果这是一个愚蠢的问题,我很抱歉。
我想做的是在 SwiftUI View 中呈现一个小游戏。一切都很完美,除了由于某种原因我的 GameScene 类中的 update() 函数根本不起作用。
Sprite 仍然会像平常一样动画和移动,但我无法向它们添加任何进一步的逻辑。
例如,以下内容永远不会打印出“hello world”:
class GameScene: SKScene
{
let loam = Loam() //little sprite character class
//sets up scene
override func didMove(to view: SKView)
{
let skView = view
//loads game scene
let scene = SKScene(size: skView.bounds.size)
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.backgroundColor = UIColor(red: 0.9412, green: 0.8274, blue: 0.7372,alpha: 0.5)
scene.addChild(loam.loam)
skView.presentScene(scene)
}
//called before each frame is rendered
override func update(_ currentTime: TimeInterval)
{
print("hello world")
}
}
我使用 update() 是否错误? SwiftUI 的 SpriteView 和 SKScene 之间是否存在某种冲突?
编辑:我发现删除
skView.presentScene(scene)
允许 update() 工作 - 但它不会渲染任何 Sprite /动画。
最佳答案
didMove(to view: SKView)
当您的 GameScene
在 SKView
中呈现时被调用,因此您的代码呈现另一个 >SKScene
(不是 GameScene
),一旦出现 GameScene
,并且您已添加 Loam
Sprite 到这个新场景。
在你告诉它之前,负责调用 update
的东西甚至没有机会调用你的 GameScene
的 update
方法呈现一个新的SKScene
。因此,会调用新场景的 update
。
现在您应该明白为什么删除 skView.presentScene
会导致调用 GameScene
的 update
。由于您将 Loam
添加到了新场景(现在未显示),因此您看不到它。
您根本不需要创建新场景。你已经是其中之一了。只需将 Loam
添加到 self
即可:
anchorPoint = CGPoint(x: 0.5, y: 0.5)
backgroundColor = UIColor(red: 0.9412, green: 0.8274, blue: 0.7372,alpha: 0.5)
addChild(loam.loam)
关于ios - SKScene的更新功能似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75563568/