为什么我的主菜单图像在启动时尺寸不正确但在游戏后没有?

时间:2013-02-25 19:57:59

标签: cocos2d-iphone

我有一个加载在MainMenu场景上的图像,当游戏启动时显示的尺寸错误,但是在完成一个关卡后,再次返回MainMenu,图像看起来大小合适。

第一次图像从左到右显示为屏幕尺寸的四分之三或四分之一。图像周围有白色背景,因此我可以在主菜单首次启动时在屏幕右侧看到一个黑色高大的矩形。但在游戏结束后,它的大小正确,白色背景图像的大小正确。

有人发生过这种事吗?

以下是MainMenuLayer的初始化代码:

-(id)init {
    if( (self=[super initWithColor:ccc4(255,255,255,255)]) ) {
        [[GameManager sharedGameManager] playBackgroundTrack:BACKGROUND_TRACK_MAIN_MENU];
        CGSize screenSize = [CCDirector sharedDirector].winSize;

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            CCSprite *background = [CCSprite spriteWithFile:@"MainMenu-iPad.png"];
            [background setPosition:ccp(screenSize.width/2,screenSize.height/2)];
            [self addChild:background];
            [self displayMainMenu];
        } else {
            CCSprite *background = [CCSprite spriteWithFile:@"MainMenu.png"];
            [background setPosition:ccp(screenSize.width/2,screenSize.height/2)];
            [self addChild:background];
            [self displayMainMenu];
        }
-

虽然在模拟器上工作正常......

2 个答案:

答案 0 :(得分:1)

打印屏幕位置,如果位置错误,则将代码放入onEnter而不是init。

See this thread in Stack overflow.

-(id)init {
    if( (self=[super initWithColor:ccc4(255,255,255,255)]) ) {
       }
     return self;
}



-(void)onEnter {
        [super onEnter];
        [[GameManager sharedGameManager] playBackgroundTrack:BACKGROUND_TRACK_MAIN_MENU];
        CGSize screenSize = [CCDirector sharedDirector].winSize;

         CCSprite *background = [CCSprite spriteWithFile:@"MainMenu.png"];
         [background setPosition:ccp(screenSize.width/2,screenSize.height/2)];
         [self addChild:background];
         [self displayMainMenu]; 
}

答案 1 :(得分:0)

即使在清洁和构建之后,图像显然也被缓存了!我最后通过删除原始图像并添加相同的图像来替换图像,但添加了一些标记以确保它被替换。