2013-05-07 2 views
4

Я хочу клонировать эффекты анимации кнопок, найденные в Candy Crush Saga. А также я хочу знать, как сделать такую ​​жидкость & красивые анимации. Возможно ли это с Cocos2d-iPhone?Реализовать анимированную кнопку в cocos2d

Это звено Candy Давка Sage:

http://www.youtube.com/watch?v=KAMUWIqYN24

сделано ли это с помощью последовательности изображений?

ответ

6

Это возможно. Просто запустите анимацию на кнопках обычного спрайта.

GTAnimSprite *frame_normal = [GTAnimSprite spriteWithFile:@"play_button_normal.png"]; 
GTAnimSprite *frame_sel  = [GTAnimSprite spriteWithFile:@"play_button_selected.png"]; 
frame_sel.color = ccc3(128,128,128); 

CCMenuItemSprite *plyBtn = [CCMenuItemSprite itemWithNormalSprite:frame_normal 
              selectedSprite:frame_sel 
                target:self 
               selector:@selector(playBtnPress:) ]; 

plyBtn.position = ccp(size.width*0.77f, size.height*0.1f); 

CCMenu *menu2 = [CCMenu menuWithItems:plyBtn, nil]; 
menu2.position = ccp(0.0f,0.0f); 
[self addChild:menu2 z:2 ]; 

// Вот файл класса: GTAnimSprite.h

#import <Foundation/Foundation.h> 
#import "cocos2d.h" 

@interface GTAnimSprite : CCSprite 
{ 
    bool bouncing; 
    float counter; 

} 
@end 

// Вот файл класса: GTAnimSprite.mm

#import "GTAnimSprite.h" 

@implementation GTAnimSprite 

-(void)onEnter 
{ 
    [super onEnter]; 

    counter = 0.0f; 

    bouncing = true; 

    [self scheduleUpdate]; 
} 

-(void)update:(ccTime)dt 
{ 
    if (bouncing) 
    { 
     counter += dt; 

     self.scaleX = ((sin(counter*10) + 1)/2.0 * 0.1 + 1); 
     self.scaleY = ((cos(counter*10) + 1)/2.0 * 0.1 + 1); 

     if (counter > M_PI*10){ 
      counter = 0; 
     } 
    } 
} 

-(void)onExit 
{ 
    [self unscheduleUpdate]; 

    [super onExit]; 
} 

@end 

ЗДЕСЬ Xcode ОБРАЗЦА ИСТОЧНИК: https://www.box.com/s/52i4xyznetyyc329evcu

+0

получил это от этого ... – Renaissance

+0

Я реализовал аналогичное поведение с CCActions. Какая лучшая производительность мудрая, пользовательская CCSprite (например, это) или реализует CCActions? –

+0

@ KarlosZafra, Хорошо реализовать с помощью CCActions. Покажите мне код, который вы использовали с CCActions. – Guru

3

Вот как я это делаю ИНГ CCActions

Во-первых, я определяю CCAction:

id scaleHorDown = [CCScaleTo actionWithDuration:duration * 5/30.f scaleX:0.75f scaleY:1.0f]; 
id scaleHorBouncing = [CCEaseBounceIn actionWithAction:scaleHorDown]; 
id scaleVerDown = [CCScaleTo actionWithDuration:duration * 5/30.f scaleX:1.0f scaleY:0.65f]; 
id scaleVerBouncing = [CCEaseBounceInOut actionWithAction:scaleVerDown]; 

id shrink = [CCSequence actions:scaleHorBouncing,scaleVerBouncing, nil]; 

id swell = [CCScaleTo actionWithDuration: duration * 15/30.f scale:1.10f]; 
id swellEase = [CCEaseElasticOut actionWithAction:swell]; 

id resetScale = [CCScaleTo actionWithDuration:duration * 5/30.f scale:1.0f]; 
id resetScaleBouncing = [CCEaseInOut actionWithAction:resetScale]; 

id buttonAction = [CCSequence actions: shrink, swellEase, resetScaleBouncing, nil]; 

Тогда я бегу анимации над желаемым спрайтов, когда CCMenuItem инициализируется

CCMenuItem aMenuItem = [CCMenuItemSprite itemFromNormalSprite:buttonNormalSprite 
         selectedSprite:buttonSelectedSprite 
         block:^(id sender) { 
          //play animation highlighting button 
          [buttonSelectedSprite runAction:buttonAction]]; 
                 }}]; 

В моем случае я только запустить анимацию когда кнопка нажата.

Смежные вопросы