【问题标题】:JRebel in game development (performance)游戏开发中的 JRebel(性能)
【发布时间】:2012-12-13 02:52:57
【问题描述】:

我正在用纯 Java 编写游戏(没有外部库)。在启用 JRebel 的情况下运行项目会降低性能并且帧速率低于 1 fps。

有没有什么方法可以使用 JRebel 进行游戏开发?例如,我可以在对代码进行一些更改后手动“运行”JRebel,这样它就不会减慢游戏速度,但我仍然可以在不重新启动应用程序的情况下看到更改?

我正在使用 Eclipse 和 Java 1.6,最新的 JRebel。我之前没有使用 JRevel 的经验,因此欢迎任何帮助。谢谢。

【问题讨论】:

  • 任何正常的调试环境都会对正在运行的代码库造成性能影响,更不用说 JRebel。你试图通过使用它来完成什么?您是否绝对需要让整个游戏处于运行状态,或者您可以一次运行其中的一部分吗?
  • 我正试图让动态改变游戏玩法成为可能。通过将所有内容放入设置文件中并在游戏运行时制作一个重新加载设置的按钮可能会更可行?我刚刚获得了 JRebel 许可证,如果我能用它实现类似的目标,我想试试。

标签: java performance jrebel


【解决方案1】:

这似乎不太适合 JRebel。目的是当您运行一个需要很长时间重新部署的应用程序时,例如一个复杂的 WAR,您可以即时重新加载类。重新启动游戏需要多长时间?

Web 应用程序在请求未发生时很少工作,因此您可以开发、重新加载、测试、开发……等等。即使在您编写代码时,您的游戏也可能正在执行工作,因此 JRebel 可能会在您键入时努力重新加载类,因为您的代码的每一帧都需要一个新的类定义。这是我的猜测。

【讨论】:

  • 你说得对,重启游戏不需要太多时间。但是,玩到特定地点或找到发生奇怪事情的地方可能需要更长的时间。然后我可以继续在那个有问题的地方玩,同时我尝试修复代码,而不必重新启动并重现这种情况。
  • 就像我说的,问题在于 JRebel 的设计目的是将代码热交换到没有持续工作的应用程序中。您的游戏循环不断地引用您的游戏类,每秒多次。这意味着每次在编辑和保存时更改文件,JRebel 都必须立即重新加载受影响的类。这在存在预期延迟量的 Web 应用程序中是可以接受的,但在这里不是很多。
  • 实际上,如果应用程序一直处于活动状态并不会真正阻止人们将 JRebel 用于此类应用程序。每当一个类被外部引用时,这些类就会重新加载,即从其他类调用一个公共方法。因此,您几乎可以在其中进行游戏玩法的 while 循环,如果工作流没有从循环中退出,那么您就无法真正更改它,除非调试器能够删除当前帧。 JRebel 为游戏开发者提供价值是棘手的,但仍有可能。只是取决于应用程序是如何实现的
  • 好的,谢谢,我开始明白这里发生了什么。是否有人能够确认是否可以让 JRebel 仅在被告知时才进行检查和热交换,这样它就不会一直消耗那么多资源?
  • 我无法评价 JRebel 在游戏开发方面的功效,但我过去曾亲自将它用于 Minecraft 模组。
猜你喜欢
  • 2014-03-06
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多