JAVAME學習筆記(8)

Layer是一個抽象類,表示遊戲中的一個可視元素。上節中講述的Sprite就是Layer的一種。每個Layer都有位置(取決於它的左上角在其容器中的位置),寬度,高度和可視與否。 Layer的子類必須實現一個paint(Graphics)方法,使得它們能夠被渲染。如果該Layer可見。 Layer從它的左上角開始渲染,其當前座標(x,y)是相對於原始的Graphics對象。當渲染Layer時,應用程序可以使用剪輯和座標變換來控制並限制渲染的區域。實現此方法的子類有責任檢查Layer是否可見,如果不可見,這個方法應該不做任何事。此外,調用此方法不應該改變Graphics對象的屬性(剪輯區域,座標變換,繪圖顏色等等)。

Layer的位置座標(x,y)通常都是相對於Graphics對象的座標系統,該對象通過Layer的paint()方法傳遞。這個座標系統被稱爲繪圖座標系統。一個Layer的初始位置是(0,0)。

6.4.1 TiledLayer
TiledLayer由一系列單元格組成,單元格可被一組貼圖填充。這個類允許不必使用特別大的圖像來創建大的虛擬層。這個技術在2D遊戲中被廣泛用於創建特別大的可捲動的背景。



貼圖(Tiles)



貼圖用於填充TiledLayer的單元格,由一個單一的可變或不可變的Image對象提供。圖像被切割成一系列相同大小的貼圖;貼圖大小隨Image一同指定。如下圖所示,相同的一系列貼圖可以以不同的方式存儲,取決於對遊戲開發者而言方便與否。




每個貼圖都被賦予一個唯一的索引號。位於圖像最左上角的貼圖被賦予索引號1。剩下的貼圖按照一行一行的順序(首先是第一行,然後是第二行,以此類推)依次遞增。這些貼圖被視爲靜態貼圖(static tiles),因爲貼圖和圖像內容有固定的聯繫。



當實例化一個TiledLayer時,一組靜態貼圖就被創建了;也可以在任何時候調用setStaticTileSet(javax.microedition.lcdui.Image, int, int)方法來更新它們。



除了靜態貼圖外,開發者同樣能夠定義一系列動態貼圖(animated tiles)。一個動態貼圖就是一個虛擬的貼圖,它與一個靜態貼圖動態地聯繫在一起;一個動態貼圖的外觀就是當時與之聯繫的靜態貼圖。



動態貼圖允許開發者能非常容易地改變一組單元格的外觀。對於用動態貼圖填充的單元格而言,改變它們的外觀僅僅需要簡單地改變與動態貼圖關聯的靜態貼圖即可。此技術對於動畫顯示大的重複性區域非常有用,因爲不需要顯式地改變大量單元格的內容。



動態貼圖可以通過調用createAnimatedTile(int)方法來創建,該方法返回一個索引號,用於標記新創建的動態貼圖。動態貼圖的索引號總是負數,並且也是連續的,起始值爲-1。一旦被創建,與之關聯的靜態貼圖可以通過調用setAnimatedTile(int, int)方法來改變。



單元格(Cells)

TiledLayer由相同大小的單元格組成;每行和每列的單元格數目在構造方法中指定,實際大小取決於貼圖的大小。



每個單元格的內容由貼圖索引號指定;一個正的貼圖索引號代表一個靜態貼圖,一個負的貼圖索引號代表一個動態貼圖。索引號爲0的貼圖表示該單元格爲空;爲空的單元格是完全透明的,並且不會被TiledLayer繪製任何內容。缺省的,所有單元格都包含索引號爲0的貼圖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章