如何在ios7中的MyScene上设置背景图像

时间:2013-09-25 10:18:39

标签: objective-c ios7 sprite-kit

当我在SKScene上设置背景图像时。我写了下面的代码:

#import "JTEDMyScene.h"
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
@interface MyScene()
@property BOOL isContentCreated;
@end

@implementation MyScene

-(void) didMoveToView:(SKView *)view
{

 if(!self.isContentCreated)
 {
    self.isContentCreated = YES;
    [self createSceneContent];
 }
}

-(void)createSceneContent
{
 [self addChild:[self createBackground]];
}

-(SKSpriteNode *)createBackground
{
SKSpriteNode *backgroundSprite;
SKTexture *textureImage;
if (IS_IPAD) {
    textureImage = [SKTexture textureWithImageNamed:@"home_ipad1.jpg"];
    backgroundSprite = [SKSpriteNode spriteNodeWithTexture:textureImage];
}
backgroundSprite.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

return backgroundSprite;
}

设备方向模式仅横向左侧和右侧横向。我的图像大小是宽度= 1024,高度= 768和264 dpi。但是图像没有完全显示图像的一部分显示。

4 个答案:

答案 0 :(得分:1)

尝试在viewWillLayoutSubviews中展示和创建MyScene - 如果您还没有这样做的话。 如果您只是将viewDidLoad重命名为viewWillLayoutSubviews并重命名超级调用,它可能会有效。

答案 1 :(得分:1)

Maq有正确的想法。我想他所说的是,问题在于你的视图控制器.m文件,而不是在你的场景中。而不是创建您的SKView和SKScene并从VC的viewDidLoad方法中呈现SKScene,而是将该代码放在viewWillLayoutSubviews方法中。有点像这样:

-(void)viewWillLayoutSubviews  {
  [super viewWillLayoutSubviews];

  SKView * skView = (SKView *)self.view;
    SKScene * scene = [YourScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    [skView presentScene:scene];
}

显然,viewWillLayoutSubviews会在viewDidLoad之后调用。调用viewDidLoad时,视图尚未添加到视图层次结构中。

Ray Wenderlich的Sprite Kit Tutorial for Beginners引用了this answer来自SO的原因。

答案 2 :(得分:0)

我开始了一个空白项目,并将代码复制粘贴到其中,并且工作正常。我知道你说你设置了你的设备方向,但你是否在项目设置中这样做了?这是我能想到的唯一问题。选择项目,常规选项卡,在“部署信息”下,有一个“设备”下拉框。选择iPad并确保选中“仅左侧风景”和“右侧风景”。我的猜测是该项目认为它应该以纵向模式开始,所以它将你的768高图像垂直拉伸到1024;然后,当您的应用确定它处于横向时,它会相应地旋转拉伸的图像,这会导致图像被截断。

答案 3 :(得分:0)

是的,控制和调整背景图片大小(在我的情况下)对应于设备方向,你必须使用 - (void)viewWillLayoutSubviews

但不要忘记,它默认从第一个场景开始,所以你需要在这个函数中使用一些“sceneNumber”选择器来指向实际的场景