2012-02-22 55 views
2

我在我的應用程序上使用了cocos2d。我做一個過渡使用Cocos2D iPhone - 刪除CCTransition之間的黑屏

[[CCDirector sharedDirector] replaceScene: 
[CCTransitionFadeDown transitionWithDuration:0.5f scene:otherScene]]; 

在此場景等的初始化部分另一個場景,菜單正在修建,使用CCMenu。這是一個全屏菜單。

我的問題是:過渡發生在黑屏,然後菜單出現。換句話說,轉換是在菜單被渲染之前完成的,所以,我看到一個醜陋的黑屏0.5秒,然後,在轉換完成後,我看到菜單。

爲了清楚起見,想象一下第一個場景有一張船的照片,第二個場景是一張汽車的照片。我現在擁有的是過渡到黑色的小船,然後汽車就會爆炸。我需要船過渡到汽車。

我該怎麼做?謝謝。

注意:我發現this guy with the same problem,但我已嘗試解決方案沒有成功。

回答

1

我已經在我的菜單(同樣的問題)來實現的轉變,稱它爲「fadeInView」通過在init一切的頂部上添加的黑色層,具有255的不透明度,並且在的OnEnter予運行操作到不透明度淡出爲0如下:

-(id) init { 
    self=[super init]; 
    if(self){ 
     // do your stuff 
     blackShroudLayer_=[CCLayerColor layerWithColor:ccc4(0, 0, 0, 255) width:K_SCREEN_WIDTH height:K_SCREEN_HEIGHT]; 
     [self addChild:blackShroudLayer_ z:500]; 
    } 
    return self; 
} 

-(void) onEnter{ 

    // need to [super onEnter] first to that we are running 

    [super onEnter]; 
    id sh = [CCFadeTo actionWithDuration:K_FADE_TIME opacity:0]; 
    id seq = [CCSequence actions:sh,[CCCallFunc actionWithTarget:self selector:@selector(onUnshroudComplete)], nil]; 
    [blackShroudLayer_ runAction:seq]; 
} 

-(void) onUnshroudComplete{ 
    [blackShroudLayer_ removeFromParentAndCleanup:YES]; 
} 

常量和blackShroudLayer_在類.h文件中定義。

+0

我真的不明白你在這裏做什麼,但任何方式,這對我來說是崩潰(我認爲它在CCCallFunc部分崩潰)。兩個問題:(1)你如何從其他場景調用這個? (我正在使用一個簡單的replaceScene)...(2)有沒有辦法使用CCTransitionFadeDown而不是CCFade? (抱歉,但我是Cocos2D的新手)。謝謝 – SpaceDog 2012-02-26 10:19:58

+0

拼寫callfunc中的選擇器(修復代碼片段)。這將是CCTransitionFade的淡入淡出(淡化當前,然後淡入下一個場景)。 – YvesLeBorg 2012-02-26 11:15:40

+0

@DigitalRobot:我對自己的cocos2d場景和轉換經驗不多。遊戲的設計師構思了各種「離牆」場景轉換,我們無法使用預先裝好的cocos2d轉換。所以這個代碼實際上是在init中設置的,當一個對象作爲一個子對象添加到另一個cocos2d對象時,'addEnter'會在addChild進程中被CCNode自動調用。你可以去這裏找一個幾乎所有可可粉的完整例子:http://www.pawapps.com/2011/07/30/tutorial-transitions-in-cocos2d/ – YvesLeBorg 2012-02-26 11:30:08

2

這是值得一試的,如果你還沒有使用它;它消除場景負載時的黑色閃爍。運行下面的方法,你切換場景前,在情況下,它會影響您的問題(取消註釋這些行,並直接調用方法):

- (void) removeStartupFlicker 
{ 
    // 
    // THIS CODE REMOVES THE STARTUP FLICKER 
    // 
    // Uncomment the following code if you Application only supports landscape mode 
    // 

    // CC_ENABLE_DEFAULT_GL_STATES(); 
    // CCDirector *director = [CCDirector sharedDirector]; 
    // CGSize size = [director winSize]; 
    // CCSprite *sprite = [CCSprite spriteWithFile:@"Default.png"]; 
    // sprite.position = ccp(size.width/2, size.height/2); 
    // sprite.rotation = -90; 
    // [sprite visit]; 
    // [[director openGLView] swapBuffers]; 
    // CC_ENABLE_DEFAULT_GL_STATES(); 

} 
+0

謝謝。我這樣做,但問題仍然存在。 – SpaceDog 2012-02-22 07:26:28