2016-06-19 71 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(); 
}