Swift SKScene 在 Objective-C 项目中显示为空白

Posted

技术标签:

【中文标题】Swift SKScene 在 Objective-C 项目中显示为空白【英文标题】:Swift SKScene shows as blank in Objective-C project 【发布时间】:2017-06-16 05:28:35 【问题描述】:

我在 Xcode 中有一个基于 Objective-C 的项目。我正在尝试将 SpriteKit 场景添加为视图控制器中的较小视图。 SpriteKit 文件虽然很快。我添加了 Floor1.sks 并将其与 Floor1.swift 链接。

现在我正在尝试将它加载到我的 Objective-C ViewController.m 文件中。在我的故事板中,我查看了 SKView 类,我认为我正确地制作了一个桥接头文件。我现在插入它的代码是:

GKScene *scene = [GKScene sceneWithFileNamed:@"Floor1"];
Floor1 *sceneNode = (Floor1 *)scene.rootNode;
sceneNode.scaleMode = SKSceneScaleModeAspectFit;

SKView *skView = (SKView *)_skView;

[skView presentScene:sceneNode];

skView.showsFPS = YES;
skView.showsNodeCount = YES;

当我成功运行应用程序时,视图会加载,但它只是一个空视图,带有浅灰色背景,节点数为 0,并且 FPS。我做错了什么,为什么它不会加载我的正确视图?

【问题讨论】:

放一个断点,看看场景是否正在初始化。对了,Floor1是什么(scene.rootNode是什么)? @Whirlwind Floor1 是我的场景名称。有 Floor1.sks 和 Floor1.swift。在 sks 中,我将其自定义类设置为 swift 文件。对于加载我的视图的代码(我的问题中唯一的代码^^),它只是复制/粘贴到我的项目中。我似乎无法让它工作 那你为什么要从 Floor1.sks 加载 GKScene 呢?你的代码有点混乱。例如,您的场景似乎也有一个属性 rootNode 也是场景。你不能在一个场景中有一个场景。我的意思是理论上你可以,但是作为子场景添加到另一个场景中的场景将充当普通节点。 @Whirlwind 我尝试加载 sks,因为我认为这就是视图。在侧边栏上的 sks 检查器中,我将自定义类设置为其 swift 对应项。他们现在应该链接吧?我应该怎么做才能加载我的视图?我是新手:/ 【参考方案1】:

我遇到了同样的问题。原谅我的英语,我用谷歌翻译。 当我创建一个新的跨平台游戏时,我决定将其视为书面文件。即跨平台。它没有太多其他场景初始化。这一切都对我有用。以前只能在 ios 10 上运行,现在在 iOS 9 上运行。 我附在上面的截图

GameViewController.m

    #import "GameViewController.h"
#import "GameScene.h"

@implementation GameViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    GameScene *scene = [GameScene newGameScene];

    // Present the scene
    SKView *skView = (SKView *)self.view;
    [skView presentScene:scene];

    skView.ignoresSiblingOrder = YES;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

[GameScene.m][2]

#import "GameScene.h"

@implementation GameScene 
    SKShapeNode *_spinnyNode;
    SKLabelNode *_label;


+ (GameScene *)newGameScene 
    // Load 'GameScene.sks' as an SKScene.
    GameScene *scene = (GameScene *)[SKScene nodeWithFileNamed:@"GameScene"];
    if (!scene) 
        NSLog(@"Failed to load GameScene.sks");
        abort();
    

    // Set the scale mode to scale to fit the window
    scene.scaleMode = SKSceneScaleModeAspectFill;

    return scene;

[GameScene.h][3]

#import <SpriteKit/SpriteKit.h>

@interface GameScene : SKScene

+ (GameScene *)newGameScene;

@end

【讨论】:

以上是关于Swift SKScene 在 Objective-C 项目中显示为空白的主要内容,如果未能解决你的问题,请参考以下文章

在 SKScene、iOS、Swift 中获取/设置像素颜色

如何将 swift 文件与 SKscene 连接?

如何使用 Swift 正确切换 SpriteKit 中的 SKScene?

使用 Swift/SKScene 检测触摸

如何在 Swift 中将 SKScene 覆盖在 SCNScene 上?

无法在 Swift 游乐场中向 SKScene 添加滑动识别器?