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 正确切换 SpriteKit 中的 SKScene?