999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AndEngine引擎結合Tiled編輯器實現游戲中的瓦片地圖

2018-02-02 17:35:10陳海燕王麗芬常瑩張燕寧
電腦知識與技術 2018年1期

陳海燕+王麗芬+常瑩+張燕寧

摘要:在游戲開發過程中,大部分設計者都需要足夠大且可以擴展的游戲地圖,例如即時戰略游戲,使得玩家可以在地圖中滾動游戲畫面。這類游戲通常會有豐富的背景元素,如果直接使用背景圖切換的方式,需要為每個不同的場景準備一張背景圖,而且每個背景圖都不小,這樣會造成資源浪費。相對于創建一張巨大的位圖來說,瓦片可以被多次使用,拼接成大圖,從而可以在游戲運行時根據需要即刻生成大小不限的地圖。瓦片地圖既節省了內存,又節省了時間。AndEngine是一款基于OpenGL ES技術的Android游戲引擎,為開發者提供了免費且易用的游戲框架,Tiled Map Editor是瓦片地圖編輯器。該文著重介紹AndEngine如何解析Tiled編輯器創建的地圖文件。

關鍵詞:AndEngine;Tiled Map Editor;瓦片地圖;TMX文件與TSX文件

中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2018)01-0226-02

瓦片地圖是由若干反復出現的多邊形小圖片以矩陣的方式組合而成的。對于簡單的瓦片地圖來說,多邊形通常是正方形。因此整張地圖可以看作一張表格,其中每個單元格對應于瓦片集中的某個瓦片,這樣所有單元格合起來就構成了整幅地圖圖像。

1 瓦片地圖的結構

瓦片地圖由三部分組成:用于創建瓦片貼圖的圖形文件,瓦片集以及地圖本身,地圖是以分層的方式創建的:

? 每個瓦片都有其屬性,包括位置ID(地圖中的行列位置)以及全局ID(在瓦片集中的貼圖位置);

? 瓦片被拼接成圖層,每個圖層都是一張完整的地圖層,其上覆蓋了該區域的所有瓦片;

? 所有圖層合起來構成整幅地圖。

2 TMX文件與TSX文件

有兩種非常流行的基于XML的文件格式,分別是用于瓦片集的TSX格式和用于瓦片地圖的TMX格式。這兩種格式是搭配使用的,大部分TMX文件都會引用TSX文件來獲取瓦片集信息。TMX瓦片地圖很容易同AndEngine相結合。

3 用瓦片編輯器Tiled制作瓦片地圖

首先制作用于創建瓦片貼圖的圖形文件。

美工可以使用任何所喜愛的圖形編輯器來制作游戲中的瓦片。筆者用Photoshop制作了六張32 像素*32像素的瓦片。Tiled所需的瓦片集圖像為 .png格式,所有的瓦片需要像精靈表那樣排列到一張大圖上。美工同樣可以使用自己喜歡圖形編輯器來將瓦片拼合成一幅大的 .png文件。如圖1所示:

然后制作瓦片集:

在Tiled軟件中,可以通過地圖菜單下的“新圖塊”菜單項將上一步做好的瓦片貼圖的圖形文件導入,在指定好相應瓦片的名字和屬性后,將其導出成制作瓦片地圖所需的瓦片集,格式為.tsx。

最后拼接瓦片地圖:

Tiled制作瓦片地圖的教程很多,也自帶例子,關于怎么拼地圖,這里就不介紹了,用Tiled制作的瓦片地圖以 .tmx格式的文件存儲,此文件需要導入游戲項目的assets文件夾中。

Tiled和AndEngine所使用的文件格式都是TMX,所有的貼圖地圖文件均以.tmx為擴展名。它所使用的瓦片集圖像將以.png的格式隨之一同存放。TMX文件是基于XML的,其中包含了地圖上每個位置所對應的瓦片信息,為了減少數據量,這些信息是經過壓縮的。

4 AndEngine中的用于加載、操作及渲染瓦片地圖的類和主要方法

4.1 TMXLoader類

AndEngine中的TMXLoader類知道如何將TMX與TSX文件載入TMXTiledMap對象中去,其構造函數如下:

TMXLoader(final Context pContext, final TextureManager pTextureManager,

final TextureOptions pTextureOptions,

final ITMXTilePropertiesListener pTMXTilePropertyListener)

其中Context和TextureManager參數是必須的, TextureOptions和ITMXTilePropertiesListener參數是可選的。 TextureOptions指定OPenGL如何繪制瓦片地圖,其默認值為NEAREST_PREMULTIPLYALPHA。ITMXTilePropertiesListener參數所定義的監聽器會在瓦片被載入時回調。

創建好TMXLoader對象后,便可使用下面的方法加載瓦片地圖:

TMXTiledMap loadFromAsset(final Context pContext, final String pAssetPath)

TMXTiledMap load(final InputStream pInputStream)

4.2 TMXTiledMap類

TMXTiledMap類是AndEngine用于表示整個瓦片地圖的類。它包含所有圖層、瓦片及其相關屬性。通常不需要直接調用其構造函數去構建整個地圖,而是通過調用上述加載地圖的方法而獲得。編程中,經常使用如下get方法來獲取瓦片地圖的內容:

int getTileColumns()

int getTileRows()

int getTileWidth()

int getTileHeight()

以上方法會分別返回對應瓦片的長寬信息,長和寬均以像素為單位。

ArrayList getTMXTileSets()

ArrayList getTMXLayers()

ArrayList getTMXObjectGroups()

以上方法分別返回包含該瓦片地圖的瓦片集、圖層、對象組的列表。這些對象都有相應的方法來獲取更加具體的地圖相關信息。

TMXProperties getTMXTilePropertiesByGlobalTileID(final int pGlobalTileID)

TMXProperties getTMXTiledMapProperties()

TMXProperties getTMXTileProperties(final int pGlobalTileID)

以上方法可以獲取到地圖對象中地圖、圖層或瓦片的屬性列表。

TextureRegion getTextureRegionFromGlobalTileID(final int pGlobalTileID)

這個方法可以獲取載入瓦片地圖中某塊瓦片所用的TextureRegion對象。

4.3 TMXLayer類

瓦片地圖是由圖層組成的,每個圖層都有自己的瓦片。開發者可以從TMXTiledMap對象上獲取地圖對象的圖層列表。可以在圖層對象上調用相關方法來獲取或修改圖層的相關信息。

TMXTile[][] getTMXTiles()

TMXTile getTMXTile(final int pTileColumn, final int pTileRow)

TMXTile getTMXTileAt(final float pX, final float pY)

這三個方法都可以用來獲取瓦片地圖的瓦片

TMXProperties getTMXLayerProperties()

這個方法可以提供本圖層的屬性列表。

4.4 TMXTile 類

可以通過TMXTile對象獲取感興趣的瓦片信息:

int getTileX()

int getTileY()

int getTileWidth()

int getTileHeight()

TextureRegion getTextureRegion()

以上方法都很簡明,不再詳細解釋了。

int getGlobalTileID()

void setGlobalTileID(final TMXTiledMap pTMXTiledMap, final int pGlobalTileID)

全局ID是由瓦片編輯器Tiled賦予瓦片地圖中的瓦片的,一般都是從默認值0開始,瓦片集中的每個瓦片圖像都有其獨特的全局ID,我們可以通過get和set方法設置和獲取瓦片的全局ID。

5 利用AndEngine引擎制作的瓦片地圖的實例

AndEngine加載瓦片地圖的關鍵是在加載場景onLoadScene()中。首先要創建TMXLoader對象,再通過它從assets文件夾下加載相關圖片以創建瓦片地圖并載入到AndEngine中。在創建TMXLoader對象時,以匿名內部類的手段重寫onTMXTileWithPropertiesCreated()方法,如果地圖中有屬性值為true的瓦片,該方法就會被回調。

AndEngine會在assets目錄下查找相關的.tmx 文件,我們可以編輯Tiled軟件所生成的.tmx文件和.tsx文件,將完整的路徑加入其中(例如我們將GameTileSet.png文件,GameTileMap.tmx文件和GameTileSet.tsx文件存放在assets目錄下的map 文件夾中),下面就是編輯后的GameTiledMap.tmx文件和GameTileSet.tsx文件。

<?xml version="1.0" encoding="UTF-8"?>

tilewidth="32" tileheight="32">

H4sIAAAAAAAAC2NhYGBgQcJsaHwQZsIiBsOseOSQ9cLUMSOJY8PE2suCZh66H9D1YvMXPjdjcw8

+vxJjPisB84l1G7Fhje42Jjx+IOQWXPKsOOQAvYm871gCAAA=

程序清單1 GameTiledMap.tmx

<?xml version="1.0" encoding="UTF-8"?>

程序清單2 GameTileSet.tsx

修改后的文件中,source屬性值寫入了完整的assets路徑(見陰影部分)。

載入地圖后,獲取圖層對象,將其作為子對象加入到當前的場景中。再調用setOnSceneTouchListener()方法在場景對象上注冊監聽器以捕獲觸摸事件。當類型為ACTION_DOWN的觸摸事件發生時,回調方法通過在圖層對象上調用getTileAt()方法來獲取被觸摸的瓦片,進而可對其進行相應的操作。

6 總結

瓦片地圖是游戲編程的重要組成部分,制作這些瓦片集和瓦片地圖所使用的工具Tiled非常的方便易用,而使用AndEngine提供的功能,可以將瓦片集與瓦片地圖輕松地集成到游戲中來。

參考文獻:

[1] 王玉芹.Android游戲開發從入門到精通[M].機械工業出版社,2016.

[2] 鄭萌.VIP——Android游戲開發案例與關鍵技術[M].電子工業出版社,2013.

[3] 吳亞峰,蘇亞光,于復興.Android 游戲開發大全[M].人民郵電出版社,2015.

[4] http://code.google.com/p/andengineexamples/.

主站蜘蛛池模板: 国产91丝袜在线播放动漫 | 精品综合久久久久久97超人该| 亚洲成人黄色在线观看| 精品国产www| 国产在线自揄拍揄视频网站| 色综合网址| 91精品国产丝袜| 久久精品中文字幕少妇| 国产精品永久不卡免费视频 | 极品尤物av美乳在线观看| 欧美特黄一级大黄录像| 26uuu国产精品视频| 欧美日本在线播放| 欧美成人精品高清在线下载| a级免费视频| 欧美国产菊爆免费观看| 国产精品亚洲va在线观看| 草草影院国产第一页| 国产午夜不卡| 欧美久久网| 成人字幕网视频在线观看| 狠狠色狠狠色综合久久第一次| 亚洲天堂啪啪| 91国内外精品自在线播放| 精品国产福利在线| 国产精品内射视频| 国产性生交xxxxx免费| 日韩天堂视频| 看你懂的巨臀中文字幕一区二区| 亚洲天堂视频网| 久无码久无码av无码| 国产在线视频自拍| 国产丰满成熟女性性满足视频| 91精品福利自产拍在线观看| 伊人成人在线视频| 日韩国产一区二区三区无码| 国产成人综合日韩精品无码首页 | 亚洲Aⅴ无码专区在线观看q| 人妻无码AⅤ中文字| 无码AV动漫| 黄片一区二区三区| 成人欧美在线观看| 狠狠干综合| 99热这里只有精品在线观看| 97国产一区二区精品久久呦| 国产午夜在线观看视频| 香蕉蕉亚亚洲aav综合| 亚洲欧美日韩中文字幕一区二区三区 | 欧美在线视频不卡第一页| 日本不卡在线| 免费看黄片一区二区三区| 亚洲中文字幕无码爆乳| 99re热精品视频中文字幕不卡| 综合亚洲网| 亚洲黄网在线| 欧洲在线免费视频| 国产成人综合欧美精品久久| 九色在线观看视频| 国产91九色在线播放| 一本一道波多野结衣一区二区| 中文字幕首页系列人妻| 精品一区二区三区无码视频无码| 亚洲丝袜中文字幕| 熟妇无码人妻| 国产成人精彩在线视频50| 一本大道香蕉高清久久| 久热99这里只有精品视频6| 韩日免费小视频| 日韩A∨精品日韩精品无码| 亚洲第一视频区| 老司机精品99在线播放| 青青极品在线| 97成人在线观看| 蜜桃视频一区二区三区| 亚洲欧美激情小说另类| 欧美中文字幕在线二区| 波多野结衣爽到高潮漏水大喷| 岛国精品一区免费视频在线观看 | 亚洲精品第五页| 午夜久久影院| 国产又爽又黄无遮挡免费观看| 亚洲精品国产综合99|