代码之家  ›  专栏  ›  技术社区  ›  Alex L

有没有更好的方法来编写这个objective-c代码?

  •  0
  • Alex L  · 技术社区  · 14 年前

    这段代码在我更改场景时创建一个随机转换。共有十一个过渡。因为它们是静态的,我想我不能使用NSClassFromString。我还需要传递场景对象。

    -(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];
    }
    

    }

    3 回复  |  直到 14 年前
        1
  •  1
  •   LaN    14 年前

    既然您唯一的问题是冗余,那么只分配变量s并在switch语句之后执行整个调用怎么样?比如:

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

    然后在switch语句之后调用replaceScene:

    [[CCDirector sharedDirector] replaceScene:s];
    

    IMHO,那更干净。

        2
  •  6
  •   xscott    14 年前

    您可以将所有CC*转换对象放入一个数组中,并使用随机数为该数组编制索引:

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

    警告:作为旁白,您的随机数将只接受0到9之间的值。如前所述,案例10,违约永远不会发生。

        3
  •  2
  •   executor21    14 年前

    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]];