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

如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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实现炸弹人游戏(八):游戏主角(一)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. (NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面我们来看游戏主角类里面几个播放特殊动画的方法,首先从run ...

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

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

随机推荐

  1. hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)

    考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  3. [BZOJ]1095 Hide捉迷藏(ZJOI2007)

    一道神题,两种神做法. Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特 ...

  4. poj1741Tree 点分治

    上午学习了点分治,写了1个半小时终于写出一个代码--poj1741,可以说是个模板题. 分治:对于每个儿子找出重心,分别处理 注意:1.每次处理一个重心后,ans减去对它儿子的处理 原因:因为统计方法 ...

  5. 四个常用的 Rewrite 使用范例

    一.防盗链功能只这四行就实现了防盗链,原理是利用REFERER判断网页来源,缺点是REFERER容易伪造. RewriteEngine On RewriteCond %{HTTP_REFERER} ! ...

  6. 基于pytorch实现HighWay Networks之Highway Networks详解

    (一)简述---承接上文---基于pytorch实现HighWay Networks之Train Deep Networks 上文已经介绍过Highway Netwotrks提出的目的就是解决深层神经 ...

  7. AMD,CMD,UMD,CommonJS

    http://www.jianshu.com/p/bd4585b737d7 http://www.jianshu.com/p/09ffac7a3b2c

  8. jquery传值与判断

    js判断是否包含字符串 var str="Hello world!" var s = str.indexOf("Hello") 存在则s>-1不存在则是s ...

  9. Web缓存(一) - HTTP协议缓存

    为什么要使用 Web 缓存 Web缓存一般分为浏览器缓存.代理服务器缓存以及网关缓存,本文主要讲的是 浏览器缓存,其它两种缓存大家自行去了解下. Web 缓存游走于服务器和客户端之间.这个服务器可能是 ...

  10. ng-book札记——路由

    路由的作用是分隔应用为不同的区块,每个区块基于匹配当前URL的规则. 路由可以分为服务端与客户端两种,服务端以Express.js为例: var express = require('express' ...