2014-01-21 32 views
0

好吧,我一直在试图弄清楚这一点,并搜索网络和论坛,但我还没有运气。引用Sprite Kit中另一个类的场景

我想要做的是以下几点。我有一个MainMenuScene,它是一个SKScene。由于我在该场景中添加了许多SKA和其他东西,我希望能够将其分解成不同的文件。因此,例如,当玩家按下“设置”按钮时,我将使用不同的文件来写入将会发生的事情,而不是使用MainMenuScene,并使其变得更大。

所以我的问题是这样的:我想能够从我的SettingsSubScene.m文件引用MainMenuScene.m中的SKScene。 的SettingsSubScene.m如下:

#import "SettingsSubScene.h" 

@implementation SettingsSubScene 
{ 
SKScene *_mainMenuScene; 
} 

-(id)initWithScene:(SKScene *)mainMenuScene { 

_mainMenuScene = mainMenuScene; 

return self; 
} 

-(void)displaySettings { 
SKSpriteNode *settingsGearLarge = (SKSpriteNode *)[_mainMenuScene childNodeWithName:@"settingsGearLarge"]; 

SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"settings"]; 

background.anchorPoint = CGPointMake(0, 1); 
background.position = settingsGearLarge.position; 
background.zPosition = 0; 
background.xScale = 0; 
background.yScale = 0; 

[_mainMenuScene addChild:background]; 

SKAction *appear = [SKAction scaleTo:1.0 duration:0.5]; 
appear.timingMode = SKActionTimingEaseInEaseOut; 

[background runAction:appear completion:^{ 
    [SKActionEffects fullScale:background amount:0.05 forever:YES]; 
    [SKActionEffects fullWiggle:background amount:1 forever:YES]; 
}]; 

} 

-(void)hideSettings { 

} 

@end 

我使用下面的代码调用它从MainMenuScene.m:

SettingsSubScene *settingsSubScene = [[SettingsSubScene alloc] initWithScene:self]; 
     [settingsSubScene displaySettings]; 

我得到一个EXC_BAD_ACCESS错误。当然,我做错了什么,我敢打赌,有一种方法可以做到这一点,而不是创建一个大MainMenuScene文件,但我还没有找到它。任何人都可以帮忙吗?

感谢

+0

错误是什么?添加一个异常断点来找出。你有没有得到任何编译器警告?分析并修复它们,他们试图告诉你一些事情。另外,如果您的额外类继承自SK * Node类,则您也可以通过self.scene属性访问场景。 – LearnCocos2D

回答

0

修改您的initWithScene:方法,像这样:

-(id)initWithScene:(SKScene *)mainMenuScene { 

    if (self = [super init]) 
    { 
     _mainMenuScene = mainMenuScene; 
    } 

return self; 
} 
0

一个朋友找到了答案。

我需要拨打:

@implementation SettingsSubScene 
{ 
    MainMenuScene *_mainMenuScene; 
} 

,而不是仅仅

@implementation SettingsSubScene 
{ 
    SKScene *_mainMenuScene; 
} 

,因为我mainMenuScene不仅仅是SKScene而是扩展它。

+0

我相信这也行不通 – ZeMoon

+0

也许我没有让自己清楚自己在找什么。上面的工作。更重要的是,我实际上并不需要有对象类,所以我可以创建静态方法,例如“+(void)displaySettingsInMainMenuScene :(MainMenuScene *)mainMenuScene {”。我之前使用SKScene代替扩展的MainMenuScene,这就是为什么它不起作用。我想感谢大家的回应! –

0

正如上面akashg所说的,您在initWithScene覆盖中缺少init。

相关问题