【问题标题】:Seperate JavaFX GUI and Logic分离 JavaFX GUI 和逻辑
【发布时间】:2016-05-09 15:36:01
【问题描述】:

我正在创建一个游戏并考虑使用 JavaFx。我想要做的是从主类在GUI类中重复调用一个渲染方法(它包含所有javafx的东西开始,场景等),同时在主类中处理游戏逻辑(碰撞检测等) -班级。问题是我遇到了一堆错误,似乎他们希望 GUI 类成为应用程序的中心。所以我想知道我的方法是错误的吗?

【问题讨论】:

  • 你的方法是倒退的。 GUI 是应用程序的中心。创建一个对 JavaFX 一无所知的 GUI 模型。在 JavaFX GUI 中,读取模型以创建您的 GUI 组件,并在您的 GUI 控制器中更新模型。该模型对 GUI 一无所知。 GUI 必须知道模型。这样,您就可以使用具有不同 GUI 的相同模型。

标签: java javafx


【解决方案1】:

JavaFX 的主线程是“应用程序线程”,它执行 GUI 功能,这一点无法回避。

最好让您的“GUI 类”包含 JavaFX 需要的 startmain 方法,然后在创建 GUI 对象后,启动一个新线程来启动应用程序逻辑的入口点。即使由于某种原因您不想在应用启动时显示 GUI,您也可以在完成其他业务逻辑后调用为您执行 primaryStage.show() 的方法。

您仍然可以让您的应用程序逻辑每隔一段时间调用 GUI 的渲染方法,您甚至可以创建另一个线程,或者只使用一个计时器。不过,我不认为这是范式。在任何情况下,您都应该使用 Platform.runLater() 来更改您的 GUI,否则它最终会挂起。

【讨论】:

  • 好的,谢谢。顺便说一句,我想这样做的原因是封装并且能够随时更改框架,但我想这不适用于 javafx。
  • 你这是什么意思?这如何阻止您使用框架?这以什么方式去除封装?
  • 因为一切都基于 javafx“应用程序”而不是游戏逻辑。
  • “基于”只是概念性的。您真正需要做的是:您通常认为是main 方法的任何方法都变成Runnable 类的run 方法。当 GUI 为您的Runnable 启动线程时,就好像应用程序的入口点是游戏逻辑,但 GUI 恰好已经创建。即使您不想先创建 GUI,您仍然可以调用 GUI 类中的方法,这些方法可以动态构建 GUI,但您的游戏逻辑会定义它。那么,从概念上讲,该应用程序“基于”您的游戏逻辑,并附加了一个 GUI。
  • 一个有趣的观点,因为我发现即使是简单的 JavaFX 应用程序(当然不包括演示和测试)也需要多线程。我认为在 GUI 代码中包含业务逻辑不是一个好主意。在我看来,显示是一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多