2013-09-25 4 views
1

SKScene에서 배경 이미지를 설정할 때. 아래 코드를 작성했습니다 :ios7의 MyScene에서 배경 이미지를 설정하는 방법

#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입니다. 그러나 이미지가 표시되는 부분이 완전히 보이지 않습니다.

답변

0

빈 프로젝트를 시작하고 코드를 복사하여 붙여 넣기 만하면됩니다. 기기 방향을 설정했다고했는데 프로젝트 설정에서 그렇게 했습니까? 그것이 내가 생각할 수있는 유일한 문제입니다. 프로젝트, 일반 탭을 선택하고 배포 정보 아래에 "장치"드롭 다운 상자가 있습니다. iPad를 선택하고 "Landscape Left"와 "Landscape Right"만 확인하십시오. 내 생각 엔 프로젝트가 세로 모드에서 시작한다고 생각하기 때문에 처음 768 세로 이미지를 1024 세로 수직으로 늘립니다. 그런 다음 앱이 가로 방향으로 판단하면 해당 이미지가 그에 따라 이미지가 회전되어 이미지가 잘릴 수 있습니다.

+0

Yah "Landscape Left"및 "Landscape Right"만 선택했습니다. 여기서 내 화면 너비는 1024이고 높이는 768입니다. –

1

아직 작성하지 않았다면 viewWillLayoutSubviews에 MyScene을 제시하고 작성하십시오. viewDidLoad의 이름을 viewWillLayoutSubviews로 변경하고 수퍼 호출의 이름을 변경하는 경우에도 문제가 발생할 수 있습니다.

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가 호출되면 뷰는 아직 뷰 계층에 추가되지 않았습니다.

레이 Wenderlich의 Sprite Kit Tutorial for Beginners 따옴표 this answer에서 이런 일이 발생합니다.

0

예, 장치 방향에 해당하는 제어하고 (내 경우) 배경 이미지의 크기를 조정, 당신은 사용해야합니다 - (무효) viewWillLayoutSubviews

을하지만, 잊지 마세요, 그것은에 의해 첫 장면부터 시작됩니다 기본값이므로 실제 장면을 가리 키기 위해이 함수에서 일부 "sceneNumber"선택자를 사용해야합니다.

관련 문제