(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 ;) 上篇介绍了游戏主角的初始化方法,下面我们一次来实现主角的其他方 ...
随机推荐
- bzoj 3998: [TJOI2015]弦论
Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...
- hdu 5441 (并查集)
题意:给你n个点,m条边构成无向图.q个询问,每次一个值,求有多少条路,路中的边权都小于这个值 a->b 和 b->a算两种 思路:把权值从小到大排序,询问从小到大排序,如果相连则用并查集 ...
- JSONObject转换分析
net.sf.json.JSONObject采用反射的方式,对POJO进行转换.JSONObject类实现了JSON.Map和Comparable接口,如下: class JSONObject ext ...
- Android自定义模糊匹配搜索控件(二)
在项目中遇到一个需要通过某个字的值筛选匹配带出其他信息的需求,在这里将实现思路整理出来. 源码地址:https://github.com/whieenz/SearchSelect 先看效果图 上图中的 ...
- Git与Github的基本概念
git git是一个分布式版本控制系统,在这里就要介绍一下什么是版本控制:参考至维基百科 版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程.此 ...
- select动态绑定vue.js
<select v-model="selected"> <option v-for="option in options" v-bind:va ...
- 关于ES7中的async/await在客户端和服务端上的实践
一.前言 在项目中经常遇到处理异步请求的情况,面对层层的嵌套,回调显示那么苍白无力: async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案,既然这样就用上吧. 二.配 ...
- async/await 的一些知识
博文 Don't Block on Async Code What is the purpose of "return await" in C#? Any difference b ...
- Go 语言接口
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface_name in ...
- 使用Spring实现定时任务
一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可 ...