你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00005)iOS實現炸彈人游戲(十):游戲主角(三)

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

編輯: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 ;)

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved