我已经做了一些搜索,但没有发现任何直接解决我的问题:我有一个SKScene
,其中有几个SKNodes
,每个SKSpriteNode
个对象用于我的游戏,我就是使用背景UIImageView
(我需要用背景做一些事情,用sprite工具包无法合理完成 - 至少据我所知);我遇到的问题是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
.. 。),我使用UIImageView
作为我的背景(我随着时间的推移在背景场景之间切换,并且使用UIViewAnimationOptionTransitionCrossDissolve;
等一些不错的过渡无法通过SKSpriteNode
实现此目的作为背景,不使用多个SKSpriteNodes
和错综复杂的SKActions
数组,因此我使用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
发送给实际的背景?
答案 0 :(得分:2)
您的问题在于您直接将SKView
设置为控制器视图。要克服此问题,请不要将self.view
作为SKView
的类型。在故事板或Xib中执行以下步骤:
UIImageView
。同时设置图像。SKView
上添加UIImageView
并将UIClearColor
设置为背景颜色。 因此,完整的层次结构就像UIViewController
- > UIView
- > UIImageView
- > SKView