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

AndEngine引擎結(jié)合Tiled編輯器實現(xiàn)游戲中的瓦片地圖

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

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

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

關(guān)鍵詞:AndEngine;Tiled Map Editor;瓦片地圖;TMX文件與TSX文件

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

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

1 瓦片地圖的結(jié)構(gòu)

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

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

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

? 所有圖層合起來構(gòu)成整幅地圖。

2 TMX文件與TSX文件

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

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

首先制作用于創(chuàng)建瓦片貼圖的圖形文件。

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

然后制作瓦片集:

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

最后拼接瓦片地圖:

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

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

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

4.1 TMXLoader類

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

TMXLoader(final Context pContext, final TextureManager pTextureManager,

final TextureOptions pTextureOptions,

final ITMXTilePropertiesListener pTMXTilePropertyListener)

其中Context和TextureManager參數(shù)是必須的, TextureOptions和ITMXTilePropertiesListener參數(shù)是可選的。 TextureOptions指定OPenGL如何繪制瓦片地圖,其默認(rèn)值為NEAREST_PREMULTIPLYALPHA。ITMXTilePropertiesListener參數(shù)所定義的監(jiān)聽器會在瓦片被載入時回調(diào)。

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

TMXTiledMap loadFromAsset(final Context pContext, final String pAssetPath)

TMXTiledMap load(final InputStream pInputStream)

4.2 TMXTiledMap類

TMXTiledMap類是AndEngine用于表示整個瓦片地圖的類。它包含所有圖層、瓦片及其相關(guān)屬性。通常不需要直接調(diào)用其構(gòu)造函數(shù)去構(gòu)建整個地圖,而是通過調(diào)用上述加載地圖的方法而獲得。編程中,經(jīng)常使用如下get方法來獲取瓦片地圖的內(nèi)容:

int getTileColumns()

int getTileRows()

int getTileWidth()

int getTileHeight()

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

ArrayList getTMXTileSets()

ArrayList getTMXLayers()

ArrayList getTMXObjectGroups()

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

TMXProperties getTMXTilePropertiesByGlobalTileID(final int pGlobalTileID)

TMXProperties getTMXTiledMapProperties()

TMXProperties getTMXTileProperties(final int pGlobalTileID)

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

TextureRegion getTextureRegionFromGlobalTileID(final int pGlobalTileID)

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

4.3 TMXLayer類

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

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()

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

int getGlobalTileID()

void setGlobalTileID(final TMXTiledMap pTMXTiledMap, final int pGlobalTileID)

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

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

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

AndEngine會在assets目錄下查找相關(guān)的.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路徑(見陰影部分)。

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

6 總結(jié)

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

參考文獻(xiàn):

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

[2] 鄭萌.VIP——Android游戲開發(fā)案例與關(guān)鍵技術(shù)[M].電子工業(yè)出版社,2013.

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

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

主站蜘蛛池模板: 国产成人综合日韩精品无码首页 | 国产欧美精品一区aⅴ影院| 激情综合婷婷丁香五月尤物| 中文无码精品A∨在线观看不卡 | 9啪在线视频| 2024av在线无码中文最新| 国产在线精品香蕉麻豆| 国产黑丝视频在线观看| 国产网站免费看| 成人免费一区二区三区| 亚洲精品午夜天堂网页| 国产微拍精品| 女人爽到高潮免费视频大全| 国产亚洲精久久久久久无码AV| 一级毛片在线免费视频| 伦伦影院精品一区| 亚洲娇小与黑人巨大交| 91精品aⅴ无码中文字字幕蜜桃| 高清精品美女在线播放| 亚洲经典在线中文字幕| 久久精品中文字幕免费| 国产毛片久久国产| 久久精品嫩草研究院| 国产乱人免费视频| 久久久久人妻一区精品色奶水 | 天天色天天操综合网| 色婷婷综合激情视频免费看 | 免费在线a视频| 欧美日韩精品一区二区在线线| 亚洲精品自在线拍| 日韩经典精品无码一区二区| 成人午夜视频在线| 又爽又大又光又色的午夜视频| 国产精品毛片一区视频播| 欧美无专区| 欧美一区精品| 真人免费一级毛片一区二区 | 精品久久久久久久久久久| 久久夜夜视频| 波多野结衣亚洲一区| 婷婷综合在线观看丁香| 四虎国产精品永久一区| 在线观看国产精品第一区免费 | 天天色综合4| 永久免费精品视频| 欧美日韩国产成人高清视频| 区国产精品搜索视频| 久久国产精品77777| 97se亚洲综合| 国产性生大片免费观看性欧美| 欧美日韩激情| 久996视频精品免费观看| 国产在线八区| 国产chinese男男gay视频网| 国产成人综合在线观看| 性欧美在线| 日韩高清一区 | 又黄又湿又爽的视频| 91亚洲国产视频| 精品一区二区三区自慰喷水| 午夜限制老子影院888| 精品1区2区3区| 亚洲最大综合网| 亚洲婷婷丁香| 日韩高清在线观看不卡一区二区| 午夜免费小视频| 日本不卡视频在线| 免费国产好深啊好涨好硬视频| 国内精品自在自线视频香蕉 | 伊人久久影视| 欧美黄色网站在线看| 在线欧美一区| 国产亚洲精品91| 国产无遮挡裸体免费视频| 久久人搡人人玩人妻精品| 好吊日免费视频| 极品国产一区二区三区| 91国内视频在线观看| 免费国产福利| 亚洲欧美国产五月天综合| 久久综合九九亚洲一区| 天堂成人在线视频|