CCSprite эффективная анимация - PullRequest
0 голосов
/ 19 июля 2011

Я анимирую 3 изображения (спрайта) с экрана справа на середину экрана.Я написал код ниже, но мне было интересно, есть ли более эффективный способ его кодирования.

-(void) displayMenu
{
    CGSize screenSize = [[CCDirector sharedDirector] winSizeInPixels];

    CCSprite* menuItemBottle = [CCSprite spriteWithFile:@"btn_i_have_norm.png"];
    menuItemBottle.position = ccp((screenSize.width * 2), 600.0f);
    menuItemBottle.contentSize = screenSize;
    menuItemBottle.scale = 1;
    [self addChild:menuItemBottle z:0 tag:4];

    CCSprite* menuItemAdvert = [CCSprite spriteWithFile:@"btn_see-ad_norm.png"];
    menuItemAdvert.position = ccp((screenSize.width * 2), 500.0f);
    menuItemAdvert.contentSize = screenSize;
    menuItemAdvert.scale = 1;
    [self addChild:menuItemAdvert z:0 tag:5];

    CCSprite* menuItemNoBottle = [CCSprite spriteWithFile:@"btn_dont-have_norm.png"];
    menuItemNoBottle.position = ccp((screenSize.width * 2), 400.0f);
    menuItemNoBottle.contentSize = screenSize;
    menuItemNoBottle.scale = 1;
    [self addChild:menuItemNoBottle z:0 tag:6];

    CGPoint newPointBottle = CGPointMake(screenSize.width * 0.5f + 50, 600.0f);
    CCMoveTo *moveBottle = [CCMoveTo actionWithDuration:0.7f position:newPointBottle];
    CCSequence *sequenceBottle = [CCSequence actions:moveBottle, nil];
    [menuItemBottle runAction:sequenceBottle];

    CGPoint newPointAdvert = CGPointMake(screenSize.width * 0.5f + 50, 500.0f);
    CCMoveTo *moveAdvert = [CCMoveTo actionWithDuration:0.7f position:newPointAdvert];
    CCSequence *sequenceAdvert = [CCSequence actions:moveAdvert, nil];
    [menuItemAdvert runAction:sequenceAdvert];

    CGPoint newPointNoBottle = CGPointMake(screenSize.width * 0.5f + 50, 400.0f);
    CCMoveTo *moveNoBottle = [CCMoveTo actionWithDuration:0.7f position:newPointNoBottle];
    CCSequence *sequenceNoBottle = [CCSequence actions:moveNoBottle, nil];
    [menuItemNoBottle runAction:sequenceNoBottle];

}

1 Ответ

0 голосов
/ 19 июля 2011

Вы должны быть в состоянии свести все действия в одну строку.Первый будет выглядеть так:

[menuItemBottle runAction: [CCMoveTo actionWithDuration: 0.7f position: ccp (screenSize.width * 0.5f + 50, 600.0f)]];

Если вы предпочитаете определять позицию вне действия, вы можете продолжить это делать.Просто FYI CCSequence для, когда вы хотите запустить действия на одном и том же объекте последовательно (то есть действие перемещения выполняется, и когда оно выполнено, выполняется действие поворота).

Также я не верю, что вам нужно устанавливать масштаб на 1 для каждого из изображений, так как я считаю, что он уже установлен на это.

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