ios - SKScene的更新功能似乎不起作用

标签 ios swift sprite-kit skscene

我是 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) 当您的 GameSceneSKView 中呈现时被调用,因此您的代码呈现另一个 >SKScene(不是 GameScene),一旦出现 GameScene,并且您已添加 Loam Sprite 到这个新场景。

在你告诉它之前,负责调用 update 的东西甚至没有机会调用你的 GameSceneupdate 方法呈现一个新的SKScene。因此,会调用新场景的 update

现在您应该明白为什么删除 skView.presentScene 会导致调用 GameSceneupdate 。由于您将 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/

相关文章:

ios - 为什么我不能调用我的 IBOutlet 以便我可以让它成为 XCode 9.3 中的委托(delegate)

ios - NSFileManager.defaultManager().fileExistsAtPath 返回 false 而不是 true

swift - 真实设备上的 SKTileMap 物理错误

ios - 如何使用 swift 关闭和取消初始化 (Game)ViewController?

iphone - 使 MKMapView 透明但保持覆盖层不透明

ios - 如何获取 UIView 中的所有 UILabel

ios - iOS加载xib时会调用API吗?

ios - 计算 UITextView 中的行数,由帧大小包裹的行

swift - UICollectionView 只显示最后一个单元格

swift - 多个 SKSpriteNode 的 SpriteKit 多个 SKActions - 等待所有完成