如何让我的精灵套件场景出现在 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
,其中我的所有游戏对象都是子对象(例如nodeHDU
、nodePlay
、nodePauseMenu
...),我使用的是@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 上方?的主要内容,如果未能解决你的问题,请参考以下文章