Java游戲引擎 - Lgame 使用記
LGame (code.google.com/p/loon-simple)是一款國人開發的Java游戲引擎,有Android及PC(J2SE)兩個開發版本,其實WindowsPhone C#版也很快就要出來了。說一下它的優缺點吧。優點是結構清晰,容易理解和上手,具有PC版和手機版,方便開發。特別是android版有兼容j2me的庫,可以快速移植以前的j2me游戲。不足之處是LGame知名度不高,基本上是原作者在開發,還是有不少的bug的,另外效率上可能也不是很高。有簡單的文檔和幾個示例,但對api的說明沒有。
下面是幾個使用過程中的經驗:
1.LGame 內部對圖像資源的管理應該有緩存,因此如果幾個Sprite使用同一個Animation時,如果其中一個sprite設置為顯示了某一幀圖像,所有使用該animation的sprite都會顯示這一幀圖像。可行的辦法是將該animation復制多個給sprite使用。
如:
Animation ani = Animation.getDefaultAnimation("assets/ani.png", 2, 80, 80, 100);
Sprite s1 = new Sprite((Animation)ani.clone());
Sprite s2 = new Sprite((Animation)ani.clone());
2.使用Screen時,由LGame框架來管理界面的繪制和刷新,一般只要在onLoad()函數中加入所需要的組件就可以了。
如果想自己管理界面的繪制和刷新,可以使用CanvasScreen,重載void paint(LGraphics g)函數進行界面的繪制。創建一個線程,在線程中調用repaint()函數進行刷新。在paint中希望繪制LGame自帶的組件,可以調用組件的 createUI(LGraphic g)方法。
但某些組件如LMessage沒有createUI方法怎么辦呢?(LMessage中有一個createCustomUI方法,但是protected)
可以自己建一個類,繼承LMessage,并重載void createUI(LGraphics g)。
public class MyMessage extends LMessage
{
public MyMessage(LImage imgMsgBg, int x, int y)
{
super(imgMsgBg, x, y);
}
public MyMessage(String str, int x, int y, int width, int height)
{
super(x, y, width, height);
this.setMessage(str);
}
public void createUI(LGraphics g)
{
super.createUI(g);
createCustomUI(g, 0, 0, 0, 0);
}
}
3.切換screen
對于游戲各界面的切換,應該有兩種方法。一種方法是一個activity對應多個view,在LGame可以使用setScreen(Screen screen)來實現;另一個是多個activity,每個activit對應一個view,通過切換activity來切換畫面。LGame的作者是建議使用第一種方法,因為多個activity比較耗系統資源。
但在我的應用中發現,在第一種方法中需要每次都new一個screen出來才可以。
if (screen == null)
{
screen = new Screen();
this.setScreen(screen);
}
else
{
this.setScreen(screen);
}
需要換成這樣才可以:
this.setScreen(new Screen());
如果采用第二種方法,則某些組件的觸摸消息不響應,原因不明。