(NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
最近一直在做另一个RPG游戏,所以本系列迟迟没有更新,上一篇博文的地址在:
(NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
本篇接着上篇介绍炸弹人游戏中的游戏主角的基本构成,游戏主角自然是我们的炸弹人了.
因为主角会在游戏场景中各个方向行走,所以我们需要先准备其对应的图片资源:
如各位所见除了普通的移动动作,我还选择了主角被人道毁灭和无敌状态的动作素材,这个在后面大家将会看到如何融入到游戏逻辑中去.另外为了方便,我使用TexturePacker将其统统打包到一张纹理中去以优化性能.
打开Xcode,建立一个新类BombManSprite.打开BombMaSprite.h头文件,替换为如下内容:
#import "CCSprite.h"
#import "Comm.h"
@class MainScene;
//游戏主角炸弹人类
@interface BombManSprite : CCSprite <RoleAcross>
@property (nonatomic,assign) BOOL isDead;
@property (nonatomic,assign) BOOL canAcrossBrick;
@property (nonatomic,assign) BOOL canAcrossBomb;
@property (nonatomic,assign) BOOL isHarmless;
@property (nonatomic,assign) CGFloat speedPerStep;
-(id)initWithMainScene:(MainScene*)mainScene;
-(void)moveTowardByAStar:(CGPoint)targetLocation; //A*算法移动至目标位置(非瓦块坐标)
-(void)fired; //燃烧自身动画
-(BOOL)isInvincible;
-(void)setIsInvincible:(BOOL)isInvincible;
-(void)runWinAnimation;
@end
其中五个属性分别为主角是否死亡,是否可以穿墙,是否可以穿炸弹,是否炸弹可以伤害主角,以及主角行走的速度.
几个实例方法的作用再分别解释如下:
//初始化主角
-(id)initWithMainScene:(MainScene*)mainScene;
//A*算法移动至目标位置(非瓦块坐标)
-(void)moveTowardByAStar:(CGPoint)targetLocation;
//燃烧自身动画
-(void)fired;
//是否处于无敌状态
-(BOOL)isInvincible;
//设置无敌状态
-(void)setIsInvincible:(BOOL)isInvincible;
//运行游戏过关时的主角庆祝动作
-(void)runWinAnimation;
接下来打开实现文件,我首先来实现主角初始化的方法:
-(id)initWithMainScene:(MainScene *)mainScene{
self = [super initWithImageNamed:@"bm_forward.png"];
if (self) {
_mainScene = mainScene;
_facingForwardAnimation = [CCAnimation animation:@"bm" middle:@"forward" frameCount:3];
_facingBackAnimation = [CCAnimation animation:@"bm" middle:@"back" frameCount:3];
_facingLeftAnimation = [CCAnimation animation:@"bm" middle:@"left" frameCount:3];
_facingRightAnimation = [CCAnimation animation:@"bm" middle:@"right" frameCount:3];
_firedAnimation = [CCAnimation animation:@"bm" middle:@"fired" frameCount:5];
_facingForwardRideAnimation = [CCAnimation animation:@"bm" middle:@"rideForward" frameCount:3];
_facingBackRideAnimation = [CCAnimation animation:@"bm" middle:@"rideBack" frameCount:3];
_facingLeftRideAnimation = [CCAnimation animation:@"bm" middle:@"rideLeft" frameCount:3];
_facingRightRideAnimation = [CCAnimation animation:@"bm" middle:@"rideRight" frameCount:3];
_happyAnimation = [CCAnimation animation:@"bm" middle:@"dead" frameCount:3];
_spOpenSteps = nil;
_spClosedSteps = nil;
_shortestPath = nil;
_currentStepAction = nil;
_pendingMove = nil;
_speedPerStep = 0.8;
_curDirection = RoleDirectionDown;
}
return self;
}
大家可以看到如上代码首先保存主场景的实例,便于以后调用主场景的方法.这里多说一句,主场景在这里起到一个枢纽的作用,所有相关的类都可以借助主场景的帮助放来来完成指定的功能.另外还有一种方法是将所有帮助方法放到一个单例类中,调用的时候取得单例类的实例,然后调用即可.
接下来一次预先创建主角各种行为的动画,后面是初始化一些A*算法需要的变量和主角自身的实例变量,比如行走的速度等.
(NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)的更多相关文章
- (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实现炸弹人游戏(二):素材选择的取舍
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 前面一篇里我们基本明确了游戏的大致玩法和特点.下面就游戏中会用到 ...
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
在这新的系列中,我们来尝试完成一款经典的游戏:炸弹人 这是以前红白机上的炸弹人,由于游戏可玩性强,玩法又简单,在后面的机型上陆续推出了很多款续作. 在随后的触屏设备上也出现了炸弹人的模拟版,用的是模拟 ...
- (NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面我们来看游戏主角类里面几个播放特殊动画的方法,首先从run ...
- (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上篇介绍了游戏主角的初始化方法,下面我们一次来实现主角的其他方 ...
随机推荐
- Linux之软链接与硬链接
什么是链接? 链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件. 它是用来干什么的? 你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS ...
- c语言第六次作业v
(一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...
- java中什么是序列化和反序列化
序列化:能够把一个对象用二进制的表示出来. 类似我第一个字节表示什么属性名词,第二个字节表示什么属性值,第几个字段表示有几个属性等. 而且这个二进制可以写到硬盘或者在网络上传输但不会破坏他的结构.一般 ...
- 跨域资源共享CORS与JSONP
同源策略限制: 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说 ...
- RabbitMQ环境安装
1.安装erlang 语言环境 安装依赖 yum install ncurses-devel (如果没安装GCC,执行 yum install gcc或者:yum groupinstall " ...
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1. 摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...
- Kali安装使用文泉驿字体
安装文泉驿字体 Kali选择"简体中文"安装后,在终端等地方发现字体总有重叠,只要安装中文字体即可,这里推荐文泉驿字体.文泉驿是一个以开发开源.免费中文电子资源--如汉字字体.词库 ...
- spring web项目下,判断项目是否启动完成
本文同时发布于见鬼网:https://faceghost.com/article/483341 概述:spring 加载完成后,我们有时候会做一些初始化工作,如加载一些缓存,DB,等,这里采用实现Se ...
- js数组排序,支持正反排序以及多维度排序
工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...
- LinkedList源码和并发问题分析
1.LinkedList源码分析 LinkedList的是基于链表实现的java集合类,通过index插入到指定位置的时候使用LinkedList效率要比ArrayList高,以下源码分析是基于JDK ...