你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00005)iOS實現炸彈人游戲(八):游戲主角(一)

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

編輯:IOS開發綜合

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


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

(NO.00005)iOS實現炸彈人游戲(七):游戲數據的序列化表示

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

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

這裡寫圖片描述

如各位所見除了普通的移動動作,我還選擇了主角被人道毀滅和無敵狀態的動作素材,這個在後面大家將會看到如何融入到游戲邏輯中去.另外為了方便,我使用TexturePacker將其統統打包到一張紋理中去以優化性能.<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160202/20160202091444113.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*算法需要的變量和主角自身的實例變量,比如行走的速度等.

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved