2016-06-19 115 views
0

我目前正在用Java開發一個表格RPG遊戲。我開發了遊戲邏輯和連接(套接字/ RMI)。現在該遊戲可以與CLI一起工作。我想用JavaFX和sceneBuilder實現GUI。我設計了所有場景並開始編寫控制器。我的問題是:我如何將我的遊戲邏輯傳遞給GUI?在JavaFX中傳遞遊戲邏輯?

回答

0

這個問題是相當概念化的,因此是概念上的答案。

OO方法。只要模型(遊戲邏輯)與視圖(CLI/GUI)很好​​地分開,它就不是什麼大問題。假設你有某種類的類,你需要的只是將它的實例傳遞給相關的控制器。你大概每個FXML視圖都有一個控制器。在加載場景時,可以使用setControllerFactory通知FXMLLoader有關如何創建控制器的信息。有了這種認識一點,你可以嘗試以下操作:

MainGameController(Game game) { 
    this.game = game; // now your controller has an instance of your game logic 
} 

然後,在加載(在Application子類有此可能)你的看法:

FXMLLoader loader = ... 
Game game = ... 

loader.setControllerFactory(t -> new MainGameController(game)); 

如果你的遊戲邏輯被分成幾個部件和每個都可以有自己的視圖,只需採用與您的控制器相同的實例。

務實的方法。假設你不想在幕後進行大量的佈線。在這種情況下,你可以在整個遊戲中創建一個單一的訪問點,本質上類似於Singleton模式。如果您的遊戲在遊戲邏輯之上還有其他服務,例如AudioPlayerAssetLoader,這種方法實際上可能更有益。

class GameApplication { 

    static Game game; // + getters/setters 
    static AudioPlayer audioPlayer; 
    ... 
} 

然後在您MainGameController(或任何其他):

// called automatically by FXMLLoader 
public void initialize() { 
    this.game = GameApplication.getGame(); 
}