(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 ;)
(NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)的更多相关文章
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博 ...
- (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我又粗粗看了下整个项目的代码,比较多: 不少类都与其他类有着千丝 ...
- (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前面一篇里我们基本明确了游戏的大致玩法和特点.下面就游戏中会用到 ...
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 从本篇开始我们一次介绍一下游戏中敌人的制作过程.看过第一篇的小 ...
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...
- (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updat ...
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们初步看了一下MainScene类的初始化方法里都做了神 ...
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...
- (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上篇介绍了游戏主角的初始化方法,下面我们一次来实现主角的其他方 ...
随机推荐
- hdu 5830 FFT + cdq分治
Shell Necklace Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 【LA3938】"Ray, Pass me the dishes!"
原题链接 Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hun ...
- [BZOJ]4650: [Noi2016]优秀的拆分
Time Limit: 30 Sec Memory Limit: 512 MB Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串, ...
- ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)
●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...
- hdu 5012(bfs)
题意:给你2个 骰子,让你通过翻转使第一个变成第二个,求最少翻转数 思路:bfs #include<cstdio> #include<iostream> #include< ...
- 垃圾回收机制(GC)
垃圾收集器(GC)与内存分配策略 GC需要完成的三件事: 判断哪些内存需要回收 什么时候回收 如何回收 在java内存运行时区域的各个部分中,程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程 ...
- C语言程序设计第三次作业 —— 选择结构(1)
(一)改错题 计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. (错误一) 错误原因及改正:第九行语句结尾缺少半角分号,添加分号即可改正 (错误二) 错误原因及改 ...
- python map filter reduce的优化使用
这篇讲下python中map.filter.reduce三个内置函数的使用方式,以及优化方法. map()函数 map()函数会根据提供的函数对指定序列做映射. 语法: map(function,it ...
- IE10以下兼容H5中的placeholder 以及改变它默认颜色
placeholder是H5<input>的属性之一,可惜在IE10以下不支持,万恶的IE!不过正因为有IE,才多了很多捣鼓,添了乐趣.不支持就不支持呗,自己动手丰衣足食,我们可以用js模 ...
- 传统方法过渡到ES6去优雅地实现JavaScript的继承
众所周知,面向对象编程有三个重要的概念: 封装.继承.多态.而JS作为面向对象的弱类型语言,应该说是基于对象的语言,正如常说的,JS的世界里,万物皆对象.虽然JS本身不是面向对象的语言,我们可以通过模 ...