在第壹部分教程中,我將教大家如何使用Tile來創建地圖,怎樣把地圖加到遊戲中,怎麽讓地圖跟隨玩家滾動,以及怎樣使用對象層。
在第二部分教程中,我將介紹如何在地圖中創建可碰撞的區域,如何使用tile屬性,如何制作可拾取的物體和動態修改地圖,還有確保忍者不要吃撐了!
如果妳還沒有準備好的話,妳可能需要先從《如何用Cocos2d-x3.0制作壹款簡單的遊戲》系列教程開始學起,因為我們這個教程使用了大量的基本概念,而這些概念都可以從上面的教程中獲取。
好了,讓我們玩壹玩tile地圖吧!
創建工程骨架
讓我們首先創建整個工程的骨架,這樣可以確保今後我們需要的文件都包含進來了,並且能夠跑起來。
首先工程命名為TileGame。
接下來,下載遊戲資源文件。這個資源文件包裏包含了以下內容:
玩家sprite。這個圖片和《如何用Cocos2d-x3.0制作壹款簡單的遊戲》差不多。
我使用cxfr這個工具制作的壹些音效。
我使用Garage Band制作的壹些背景音樂。(查看這篇博文獲得更多的信息)
我們將會使用的tile集合--它實際上會和tile地圖編輯器壹塊兒使用,但是,我想把它放在這裏,余下的事情會變得更容易。
壹些額外的“特殊”的tile,我將會在後面加以說明。
壹旦妳獲得了這些資源,解壓並把它拖到妳的工程的“Resources”分組下面。(編者的話:上面的音頻資源都被編者轉成了mp3格式)
如果壹切順利,所有的文件應該都在妳的工程裏了。是時候制作我們的地圖了!
使用Tile來制作地圖
Cocos2d-x支持使用Tile地圖編輯器創建的TMX格式的地圖。(建議大家在安裝的時候選擇英文,本教程的Tile采用英文的)
下載完之後,直接雙擊運行。點擊File\New,然後會出現以下對話框:
在 orientation部分,妳可以選擇Orthogonal。Layer format我們也選默認的 Base64(zlib compressed)。
接下來,設置地圖的大小。記住,這個大小是以tile為單位的,而不是以像素為單位。我們將創建壹個盡量小的地圖,因此選擇50*50。
最後,妳指定每個tile的寬度和高度。妳這裏選擇的寬度和高度要根據妳的實際的tile圖片的尺寸來做。這個教程使用的樣例tile的尺寸是32*32,所以在上面的選項中選擇32*32.
接下來,我們把制作地圖所需要的tile集合導入進來。點擊菜單欄上面的“map”菜單,“New Tileset...”,然後會出現下面的窗口:
為了獲得圖片,點擊“Browse...”按鈕,然後定位到工程的的Resources文件夾,選擇 tmw_desert_spacing.png文件(我們剛才解壓進去的),然後加到工程中去。它會基於文件名自動填充名稱。然後把新圖快 名稱命名為“tmw_desert_spacing.png”.同時,設置下面的Tile spacing和Margin都為1。
妳可以保留寬度和高度為32*32,因為tile的實際大小也是這麽多。至於margin和spacing,我還沒找到任何好的文檔解釋如何設置這兩個值,下面是我的個人看法:
Margin就是當前的tile計算自身的像素的時候,它需要減去多少個像素(寬度和高度都包含在內)。(類比word、css的margin)
Spacing 就是相鄰兩個tile之間的間隔(同時考慮寬度和高度)(類比word、css的spacing)
如果妳看看 tmw_desert_spacing.png,妳將會看見每壹個tile都有壹個像素的空白邊界圍繞著,這意味著我們需要把margin和spacing設置為1。
壹旦妳選擇ok,妳將會看到Tilesets窗口中顯示了壹些tiles。現在,妳可以制作地圖了!在Tilesets小窗口,選擇壹個tile,然後再在地圖上的任意位置單擊,妳就會看到妳選中的tile出現在點中的地方了。
因此,繼續制作地圖吧---充分發揮妳的聰明才智!確保增加至少壹對建築物在地圖上,因為後面我們需要壹些東西來做碰撞。
記住壹些方便的快捷方式:
妳可以在Tileset拾取器中拖出壹個方框,壹次選取多個tile。
妳可以使用工具欄上的“Bucket Fill Tools”按鈕(就是壹個桶那個)來基於壹個基準tile繪制整個地圖。
妳可以使用“View\Zoom In...”和“View\Zoom out...”來放大和縮小地圖。
壹旦妳完成了地圖的繪制工作,在Layers選項卡的層上面雙擊(現在可以說是“Layer1”),然後重命名為“Background”。然後點擊“File\Save”並且保存文件到妳的工程的資源文件夾中,並且命名為“TileMap.tmx”。
後面我們將會使用這個tmx來做壹些有趣的事情,好了,讓我們把地圖加載到遊戲中去吧!
把tile地圖添加到Cocos2d-x的場景中
打開HelloWorldScene.h,然後添加壹些成員變量:
cpp
// Replace the init method with the following
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
std::string file = "TileMap.tmx";
auto str = String::createWithContentsOfFile(FileUtils::getInstance()->fullPathForFilename(file.c_str()).c_str());
_tileMap = TMXTiledMap::createWithXML(str->getCString(),"");
_background = _tileMap->layerNamed("Background");
addChild(_tileMap, -1);
return true;
}
這裏,我們調用TMXTiledMap類的壹些方法,把我們剛剛創建的地圖文件加載進去。
希望能幫到妳,求采納。