我正在开发一款简单的游戏应用程序。
我需要在左边和左边有两个屏幕。右边的其他,就像滚动视图一样,分页有2个屏幕可以切换。我在RootViewController类的帮助下检测滑动并成功滑动左右屏幕。
但问题是我必须在两个屏幕上无限运行rotateBy动作,每个屏幕都在放置在屏幕中心的单个精灵上运行此动作。
我正在使用一个名为SelectWorld& amp;两个是子场景。 第一个屏幕叫做工厂&另一个叫做堆栈。 以下是我的代码:
选择世界屏幕:
@implementation SelectWorld
+(CCScene*)scene
{
CCScene* scene = [CCScene node];
SelectWorld* layer = [SelectWorld node];
[scene addChild:layer];
return scene;
}
-(id)init
{
if((self = [super init]))
{
[RootViewController singleton].swipeCallBackHandler = self;
[[RootViewController singleton] enableSwipeDetection];
factory = [[ColorfulFactory scene] retain];
stack = [[CoinsStack scene] retain];
[self addChild:factory];
isOnFactory = YES;
}
return self;
}
-(void)swipedLeft
{
if(isOnFactory)
{
[self removeAllChildrenWithCleanup:YES];
isOnFactory = NO;
CCTransitionScene* transitionalScene = [CCTransitionSlideInR transitionWithDuration:0.3 scene:stack];
[[CCDirector sharedDirector] replaceScene:transitionalScene];
}
}
-(void)swipedRight
{
if(!isOnFactory)
{
[self removeAllChildrenWithCleanup:YES];
isOnFactory = YES;
CCTransitionScene* transitionalScene = [CCTransitionSlideInL transitionWithDuration:0.3 scene:factory];
[[CCDirector sharedDirector] replaceScene:transitionalScene];
}
}
以下是仅适用于工厂的代码,同样适用于堆栈 -
@implementation ColorfulFactory
+(CCScene*)scene
{
CCScene* scene = [CCScene node];
ColorfulFactory* layer = [ColorfulFactory node];
[scene addChild:layer];
return scene;
}
-(id)init
{
if((self = [super init]))
{
CGSize size = [CCDirector sharedDirector].winSize;
CCLabelTTF* info = [CCLabelTTF labelWithString:@"Colorful Factory" fontName:@"Helvetica" fontSize:35.0];
info.position = ccp(size.width/2, size.height-50);
[self addChild:info];
CCSprite* sprite = [CCSprite spriteWithFile:@"Icon.png"];
sprite.position = ccp(size.width/2, size.height/2);
[self addChild:sprite];
sprite.tag = 123;
CCRotateBy* rotateBy = [CCRotateBy actionWithDuration:60 angle:360.0];
CCRepeatForever* repeatForever = [CCRepeatForever actionWithAction:rotateBy];
[sprite runAction:repeatForever];
repeatForever.tag = 456;
}
return self;
}
现在的问题是,在前两次滑动动作运行正常,但是一旦我尝试滑动超过两三次,动作就会停止。我没有写过一行来阻止这两个类。我要求它在那里永远运行。
答案 0 :(得分:1)
您的错误在于您为每个场景更改重新使用相同的场景对象。你不能在cocos2d中这样做,你必须创建一个场景对象的新实例。
你永远不应该保留一个场景对象,因为在任何时候都应该只有一个活动场景(除了场景转换到另一个场景的持续时间 - 但是由内部的cocos2d处理)。
例如:
CCScene* factory = [ColorfulFactory scene];
CCTransitionScene* transitionalScene = [CCTransitionSlideInR transitionWithDuration:0.3 scene:factory];
[[CCDirector sharedDirector] replaceScene:transitionalScene];
如果您需要内存中的两个对象,请将它们设置为图层(或节点),而不是场景。不要使用replaceScene,而是使用常规moveTo操作在屏幕内外设置动画。