(NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
来源:互联网 发布:桃源网络硬盘 编辑:程序博客网 时间:2024/06/02 07:30
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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*算法需要的变量和主角自身的实例变量,比如行走的速度等.
2 0
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
- (NO.00005)iOS实现炸弹人游戏(九):游戏主角(二)
- (NO.00005)iOS实现炸弹人游戏(十):游戏主角(三)
- (NO.00005)iOS实现炸弹人游戏(一):游戏的整体规划设计
- (NO.00005)iOS实现炸弹人游戏(四):游戏数据的初始化(一)
- (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)
- (NO.00005)iOS实现炸弹人游戏(六):游戏数据的初始化(三)
- (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示
- (NO.00005)iOS实现炸弹人游戏(二):素材选择的取舍
- (NO.00005)iOS实现炸弹人游戏(三):从主场景类谈起
- (NO.00005)iOS实现炸弹人游戏(十一):怪物之火精灵
- 炸弹人 游戏
- (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞
- 游戏主角
- (NO.00001)iOS游戏SpeedBoy Lite成形记(八)
- (NO.00002)iOS游戏精灵战争雏形(八)
- [动态规划]飞机炸弹游戏 C++实现
- 择天记游戏主角
- 第四章 INI配置——《跟我学Shiro》
- ListView点击Item展开隐藏项(单项展开、多项展开、复杂布局时的展开处理)
- android开发中更换图片,程序运行后新图片没有替换旧图
- Oracle unix下备份数据
- to_char转换小数点前0丢失问题
- (NO.00005)iOS实现炸弹人游戏(八):游戏主角(一)
- webdriver对于模态窗口的处理
- Unity 获取Android手机返回键Home按键信息
- Web 通信 之 长连接、长轮询(long polling)
- Java多线程入门
- people cmm 成熟度演变
- linux crontab 定时任务
- 【内存结构】[SGA]之Database buffer cache
- 当 Dagger2 应用在 MVP 框架中