2010-10-27 47 views
0

此代碼在我改變場景時創建一個隨機轉換。有十一個過渡。因爲它們是靜態的,所以我認爲我不能使用NSClassFromString。我還需要傳遞場景(s)對象。 現在開關似乎是多餘的。有沒有一種方法可以重寫這個以提高效率?有沒有更好的方法來寫這個Objective-C的代碼?

-(void) newScene 
{ 
CCScene *s = [CCScene node]; 
id child = [sceneCharacter node]; 
[s addChild:child]; 
int random = arc4random() % 10; 


switch (random) 
{ 
    case 1: 
     [[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 2: 
     [[CCDirector sharedDirector] replaceScene:[CCFadeTRTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 3: 
     [[CCDirector sharedDirector] replaceScene:[CCJumpZoomTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 4: 
     [[CCDirector sharedDirector] replaceScene:[CCMoveInLTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 5: 
     [[CCDirector sharedDirector] replaceScene:[CCOrientedTransitionScene transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 6: 
     [[CCDirector sharedDirector] replaceScene:[CCPageTurnTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 7: 
     [[CCDirector sharedDirector] replaceScene:[CCRotoZoomTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 8: 
     [[CCDirector sharedDirector] replaceScene:[CCShrinkGrowTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 9: 
     [[CCDirector sharedDirector] replaceScene:[CCSlideInLTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 10: 
     [[CCDirector sharedDirector] replaceScene:[CCSplitColsTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    case 0: 
     [[CCDirector sharedDirector] replaceScene:[CCTurnOffTilesTransition transitionWithDuration:0.5f scene:s]]; 
     break; 

    default: 
     [[CCDirector sharedDirector] replaceScene:s]; 
} 

}

回答

1

如何只分配變量s和switch語句,因爲你的唯一的問題是冗餘之後做整個通話?像:

case 1:; 
    s = [CCFadeTransition transitionWithDuration:0.5f scene:s]]; 
    break; 

然後調用replaceScene switch語句後:

[[CCDirector sharedDirector] replaceScene:s]; 

恕我直言,這是清潔。

+0

xscott的回答是,因爲我沒有注意到,你的東西隨機更正確-_- :) – LaN 2010-10-28 03:44:28

6

你可以把你所有的CC *過渡的對象到一個數組,並使用隨機數索引數組:

transition tt = transitions[random]; 
[[CCDirector sharedDirector] replaceScheme:[tt transitionWithDuration: 0.5f scene:s]]; 

警告順便說一句,你的隨機數只會取0到9之間的值。如書面,情況10,並且默認不會發生。

2

最少的代碼和奢華的內存使用情況:

NSArray *sceneClasses = [[NSArray arrayWithObjects:[CCFadeTransition class], 
                [CCFadeTRTransition class], 
                /*the whole list of 
                transition types*/ 
                nil] retain]; 

[[CCDirector sharedDirector] replaceScene:[[sceneClasses objectAtIndex:random] transitionWithDuration: 0.5f scene:s]]; 
相關問題