2010-10-27 86 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]]; 
相关问题