(NO.00005)iOS實現炸彈人遊戲(十):遊戲主角(三)

來源:互聯網
上載者:User

(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 ;)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.