(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*算法需要的变量和主角自身的实例变量,比如行走的速度等.

相关文章
|
安全 数据安全/隐私保护 iOS开发
iOS小技能:【发红包】使用tweak和lua脚本结合进行实现
我们开发的大部分越狱程序,都是编译成动态链接库(`例如:介绍的越狱程序(Tweak)开发,就是动态链接库。`),然后通过越狱平台的MobileSubstrate(iOS7上叫CydiaSubstrate)来加载进入目标程序(Target),通过对目标程序的挂钩(Hook),来实现相应的功能。
262 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
219 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(二)
iOS开发-本地推送实现方法和数据处理方案(二)
168 0
|
存储 数据处理 iOS开发
iOS开发-本地推送实现方法和数据处理方案(一)
iOS开发-本地推送实现方法和数据处理方案(一)
209 0
|
iOS开发
iOS开发 - 不通过import引入类名实现push或present
iOS开发 - 不通过import引入类名实现push或present
75 0
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
354 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
|
存储 安全 iOS开发
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
397 0
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
345 0
iOS开发 - swift通过Alamofire实现https通信
|
开发者 iOS开发
iOS开发 - 用AFNetworking实现https单向验证,双向验证
iOS开发 - 用AFNetworking实现https单向验证,双向验证
342 0
iOS开发 - 用AFNetworking实现https单向验证,双向验证
|
iOS开发
iOS小技能:自动布局实现兄弟控件N等分且宽高比例是1:N(xib 上实现)
本文为 iOS视图约束专题的第三篇:xib上使用自动布局教程
140 0