【问题标题】:Swift SKScene shows as blank in Objective-C projectSwift SKScene 在 Objective-C 项目中显示为空白
【发布时间】: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 对应项。他们现在应该链接吧?我应该怎么做才能加载我的视图?我是新手:/

标签: objective-c swift xcode sprite-kit


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多