我是SpriteKit/iOS开发人员的超级新手,如果这是一个愚蠢的问题,我很抱歉.

我想要做的是在SwiftUI视图中呈现一个小游戏.除了由于某种原因,我的GameScene类中的update()函数根本不起作用之外,一切都运行得很完美.

精灵仍然会像往常一样活动和移动,但我不能给它们添加任何进一步的逻辑.

例如,以下代码永远不会打印出‘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")
    }
}

我使用的更新()是错误的吗?SwiftUI的SpriteView和SKScene之间是否存在某种冲突?

编辑:我发现删除

skView.presentScene(scene)

允许UPDATE()工作--但之后它不会渲染任何精灵/动画.

推荐答案

当您的GameScene呈现在SKView中时,将调用didMove(to view: SKView),因此您的代码将呈现另一个SKScene(这不是GameScene),呈现as soon as GameScene,并且您已经将Loam精灵添加到了这个新场景中.

在您告诉GameScene提供一个新的SKScene之前,负责呼叫update的人甚至没有机会调用您的GameSceneupdate方法.结果,这个新场景被称为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相关问答推荐

滚动时突出显示工具栏项目

封装 Swift 导入

在最新版本的 iOS 中,设备上的Localized.strings文件发生了什么变化?

Swift UI中如何为Text提供内部填充

当任何 TextEditor 有多于一行时,所有 TextEditor 都会调整大小

不可发送类型 '[String : Any]?'在调用非隔离实例方法 XXX 时退出主参与者隔离上下文不能跨越参与者边界

Toast 不显示 Flutter

将 URLCache 子类与 URLSession 一起使用

具有一个参数/参数的泛型类的泛型类

AppCenter 错误:/usr/bin/xcodebuild 失败,返回码:65

SwiftUI:通过Sheet将数据添加到Realm DB时视图不更新

SwiftUI 切换语句

检测 iPhone 应用程序中是否存在摄像头?

iOS 中是否有用于自定义振动的 API?

Xcode 4.1 致命错误:自构建预编译头文件后修改了 stdlib

在 Swift 中上传带参数的图像

判断从 JSON 字符串返回的 Objective-C 中的空值

如何用 CAShapeLayer 和 UIBezierPath 画一个光滑的圆?

如何使用 AFNetworking 设置超时

iOS 7 应用程序图标、启动图像和命名约定,同时保留 iOS 6 图标