你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> (NO.00005)iOS實現炸彈人游戲(三):從主場景類談起

(NO.00005)iOS實現炸彈人游戲(三):從主場景類談起

編輯:IOS開發綜合

 

我又粗粗看了下整個項目的代碼,比較多:

這裡寫圖片描述

不少類都與其他類有著千絲萬縷的聯系,所以在後面交代某個類的時候可能會遇到一些其他類中的代碼,這個大家先看名會意吧.如果實在不明白的,都是我敘述的原因,和大家的理解力沒有任何關系 ;).大家可以隨時在博文後面直接跟帖發消息給我,如果時間允許,每條我都會回復.

從MainScene類開始

MainScene類是整個工程裡代碼最多的類之一.共有六十多個方法:

這裡寫圖片描述vc+88rWlLMv50tS9q8v509DE2sjdtry3xbW9TWFpblNjZW5lwODW0CzDu9PQyrnTw8bky/u1xLOhvrDA4MHLLNTasci9z7i01NO1xNPOz7fW0Lu5tcPU2bfWs8m4/LbgtcRTY2VuZSyxyMjnsb7DqNX91Nq5xLW3tcRSUEfTzs+3U291bE9mUGFuZGE6PC9wPg0KPHA+PGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20151224/20151224091708100.gif" title="\" />

這裡寫圖片描述

游戲中包括了大量的子場景和嵌入層,不過這個是題外話了.

主場景裡包括了所有的用戶交互部分和地圖顯示部分.無論如何如果不給玩家和敵人一個空間,任何游戲也無從開始,所以我們先談談地圖.

游戲地圖

我們希望自動生成如下的地圖:

這裡寫圖片描述

灰色的牆的位置是固定不變的,紅色的磚塊位置是隨機擺放的.由於磚塊下面要藏有道具和出口,所以我們很自然的就必須把整個地圖劃分為不同的層.

以前玩過Tiled的都知道,Tiled是一個很棒的地圖編輯軟件,盡管目前的版本中有一些不盡如人意的地方,比如同一層中只能在一張地圖集中選擇瓦塊.但總的來說Tiled功能還是很強大的,如果以後有機會我會單開一系列關於Tiled制作地圖的博文.

Tiled還可以創建特殊的層,稱為對象層.對象層不是用來擺放瓦塊的,而是用來放置幾何圍界對象的,在RPG類型的游戲中有著重要的用途,但是在炸彈人App中沒有用到對象層,所以大家暫時不用管它啦.

首先我們制作一張空白的地圖:

這裡寫圖片描述

將地圖tmx文件和相關的地圖集文件全部拷貝到炸彈人工程資源目錄下的tileMap文件夾中.

在Xcode中打開MainScene.m文件,初始化方法代碼如下:

-(void)didLoadFromCCB{
    _viewSize = [CCDirector sharedDirector].viewSize;
    //在屏幕上顯示游戲幀數
    [CCDirector sharedDirector].displayStats = YES;
    //初始化話手勢識別器
    [self initGestureRecognizer];

    //其他初始化代碼...

    //加載空白地圖到游戲中
    _tileMap = [CCTiledMap tiledMapWithFile:@"EmptyMap.tmx"];
    _mapHelper = [MapHelper sharedInstance];
    _mapHelper.tileMap = _tileMap;

    [self addChild:_tileMap];

    //玩家在場景中出現的坐標
    CGPoint spawnTileCoord = ccp(0,0);
    CGPoint spawnPos = [self positionForTileCoord:spawnTileCoord];
    [self setViewpointCenter:spawnPos];
    //取得地圖中各個層的引用
    _bgLayer = [_tileMap layerNamed:@"Background"];
    _objectLayer = [_tileMap layerNamed:@"Objects"];
    _underObjectsLayer = [_tileMap layerNamed:@"UnderObjectsLayer"];
    _propertiesLayer = [_tileMap layerNamed:@"PropertiesLayer"];

    _batchNode = [CCNode node];
    [_tileMap addChild:_batchNode];

    //省略其他初始化代碼...

    //[self initGameData];
    //用游戲數據初始化當前關卡
    [self initGameDataFromGD];

    //啟用游戲測試
    //[self test];
}

簡單說一下,在MainScene類的初始化方法中,首先打開顯示調試,初始化手勢識別器,然後是實例數組的初始化和其他初始化代碼.接下來到了重要的部分:地圖的初始化,首先將空白地圖加載進來,並創建MapHelper類實例,裡面有很多方便的方法可供調用;然後建立其地圖中各個層的引用;之後是創建游戲主角炸彈人,然後調用initGameDataFromGD方法,其中包含了地圖隨機生成的代碼,我們後面會講到.

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