我有一个 CCLayer
类是我创建的基类的子类,它本身就是 CCLayer
.
创建这种类型的类层次结构后,我无法让 onEnter
我的子类的方法成功调度方法调用。我怎样才能解决这个问题?
我正在尝试开始一个游戏项目,但我遇到了一些障碍。这似乎是一个常见问题,但是,我找不到与我类似的场景,因此无法得出解决方案。
我创建了一个子 CCLayer 类,它与 Cocos2D 入门 iPhone 模板中的 IntroLayer 基本相同。事实上,我的类与一个主要例外完全相同——我创建了一个从 CCLayer 派生的基类,并用作我的 IntroLayer 的父类。
我的问题是在我的子层的 onEnter 方法中,我看到我的转换方法正在我的scheduleOnce
作业中设置。但是,问题是我的转换方法从未被调用过?
我不确定我做错了什么。下面发布的代码是我的 IntroLayer 的 .m 文件。
介绍层.m
@implementation IntroLayer //Child of "MyBaseCCLayer"
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
IntroLayer *layer = [IntroLayer node];
[scene addChild: layer];
return scene;
}
-(void) onEnter
{
//This is calling an overridden onEnter of my base CCLayer.
// See snippet below.
[super onEnter];
CGSize size = [[CCDirector sharedDirector] winSize];
CCSprite *background;
background = [CCSprite spriteWithFile:@"Default.png"];
[background setPosition:ccp(size.width/2, size.height/2)];
[background setZOrder: Z_BACKGROUND];
[self addChild: background];
//In one second transition to the new scene
// I can put a break point here, and this being set.
// It never gets called, though.
[self scheduleOnce:@selector(makeTransition:) delay:1.0];
}
-(void) makeTransition:(ccTime)delay
{
//Here is where I would transition to my menu.
// This is a fresh project, so it's going to a test screen.
// The problem is this method never fires.
[[CCDirector sharedDirector]
replaceScene:[CCTransitionFade
transitionWithDuration:0.5
scene:[TestLayer scene]
withColor:ccBLACK]];
}
-(void) dealloc
{
[super dealloc];
}
@end
MyBaseCCLayer.m
//^boilerplate snip^
-(void) onEnter
{
//Setup overlay
CGSize size = [[CCDirector sharedDirector] winSize];
ccTexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
//overlay is a class variable, CCSprite object.
overlay = [CCSprite spriteWithFile:@"tile_overlay.png" rect:CGRectMake(0, 0, size.width, size.height)];
[overlay retain];
[overlay setPosition: ccp(size.width/2, size.height/2)];
[overlay.texture setTexParameters:&tp];
//Always on top!
[overlay setZOrder:Z_OVERLAY];
}
-(void) dealloc
{
[overlay release];
[super dealloc];
}
如您所见,这里没有任何突破性的进展。我创建了这个基类,因为我想CCLayer
在我的应用程序中应用覆盖精灵。这就是为什么创建自己的基地是有意义的,CCLayer
. 但是,既然我已经创建了自己的基类,我IntroLayer
将不会调用我设置的预定方法onEnter
。我怎样才能让它工作?