如何让我的精灵套件场景出现在 UIView 上方?

Posted

技术标签:

【中文标题】如何让我的精灵套件场景出现在 UIView 上方?【英文标题】:How to make my sprite kit scene appear above a UIView? 【发布时间】:2015-05-15 02:44:18 【问题描述】:

我已经进行了一些搜索,但没有找到任何直接解决我的问题的方法:我有一个 SKScene 和几个 SKNodes,每个 SKSpriteNode 对象用于我的游戏,并且我正在使用背景 UIImageView (我需要对背景做一些事情,而精灵套件无法合理地完成——至少据我所知);我遇到的问题是UIImageView 出现在所有内容上方,我看不到我的游戏对象。

在我的视图控制器(.m 文件)中,我有以下代码来调用我的场景

@implementation GameViewController

- (void)viewDidLoad

    [super viewDidLoad];
    SKView * skView = (SKView *)self.view;

     SKScene * scene = [GameScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    [skView presentScene:scene];


在上面的GameScene 中,我有几个SKNodes,其中我的所有游戏对象都是子对象(例如nodeHDUnodePlaynodePauseMenu...),我使用的是@987654332 @ 作为我的背景(随着时间的推移,我在背景场景之间切换,并且正在使用一些不错的过渡,例如 UIViewAnimationOptionTransitionCrossDissolve; 无法在不使用多个 SKSpriteNodes 和复杂的 SKActions 数组的情况下使用 SKSpriteNode 作为背景来实现这一点所以我使用UIImageView)

UIView *backgrounds = [[UIView alloc] init];
[self.view insertSubview:backgrounds belowSubview:self.view];

UIImageView *imageBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[backgrounds addSubview:imageBackground];
[backgrounds sendSubviewToBack:imageBackground];
[imageBackground setImage:[UIImage imageNamed:@"1-A.png"]];
imageBackground.alpha=1.0;

但是,上面的ImageBackground 是我在 Xcode 中运行应用程序时看到的唯一内容。我的游戏中的其他对象(其他节点的子节点)存在,并且正在调用各种 NSLog 语句,但它们似乎出现在我拥有的 ImageBackground 后面。 “belowSubview”和“sendSubviewToBack”上面的代码没有帮助。

那么我怎样才能将imageBackground 发送到真正成为后台?

【问题讨论】:

【参考方案1】:

您的问题在于您直接将SKView 设置为控制器视图。为了克服这个问题,不要将self.view 设为SKView 的类型。在故事板或 Xib 中执行以下步骤:

    首先在控制器的视图上添加UIImageView。也设置图像。 然后在UIImageView 上添加SKView 并将UIClearColor 设置为背景颜色。

所以完整的层次结构就像UIViewController->UIView->UIImageView->SKView

【讨论】:

以上是关于如何让我的精灵套件场景出现在 UIView 上方?的主要内容,如果未能解决你的问题,请参考以下文章

暂停精灵套件场景

精灵套件联系代表

有没有办法从代码中获取放置在场景编辑器中的 SKSpriteNode 的当前位置? - 精灵套件

如何在精灵套件中旋转精灵节点?

如何让我的编辑文本出现在键盘上方

如何在我的精灵套件游戏 Swift 中为所有 iPhone 获得相同的布局尺寸