我有一个带有暂停菜单按钮的游戏。当我按下游戏场景上的按钮时,一切正常暂停,我的暂停菜单出现,然后我可以用一个按钮恢复,这也有效。
我有另一个用于重新启动关卡的按钮。由于我正在将特定对象加载到游戏中,因此当我重新启动关卡场景时,我需要删除所有这些对象,否则会在添加已添加的子对象时出错。这意味着当我按下重新启动以删除所有这些对象时,我需要以某种方式与我的游戏场景进行通信。
下面是我的代码。通常我会做的是在我的游戏场景可以访问的暂停场景中创建一个变量。当按下重新启动按钮时,我会在我的暂停场景中更改变量的值,并在我的游戏场景中使用更新方法,我将能够知道该变量的值何时更改。不幸的是,在使用 Spritebuilder 执行此操作时会出现一些问题。通常,您通过在 Spritebuilder 中执行以下操作来创建新场景
CCScene *pauseScene = [CCBReader loadAsScene:@"PauseScene"];
如果我这样做,并且我在我的暂停场景中创建了一个变量(如下所示),那么我将无法访问它,因为我将 pauseScene 创建为 CCScene 的实例,而不是我的类 PauseScene。
暂停场景.h
#import "CCScene.h"
@interface PauseScene : CCScene
@property (nonatomic, assign) BOOL restartTapped;
@end
现在,如果我尝试将我的 pauseScene 创建为我的类 PauseScene 的实例,那么我会收到一个警告Incompatible pointer types assignmenting 'PauseScene *' from 'CCScene *'。在运行时,如果我忽略此警告,则每当我尝试访问时restartTapped
,它都会立即出错并说unrecognized selector sent to instance...。所以显然这行不通。
我不确定该怎么做。我在下面有一个关于这个问题的整洁示例,只需使用PauseScene.h
上面的以及下面的。如果您有解决方案,请告诉我!我想我只是在问如何使用 Spritebuilder 从一个类中访问另一个类中的变量。
暂停场景.m
#import "PauseScene.h"
@implementation PauseScene
-(void)restartFromPause{
[self removeFromParent];
[[CCDirector sharedDirector] resume];
}
@end
主场景.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