大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


下面我们来看游戏主角类里面几个播放特殊动画的方法,首先从runWinAnimation开始:

//运行精灵庆祝时的动画
-(void)runWinAnimation{CCActionJumpBy *jump = [CCActionJumpBy actionWithDuration:5position: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 ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

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

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

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

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在我们来看看实际初始化地图的randomCreateMap方法 ...

  7. 游戏引擎变革的三十年

    红白机(Family Computer)发售已经是37年前的事情了.短短30多年时间,游戏主流平台经过了主机.PC端和移动端的迁移,热门游戏也从红白机上的<魂斗罗><超级马里奥兄弟& ...

  8. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  9. 游戏十连模拟器(html版)

    游戏十连模拟器HTML版 内容展示 代码 最近有点沉迷坎公骑冠剑这个游戏,然后脸十分的黑,花钻石压根抽不到什么东西.所以写了两版代码模拟这个游戏的抽奖,本文章为HTML网页版,还有一版为JAVA版,可 ...

最新文章

  1. CreateStructuringElementEx
  2. 中奖名单,老读者请看过来!
  3. java结丹期(16)----javaweb(maven(2))
  4. 随机生成颜色和透明度
  5. python根据地址查看变量名_tensorflow创建变量以及根据名称查找变量
  6. 【译】NoClassDefFoundError和ClassNotFoundException的不同
  7. leetcode - 474. 一和零
  8. 修改树状控件TreeCtrl的节点名称
  9. 救急的戴尔Latitude 10商用平板电脑
  10. SQL 中联合主键设为外键的问题
  11. 待解决的问题 POJ 3225 Help with Intervals 线段树 码力
  12. 【编程之美】java二进制实现重建
  13. Makefile隐含规则
  14. 只有10分,5分,2分,1分的硬币;顾客付款x分,商品价格y分。如何找零所使用的硬币最少(递归实现)
  15. 工业机器人调运角度_FANUC/发那科搬运工业机器人R-2000iC/125L 负载125KG 臂展3100m...
  16. 疫苗行业发展现状:2022年猴痘疫苗产品占比提升
  17. 11 项目的工程文件存在哪里
  18. sql server 2000安装程序配置服务器失败
  19. Android问题集锦之十五 可笑的unauthorized错误
  20. 你被猪队友代码坑的最惨的一次是什么

热门文章

  1. sas 导入csv文件_SAS导入导出时编码问题汇总
  2. (转)【译】优化你的手机游戏(没有延迟的,才是健康的)
  3. Rocky版新功能集锦之一:Magnum
  4. 计算机在医学影像学中有哪些应用,计算机辅助教学在医学影像学实习课中的应用...
  5. 医日健“数智药房”解锁购药新模式
  6. Mipony(网络硬盘下载工具) v1.11简体中文绿色单文件版
  7. ASIO4ALL是什么
  8. IOS开发之微信山寨版
  9. 数字签名显示加密服务器显示错误,测试数字签名和加密
  10. Fragment.setUserVisibleHint()懒加载过时问题优化