在JavaFX中传递游戏逻辑?

时间:2016-06-19 13:42:30

标签: user-interface javafx scenebuilder

我目前正在用Java开发一个表格RPG游戏。我开发了游戏逻辑和连接(套接字/ RMI)。现在游戏可以使用CLI。我想用JavaFX和sceneBuilder实现GUI。我设计了所有场景并开始编写控制器。我的问题是:如何将游戏逻辑传递给GUI?

1 个答案:

答案 0 :(得分:0)

问题是概念性的,因此是概念性答案。

OO方法。只要模型(游戏逻辑)与视图(CLI / GUI)完全分离,它就不应该成为一个问题。假设您有某种Game / GameLogic类,您只需将其实例传递给相关控制器即可。你可能每个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();
}