2013-05-07 45 views

回答

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 2013-05-08 05:26:27

+0

我已經實現了與CCActions類似的行爲。什麼是最好的性能明智的,自定義CCSprite(像這樣)或實現CCActions? – 2013-05-08 08:05:36

+0

@KarlosZafra,很好的執行CCActions。向我顯示您使用CCActions的代碼。 – Guru 2013-05-08 08:44:35

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

在我來說,我只運行動畫當按鈕被按下時。