使用標籤(或通常的GUI組件)來快速表示動畫,動態創建/移動的對象是不實際的。就像使用汽車從客廳開車到廚房一樣。
Swing組件帶有很多很好的功能,例如,他們可以確定他們需要的空間,佈局經理可以使用它自動將它們很好地放置。不幸的是,對於一款遊戲,你不需要所有的好東西,也不需要支付與之相關的處理開銷。通過擺動多平臺功能使問題變得更加複雜,其要求每個組件具有對等組件(對等組件處理將組件呈現爲活動外觀)。
要解決這個問題,您不會將單個遊戲對象表示爲揮杆組件。相反,你使用一個單獨的swing組件(通常是JPanel)作爲畫布來繪製你的遊戲對象。您只需定期爲該JPanel調用repaint()(例如,每秒30或60次)。當然,你會覆蓋JPanel上的paintComponent()來使用你自己的代碼來繪製所有的遊戲對象。
編輯:概述你怎麼做你自己的渲染
您需要決定如何組織你的遊戲相關的對象。一個很簡單的骨架看起來是這樣的(省略getter/setter方法):
public class GameObject {
public int x;
public int y;
public Image image;
}
在實踐中,這種類將有更多的成員(如控制對象如何動作行爲,併爲動畫也許有些州/計數器) 。對於每種可能的行爲(如船,小行星和子彈),它也可以是具體的子類的抽象。 GameObject的所有實例都在某種集合中進行管理,我假設您使用了一個List。
當實現在列表中把它歸結爲只是環路的paintComponent和渲染每個物體的圖像:
public void paintComponent(Graphics g) {
List<GameObject> list = ... // however you obtain it in your game
for (GameObject gobject : list) {
g.drawImage(gobject.image, gobject.x, gobject.y, (ImageObserver) null);
}
}
更復雜的遊戲,可以責令gameobjects獲得的遊戲對象如何相互重疊的控制。但原則上它非常簡單。
有關信息,我有一個代表船舶,子彈和小行星的標籤,我將它們添加到我的面板並將它們移除,因爲它們被用於拍攝或耗盡生命。使用add(component);並刪除(對手);然後我添加我重新驗證。 – Elton 2013-02-16 10:30:56