Gamescene.swift 和 Gamescene.sks 不能一起工作

问题描述 投票:0回答:3

我的 xCode 项目有问题。我有一个完整的 gamescene.swift 文件,其中包含代码(600 行)。但代码不会运行。当我在模拟器中运行游戏时,模拟器显示标准的 gamescene.sks 颜色以及我的广告,但它没有显示我的任何代码。我已经检查过 gamescene.sks 中的自定义类是否正确。一切正常,除了 gamescene.swift 代码之外,它不会运行。

import UIKit
import SpriteKit
import GameplayKit
import GoogleMobileAds

class GameViewController: UIViewController {


@IBOutlet weak var GoogleBannerView: GADBannerView!
@IBOutlet weak var MainMenu: UIButton!
override func viewDidLoad() {
    super.viewDidLoad()

    GoogleBannerView.adUnitID = "ca-app-pub-13***46014918193/236762****"
    GoogleBannerView.rootViewController = self
    GoogleBannerView.load(GADRequest())


    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        if let scene = SKScene(fileNamed: "GameScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .resizeFill

            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true

        view.showsFPS = false
        view.showsNodeCount = false
        view.showsPhysics = true
    }



}

override var shouldAutorotate: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    if UIDevice.current.userInterfaceIdiom == .phone {
        return .allButUpsideDown
    } else {
        return .all
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}

override var prefersStatusBarHidden: Bool {
    return true
}

}

swift xcode sprite-kit
3个回答
20
投票

我设法解决了这个问题。下面是工作代码。

if let view = self.view as! SKView? {
    // Load the SKScene from 'GameScene.sks'
    if let scene = GameScene(fileNamed: "GameScene") {
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .resizeFill

问题是,我没有指定要加载的场景,而是使用了更通用的

SKScene
标识符

if let scene = SKScene(fileNamed: "GameScene")

简单的解决方法是将“SKScene”更改为我的 SKScene 名称。

if let scene = GameScene(Filenamed: "GameScene") 

希望这对遇到此问题的其他人有所帮助。


6
投票

我在我的一些项目中也遇到过类似的问题,但不是全部。即使在正在运行的项目上,我为另一个项目复制了代码和场景文件,它们也会停止工作。我发现,如果您的项目名称中有任何空格或特殊字符,则场景文件和 sks 文件中的项目将不会加载,除非您在自定义类类型下方输入“模块”名称。

对我来说,在注册任何 sks 文件之前,我的项目被命名为“Crag & Pig”,我必须在“模块”中为 sks 文件中的所有项目输入“Crag_Pig”。

有趣的是,在任何没有空格或特殊字符的项目中,我不必为模块输入任何内容


3
投票

谢谢。即使 SpriteKit Games 的 Xcode 中的默认模板也存在这个问题。自 swift 4 + iOS 11 发布以来。 我一直以为是我的问题,但从来没有花时间去寻找原因。直到现在,出于好奇。我更改了你写/修复的行,瞧。

刚刚更改了您所在行的参数 fileNamed: 中的大写字母

if let scene = GameScene(fileNamed: "GameScene")
© www.soinside.com 2019 - 2024. All rights reserved.