我正在将游戏引擎的部分移植到另一个游戏代码中,我有两个问题。
代码:
-(void) checkForBulletCollisions
{
Enemy* enemy;
CCARRAY_FOREACH([batch children], enemy)
{
if (enemy.visible)
{
BulletCache* bulletCache = [[GameScene sharedGameScene] bulletCache];
//etc etc
我要移植这段代码的项目中的GameScene不是像上面代码中的GameScene那样的单例。
以下是GameScene的接口代码:
@interface GameScene : CCScene
+(void) newGame:(NSString*)levelFile;
-(void) reloadGame:(NSString*)levelFile;
@end
在移植代码的顶部行时,我将顶部行代码替换为:
BulletCache* bulletCache = [[GameScene node] bulletCache];
我讲对了吗?
如hiepnd所述,node方法创建一个新的自动释放实例。但是,您移植的代码调用的是单例。我将假设单例是"当前场景"-因此你在移植的任务是找到节点层次结构中的顶部节点-确认它确实是类GameScene,然后从中检索到你对子弹缓存的引用。
当前场景可以通过以下方式从导演处检索:
CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
GameScene *gameScene = nil;
if ([currentScene isKindOfClass:[GameScene class]]) gameScene = currentScene;
BulletCache *bulletCache = [gameScene bulletCache];