(NO.00005)iOS實現炸彈人遊戲(八):遊戲主角(一)

來源:互聯網
上載者:User

(NO.00005)iOS實現炸彈人遊戲(八):遊戲主角(一)

大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請註明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支援點贊.謝謝! hopy ;)

最近一直在做另一個RPG遊戲,所以本系列遲遲沒有更新,上一篇博文的地址在:

(NO.00005)iOS實現炸彈人遊戲(七):遊戲資料的序列化表示

本篇接著上篇介紹炸彈人遊戲中的遊戲主角的基本構成,遊戲主角自然是我們的炸彈人了.

因為主角會在遊戲情境中各個方向行走,所以我們需要先準備其對應的圖片資源:

如各位所見除了普通的移動動作,我還選擇了主角被人道毀滅和無敵狀態的動作素材,這個在後面大家將會看到如何融入到遊戲邏輯中去.另外為了方便,我使用TexturePacker將其統統打包到一張紋理中去以最佳化效能.<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="http://www.bkjia.com/uploads/allimg/160203/04133M500-1.png" title="\" />

開啟Xcode,建立一個新類BombManSprite.開啟BombMaSprite.h標頭檔,替換為如下內容:

#import "CCSprite.h"#import "Comm.h"@class MainScene;//遊戲主角炸彈人類@interface BombManSprite : CCSprite @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*演算法需要的變數和主角自身的執行個體變數,比如行走的速度等.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.