2012-11-22 43 views
1

我是新來的coco2d &開發一個簡單的遊戲應用程序。CCRepeatForever動作在切換場景時自動停止......!

我需要兩個屏幕左邊一個&其他右邊,就像在滾動視圖與分頁有2個屏幕之間切換。我在RootViewController類的幫助下檢測滑動,併成功滑動左右屏幕。

但問題是我必須無限地在兩個屏幕上運行rotateBy動作,每個屏幕上都運行這個動作,放在屏幕中心的單個精靈上。

我正在使用一個名爲SelectWorld的主場景&兩個是它的子場景。 第一個屏幕被稱爲工廠&其他被稱爲堆棧。 以下是我的代碼: -

選擇World屏幕....

@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; 
} 

現在的問題是,在前兩個滑動動作運行良好,但只要我嘗試滑動兩次或三次以上,動作就會停止。我沒有寫過一行來阻止這兩個類。我需要它永遠在運行。

有人可以提出我的錯誤嗎?

謝謝。

回答

1

你的錯誤是你對每個場景變化重新使用相同的場景對象。你不能在cocos2d中做到這一點,你必須創建一個場景對象的新實例。

你不應該保留一個場景對象,因爲在任何時候應該只有一個活動場景(除了場景轉換到另一個場景的持續時間 - 但這是由cocos2d內部處理的)。

例如:

CCScene* factory = [ColorfulFactory scene]; 
CCTransitionScene* transitionalScene = [CCTransitionSlideInR transitionWithDuration:0.3 scene:factory]; 
[[CCDirector sharedDirector] replaceScene:transitionalScene]; 

如果您需要在內存中兩個對象,使它們層(或節點),而不是場面。不要使用replaceScene,而是使用常規moveTo動作進入和離開屏幕。