Objective c 使用SpriteBuilder告知在暂停菜单中按下哪个按钮
我有一个带有暂停菜单按钮的游戏。当我按下游戏场景中的按钮时,一切都会正常暂停,我的暂停菜单会显示出来,然后我可以用一个按钮继续,这也起作用 我有另一个按钮用于重新启动关卡。由于我正在将特定对象加载到游戏中,当我重新启动关卡场景时,我需要删除所有这些对象,否则,添加已添加的子对象时会出现错误。这意味着,当我按“重新启动”删除所有这些对象时,我需要以某种方式与游戏场景进行通信 下面是我的代码。通常我要做的是在暂停场景中创建一个变量,这个变量可以访问我的游戏场景。当按下重启按钮时,我将在暂停场景中更改变量的值,并在游戏场景中使用更新方法,我将能够知道该变量的值何时更改。不幸的是,使用Spritebuilder执行此操作时会出现两个问题。通常,通过在Spritebuilder中执行以下操作来创建新场景Objective c 使用SpriteBuilder告知在暂停菜单中按下哪个按钮,objective-c,cocos2d-iphone,spritebuilder,Objective C,Cocos2d Iphone,Spritebuilder,我有一个带有暂停菜单按钮的游戏。当我按下游戏场景中的按钮时,一切都会正常暂停,我的暂停菜单会显示出来,然后我可以用一个按钮继续,这也起作用 我有另一个按钮用于重新启动关卡。由于我正在将特定对象加载到游戏中,当我重新启动关卡场景时,我需要删除所有这些对象,否则,添加已添加的子对象时会出现错误。这意味着,当我按“重新启动”删除所有这些对象时,我需要以某种方式与游戏场景进行通信 下面是我的代码。通常我要做的是在暂停场景中创建一个变量,这个变量可以访问我的游戏场景。当按下重启按钮时,我将在暂停场景中更改
CCScene *pauseScene = [CCBReader loadAsScene:@"PauseScene"];
如果我这样做了,并且我在pause场景中创建了一个变量(如下所示),那么我将无法访问它,因为我将pauseScene创建为CCScene的实例,而不是我的类pauseScene
PauseScene.h
#import "CCScene.h"
@interface PauseScene : CCScene
@property (nonatomic, assign) BOOL restartTapped;
@end
现在,如果我尝试将pauseScene创建为类pauseScene的实例,那么我会从“CCScene*”中得到一个警告分配“pauseScene*”的不兼容指针类型。在运行时,如果我忽略此警告,每当我尝试访问重启时,
,它会立即出错,并说已将无法识别的选择器发送到实例…。很明显,这是行不通的
我真的不知道该怎么办。下面我有一个关于这个问题的好例子,只需使用上面和下面的PauseScene.h
。如果你有解决办法,请让我知道我想我只是在问如何使用Spritebuilder从一个类访问另一个类中的变量。
PauseScene.m
#import "PauseScene.h"
@implementation PauseScene
-(void)restartFromPause{
[self removeFromParent];
[[CCDirector sharedDirector] resume];
}
@end
#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
mainsecene.m
#import "PauseScene.h"
@implementation PauseScene
-(void)restartFromPause{
[self removeFromParent];
[[CCDirector sharedDirector] resume];
}
@end
#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
现在,您只需执行
pauseScene.variableName
即可访问pauseScene
变量!!!我一直试图找到一种不同的方法来解决这个问题,但这比我打算做的要容易得多。为了将来的参考,如果您需要作为孩子添加场景,您必须添加PauseSecNecScene,而不是pauseScene。