Есть ли лучший способ написать этот код объективного C? - PullRequest
0 голосов
/ 27 октября 2010

этот код создает случайный переход, когда я меняю сцены.Есть одиннадцать переходов.Поскольку они статичны, я не могу использовать 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 ]

6 голосов
/ 27 октября 2010

Вы можете поместить все свои объекты CC * Transition в массив и использовать случайное число для индексации этого массива:

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

В качестве предупреждения, ваше случайное число принимает только значениямежду 0 и 9. Как написано, случай 10 и значение по умолчанию никогда не произойдут.

2 голосов
/ 28 октября 2010

Наименьший код и экстравагантное использование памяти:

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]];
1 голос
/ 27 октября 2010

Как насчет назначения переменной s и выполнения всего вызова после оператора switch, поскольку ваша единственная проблема - избыточность?Например:

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

И затем вызывать replaceScene после оператора switch:

[[CCDirector sharedDirector] replaceScene:s];

ИМХО, это чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...