[英]JFrame/JPanel drawing from other class
我正在用java開發一個簡單的游戲。 雖然這可能是一個愚蠢的問題,但我確實需要一些幫助。 我的游戲將具有多個級別。 我希望能夠從新的類文件中加載每個級別以使其更易於管理。 如果這不是一個穩定的解決方案,請告訴。
現在我的問題是這個。 如果我的 JPanel 在類文件 A 中,我如何從類文件 B 中繪制它? 想象一下類文件 B 是我的級別,所以我會有類文件 C、D、E 等等,所有不同的級別我都希望能夠繪制到類文件 A 中,該類文件包含我的 JPanel。 我怎樣才能做到這一點?
兩種可能的解決方案是:
將類文件傳遞給JPanel
,例如:
JPanel j = new JPanel();
Level l1 = new Level(1);
Level l2 = new Level(2);
j.initlevel(l1);
//wait until level 1 is done
j.initlevel(l2);
並讓 initlevel 進行加載:
public void initlevel(Level l){
// for all level parts, load them into "this"
}
或者您可以公開JPanel
某些屬性,並將其傳遞給級別:
JPanel j = new JPanel();
new Level(1, j);
//wait until level 1 is done
new Level(2, j);
並制作 Level 的構造函數:
public Level(int level, JPanel j){
//for all level parts load them into "j"
}
請注意,這是一個非常基本的結構,如果您的游戲變得更加復雜,您可能需要考慮閱讀模型-視圖-控制器模式。
理想的設計使 UI 繪圖遠離游戲邏輯,因此您走在正確的軌道上。 一個這樣的解決方案的一個例子可能是一個類,它組成了一個 JPanel,當級別改變時它會得到通知。 例如
public class LevelViewController implements LevelChangedListener {
private JPanel viewPane;
public LevelViewController(JPanel viewPane) {
this.viewPane = viewPane;
}
public void levelChanged(Level level) {
// Update JPanel with logic now the level has changed
...
}
}
public interface LevelChangedListener {
void levelChanged(Level level);
}
無論知道玩家要進入下一個級別,然后都需要通知它的 LevelChangedListeners 集合(您的 LevelViewController 就是其中之一),這將依次更新您的 JPanel。 如果您希望在關卡更改后更新其他內容,那么您也可以掛鈎其他 LevelChangedListeners。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.