使用SpriteBuilder在暂停菜单中按下哪个按钮进行通信

时间:2014-07-06 20:12:12

标签: objective-c cocos2d-iphone spritebuilder

我有一个带有暂停菜单按钮的游戏。当我按下游戏场景上的按钮时,一切都正常暂停,我的暂停菜单显示,然后我可以用一个按钮恢复,这也有效。

我有另一个按钮用于重新启动关卡。由于我在游戏的特定对象中加载,当我重新启动我的关卡时,我需要删除所有这些对象,否则我会因添加已添加的子项而出错。这意味着当我按重新启动以删除所有这些对象时,我需要以某种方式与我的游戏场景进行通信。

以下是我的代码。通常我要做的是在暂停场景中创建一个可供我的游戏场景访问的变量。当按下重启按钮时,我会在暂停场景中更改变量的值,并在我的游戏场景中使用更新方法,我将能够知道该变量的值何时被更改。不幸的是,使用Spritebuilder执行此操作时会出现一些问题。通常,您可以通过在Spritebuilder中执行以下操作来创建新场景

CCScene *pauseScene = [CCBReader loadAsScene:@"PauseScene"];

如果我这样做,并且我在暂停场景中创建了一个变量(如下所示),那么我无法访问它,因为我创建了pauseScene作为CCScene的一个实例,而不是我的班级PauseScene。

PauseScene.h

#import "CCScene.h"

@interface PauseScene : CCScene

@property (nonatomic, assign) BOOL restartTapped;

@end

现在,如果我尝试创建我的pauseScene作为我的类PauseScene的实例,那么我会收到警告不兼容的指针类型分配' PauseScene *'来自' CCScene *'。在运行时,如果我忽略此警告,每当我尝试访问restartTapped时,它会立即出错并将无法识别的选择器发送到实例。 .. 即可。很明显,这不起作用。

我不确定该怎么做。我在下面有一个关于这个问题的简洁示例,只需使用上面的PauseScene.h以及下面的#import "PauseScene.h" @implementation PauseScene -(void)restartFromPause{ [self removeFromParent]; [[CCDirector sharedDirector] resume]; } @end 。如果您有解决方案,请告诉我! 我想我真的只是问如何使用Spritebuilder从另一个类中访问变量。

PauseScene.m

#import "MainScene.h"
#import "PauseScene.h"

@implementation MainScene

PauseScene *pauseScene;
float totalTime;

-(void)pauseFromMain {
    pauseScene = [CCBReader loadAsScene:@"PauseScene"];
    [[CCDirector sharedDirector] pause];
    [self addChild:pauseScene];
}

-(void)update:(CCTime)delta{
    totalTime += delta;
    CCLOG(@"total time %f", totalTime);
    CCLOG(@"value of other variable %i", pauseScene.restartTapped); //gives an error, details given in my post
}

@end

MainScene.m

{{1}}

1 个答案:

答案 0 :(得分:1)

CCScene* pauseSceneCCScene = [CCBReader loadAsScene:@"PauseScene"];
PauseScene *pauseScene = (PauseScene *)[pauseSceneCCScene children][0];

现在,只需执行pauseScene即可访问pauseScene.variableName个变量。