【问题标题】:Why can't I set SKScene(fileNamed:) in GameViewController?为什么我不能在 GameViewController 中设置 SKScene(fileNamed:)?
【发布时间】:2017-11-08 01:22:30
【问题描述】:

下面复制相关代码,我也在Github上放了一个简单的测试项目来演示这种情况:

https://github.com/prinomen/viewPresentSceneTest

我有一个GameViewController 和一个GameScene 课程。我尝试使用SKScene(fileNamed: "GameScene") 设置场景,但该调用不起作用,因为场景没有出现并且该行之后的打印语句没有被调用。

我知道我可以使用不同的方式来设置场景,如下所示:

let scene = GameScene()

但我正在尝试理解 SpriteKit,但下面的代码不起作用,这让我很困扰。在另一个项目中,我能够使用SKScene(fileNamed: "GameScene") 成功设置场景,如下面的代码所示。

有谁知道为什么它在这个项目中不起作用?

GameViewController.swift

import SpriteKit
class GameViewController: UIViewController {

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        if let scene = SKScene(fileNamed: "GameScene") {
            print("SKScene was set")
            // Set the scale mode fit the window:
            scene.scaleMode = .aspectFill
            // Size our scene to fit the view exactly:
            scene.size = view.bounds.size
            // Show the new scene:
            view.presentScene(scene)
        }
      }
    }
  }

GameScene.swift

import SpriteKit
class GameScene: SKScene {

override func didMove(to view: SKView) {
    self.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    let logoText = SKLabelNode(fontNamed: "AvenirNext-Heavy")
    logoText.text = "Game Scene"
    logoText.position = CGPoint(x: 0, y: 100)
    logoText.fontSize = 60
    self.addChild(logoText)
  }
}

【问题讨论】:

  • 食堂的回答解决了这个问题。为了修复我的项目,我创建了一个新的 GameScene.sks 文件,并在其自定义类检查器中的自定义类字段中输入了GameScene

标签: ios swift sprite-kit viewcontroller skscene


【解决方案1】:

我相信你需要一个.sks 文件来加载这样的场景。您可能已将其从该项目中删除,但仍保留在另一个项目中。

documentation 是这样说的:

文件名,不带文件扩展名。该文件必须在 应用程序的主包并具有 .sks 文件扩展名。

【讨论】:

  • 我在 SKScene 的文档中搜索了该初始化程序,但它没有出现在那里......有时我忘记了 SKScene 继承自 SKNode :) 我应该在那里检查!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多