(NO.00005)iOS實現炸彈人遊戲(十):遊戲主角(三)
大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請註明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支援點贊.謝謝! hopy ;)
下面我們來看遊戲主角類裡面幾個播放特殊動畫的方法,首先從runWinAnimation開始:
//運行精靈慶祝時的動畫-(void)runWinAnimation{ CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:5 position:ccp(0, 5) height:5 jumps:10]; [self runAction:[CCActionRepeatForever actionWithAction:jump]]; [self runAnimation:_happyAnimation];}
該動畫在主角在遊戲情境中找到並進入出口時播放,可以看到代碼很簡單,就是讓主角跳躍同時運行_happyAnimation表示慶祝的動畫.該動畫在主角的初始化方法中預先建立過了.
當主角掛掉時,尤其是被火焰精靈碰到或者被炸彈炸到時,我們就播放fired動畫:
//運行自燃動畫-(void)fired{ if (_isDead) { return; } _isDead = YES; [self stopAllActions]; CCActionAnimate *animate = [CCActionAnimate actionWithAnimation:_firedAnimation]; CCActionDelay *delay = [CCActionDelay actionWithDuration:0.3]; CCActionCallBlock *block = [CCActionCallBlock actionWithBlock:^{ self.visible = NO; }]; CCActionSequence *seq = [CCActionSequence actions:animate,delay,block,nil]; [self runAction:seq];}
如果主角已經掛了則直接返回,否則設定主角死亡狀態,停止所有動作,按遊戲邏輯調整動畫啟動並執行間隔和串列序列動作,最後運行該序列動作.
在主角類的介面檔案中我們提到2個方法:
-(BOOL)isInvincible;-(void)setIsInvincible:(BOOL)isInvincible;
大家可能回想把它們做成一個屬性更好一點吧?但實際我們需要在寫者方法中做附加操作,所以必須自己實現寫者方法:
-(BOOL)isInvincible{ return _isInvincible;}//因為要做額外的操作,所以沒有用自動產生的屬性-(void)setIsInvincible:(BOOL)isInvincible{ _isInvincible = isInvincible; [self setIsRiding:isInvincible];}
大家可以看到我在寫者方法中除了調整主角的_isInvincible變數,還調用了另外一個setIsRiding方法:
-(void)setIsRiding:(BOOL)isRiding{ _isRiding = isRiding; CCSpriteFrame *spriteFrame; //如果當前是騎行狀態則按前進方向將精靈幀設定為對應圖片 //ERROR:因為狀態變為騎行狀態時,精靈必定在移動過程中(移動中才能接觸到無敵道具),所以只要判斷當前的動畫即可 //加入拖拽道具,這裡也要和下面一樣判斷2種情況 if (isRiding) { if (_curAnimation == _facingForwardAnimation || _curDirection == RoleDirectionDown) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideForward_2.png"]; }else if (_curAnimation == _facingBackAnimation || _curDirection == RoleDirectionUp) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideBack_2.png"]; }else if (_curAnimation == _facingLeftAnimation || _curDirection == RoleDirectionLeft) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideLeft_2.png"]; }else if (_curAnimation == _facingRightAnimation || _curDirection == RoleDirectionRight) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_rideRight_2.png"]; } }else{ //否則精靈處於非騎行狀態,按前進方向恢複其精靈幀圖片 //不像上面一種情況,精靈恢複正常狀態(非騎行狀態)時需要判斷兩種情況: //1.精靈在移動中恢複狀態 2.精靈處於靜止狀態時恢複狀態 //要分別判斷這兩種情況,做出處理. if (_curAnimation == _facingForwardRideAnimation || _curDirection == RoleDirectionDown) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_forward_2.png"]; }else if (_curAnimation == _facingBackRideAnimation || _curDirection == RoleDirectionUp) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_back_2.png"]; }else if (_curAnimation == _facingLeftRideAnimation || _curDirection == RoleDirectionLeft) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_left_2.png"]; }else if (_curAnimation == _facingRightRideAnimation || _curDirection == RoleDirectionRight) { spriteFrame = [CCSpriteFrame frameWithImageNamed:@"bm_right_2.png"]; }else{ } } //停止當前的動畫 [self stopAction:_curAnimate]; //設定合適的精靈幀 self.spriteFrame = spriteFrame;}
上面注釋說的足夠清楚了,該方法的作用在於當主角處於無敵狀態時,改變其移動的動畫,讓它騎在一頭坐騎上,有點小霸氣的趕腳啊 ;)
以下是當主角無敵時的效果:
遊戲主角到這裡基本介紹完了,後面我們來看看遊戲中的各種怪物吧 see you ;)