大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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 ;)

(NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)的更多相关文章

  1. (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...

  2. (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...

  3. (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前面一篇里我们基本明确了游戏的大致玩法和特点.下面就游戏中会用到 ...

  4. (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 从本篇开始我们一次介绍一下游戏中敌人的制作过程.看过第一篇的小 ...

  5. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

  6. (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updat ...

  7. (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们初步看了一下MainScene类的初始化方法里都做了神 ...

  8. (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计

    在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...

  9. (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上篇介绍了游戏主角的初始化方法,下面我们一次来实现主角的其他方 ...

随机推荐

  1. 51 nod 1766 树上的最远点对(线段树+lca)

    1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题   n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...

  2. 中断下半部处理之tasklet

    1.tasklet概述 下半部和退后执行的工作,软中断的使用只在那些执行频率很高和连续性要求很高的情况下才需要.在大多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选 ...

  3. Codeforces Round#432 简要题解

    来自FallDream的博客,未经允许,请勿转载,谢谢. Div2A 小判断题 Div2B 小判断题,合法的条件是|AB|=|BC|且三点不共线 Div1A 类比二维.三维空间,可以猜测n太大的时候没 ...

  4. C++函数的重载

    两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参与形参的类型以及个数的最佳匹配,自动确定调用的函数,这就是函数的重载. 两个名字相同的函数必须具有不同的形参,这里的不同指的 ...

  5. input type="tel" 数字输入框显示圆点

    最近开发中遇到一个这样的需求,要求input输入框在手机端出现数字键盘的同时显示圆点,试过各种方法都不太理想, 最终经过查阅大量资料后,终于实现了需求. ●我们一般的密码输入框是这样的: <in ...

  6. Redis开启远程登录连接

    Redis 安装详见 http://www.cnblogs.com/zendwang/p/6560628.html 当前安装测试版本:Redis 3.2.8 默认安装完毕Redis只能本机访问 [ro ...

  7. hive 集成 hbase NoClassDefFoundError: org/apache/htrace/Trace

    更新了hive版本后,在创建hive外部表 级联hbase 的时候报如下异常: hive (default)> create external table weblogs(id string,d ...

  8. 下拉框多级联动辅助js,优化您的下拉框

    function IniteSelect(options) { $("body").IniteSelect(options) } (function ($) { $.fn.Init ...

  9. VS2010 win7 64位安装后新建项目生成时错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 ...

  10. leetcode刷题笔记342 4的幂

    题目描述: 给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂. 示例:当 num = 16 时 ,返回 true . 当 num = 5时,返回 false. 问题进阶:你能不使 ...