cocos2d无法改变场景?

时间:2012-09-23 00:54:54

标签: iphone cocos2d-iphone

我是cocos2d的新手并且正在发展,所以这可能是一个非常愚蠢的错误。 我到处搜索并比较了例子,我看不出问题。 我只有一个播放按钮,有一个简单的菜单。我点击时试图去另一个场景。错误是

使用未声明的标识符'gameScene'

但据我所知,它被声明......

这是我的代码。

CCMenuItemImage *play = [CCMenuItemImage
                             itemFromNormalImage:@"PlayButton.png"
                             selectedImage:@"PlayButtonPressed.png"
                             target:self
                             selector:@selector(gameScene)];

    CCMenu *selectMenu = [CCMenu menuWithItems:play, nil];
    //[selectMenu alignItemsVertically];
    [self addChild:selectMenu];

    -(void)gameScene:(id)sender
    {
        [[CCDirector shareDirector] replaceScene:GameScene node];
    }

感谢您的帮助

编辑: 我现在没有错误,我错过了GameScene节点周围的[]。 但它一直在崩溃。继承我的新代码。

CCMenuItemImage *play = [CCMenuItemImage
                                 itemFromNormalImage:@"PlayButton.png"
                                 selectedImage:@"PlayButtonPressed.png"
                                 target:self
                                 selector:@selector(playGame)];

        CCMenu *selectMenu = [CCMenu menuWithItems:play, nil];
        //[selectMenu alignItemsVertically];
        selectMenu.position = ccp(160, 300);
        [self addChild:selectMenu];

    }
    return self;
}

-(void)playGame:(id)sender{
    [[CCDirector sharedDirector]replaceScene:[GameScene node]];
}

它似乎无法进入CCMenu?

3 个答案:

答案 0 :(得分:0)

您的替换场景参数不正确。您必须定义它将切换到的实际场景,而不仅仅是空节点。

答案 1 :(得分:0)

我解决了这个问题。这似乎是选择器的一个问题。 我刚改变了 从:

CCMenuItemImage *play = [CCMenuItemImage
itemFromNormalImage:@"PlayButton.png"
selectedImage:@"PlayButtonPressed.png"
target:self
selector:@selector(playGame)];

为:

CCMenuItemImage *play = [CCMenuItemImage
itemFromNormalImage:@"PlayButton.png"
selectedImage:@"PlayButtonPressed.png"
target:self
selector:@selector(playGame:)];

答案 2 :(得分:0)

我一直想念这些。在你的计时器中也要注意这一点,我花了几个小时来追踪[自我安排:@selector(gameLogic)]导致的错误;任何时候你有一个选择器,无论是在计时器或菜单中还是在其他地方,你都需要将它放入传递数据。

此外,如果你想在没有按钮按下的情况下进行虚假的菜单调用,可能强迫它在定时器或其他东西中调用,这是一个我发现有用的hacky解决方案:

id fakeButton;
[self playGame:fakeButton];