【问题标题】:Mate libGDX and Jetbrains MPS配合 libGDX 和 Jetbrains MPS
【发布时间】:2016-01-31 21:10:45
【问题描述】:

我也在LibGDX forums上发布了这个问题。

你好!对于我的论文,我正在编写一个 DSL 来描述图片的外观。这些图片将由 libGDX 根据 DSL-Input 绘制。 到目前为止,jetbrains MPS (v. 3.0) 和最新的 libGDX 版本正在使用中。我的实际问题是:如何设计我的 MPS 语言和 java-libGDX-picture-generator 之间的互连。

Jetbrains MPS 没有广泛传播,但我敢肯定,我的问题可以在不知情的情况下解决。 在 DSL 中,生成器旨在构建一个可以执行的类(public static void main)。这里有几个方法调用来开始图片生成。把它想象成 generatePicture(200px, 150px, "blue") (它要复杂得多,但我认为这对我的问题并不重要)。

在 libGDX 中,我有几个启动器(尤其是 DesktopLauncher),这些是程序的主要类,即已启动的那些。目前,启动器启动另一个类(我将其命名为“Main”),这里是方法调用。 libGDX 程序是通过 jar artifact 插入到 MPS 中的,所以它的方法可以在我的 DSL 中使用。

什么是让我的 DSL 代码启动我的 libGDX 程序的好解决方案? 我必须进行所有这些方法调用并启动启动器。我考虑了一个额外的类来初始化启动器并进行调用,或者尝试将来自 DSL 的调用插入到 jar 类中。 是否有任何类似的问题或遇到这个问题的人?我确信我会以某种方式让它发挥作用,但我对一个好的和顺利的解决方案很感兴趣。

编辑 问题是我确定我需要 DesktopLauncher 及其配置来在我的 PictureGenerator 中运行 libGDX 内容。

编辑 2 - 第一种方法 这又与 MPS 相关。我曾考虑使用 MPS 生成器生成 Picture 类,但运行 Launcher 类。 这有可能吗?要从解决方案运行一个类,它需要实现 IMainClass,但 Launcher 不能。启动器看起来总是一样的。除了生成的类之外,是否有运行另一个类的功能?

或者在 libGDX-site 上:是否可以合并启动器和图片类以插入配置?

【问题讨论】:

  • 您是否研究过新的 LibGDX LWJGL 3 后端?它允许您一次维护几个窗口,每个窗口都有自己的渲染循环。
  • 您是在生成使用 libGDX 的 java 代码,还是要将 libGDX 嵌入为一种可视化?从你的问题中我不太确定你有什么样的用例。
  • 我正在生成使用 libGDX 项目(通过 jar 文件包含)的 java 代码。 @JustACluelessNewbie 我认为 LWJGL 3 仍然让我使用启动器来开始我的 Main/Game 课程。

标签: java libgdx mps


【解决方案1】:

查看robot_Kaja 示例(在MPSSamples.3.3\robot_Kaja 中)。 Script 概念实现了IMainClass 接口,这使得运行这个概念的实例成为可能。您可以右键单击jetbrains.mps.samples.Kaja.sandbox 解决方案中的任何脚本,您将在弹出菜单中看到一个运行选项。单击它将运行此脚本的生成代码。

在您的情况下,您可能还有一些类似于 Script 的顶级概念,它生成到 Java (baseLanguage) Main 类中。只需让这个概念实现IMainClass,就可以直接从 MPS 运行它。

【讨论】:

  • 这是完美运行的部分。问题是包含 libGDX 结构。它的主类将是(通常)不接受参数的(桌面)启动器。这里更像是一个 libGDX,而不是一个 mps 问题。对不起,如果我的问题太混乱了。
  • “包含 libGDX 结构”是什么意思?您能否逐步描述您的理想解决方案是什么样的以及现在缺少什么?
  • 我编辑了我的问题。让我不确定的是 libGDX 的正确上下文。
【解决方案2】:

好的,按照我第二次编辑的想法,我做到了。

  • MPS 中生成一个文件
  • 生成的文件可以执行
  • 使用了 libgdx jar 文件

在 MPS 中,我使用内部类生成以下类

public class DesktopLauncher {
  public static void main(string[] args) {
    LwjglApplicationConfiguration config = new LwgjlApplicationConfiguration();
    new LwjglApplication(new Picture(), config);
  }

  public static class Picture extends ApplicationAdapter {
    public Picture(){}
    PictureGeneratorImpl generator;

    public void create() {
      generator = new PictureGeneratorImpl();
    }

    public void render() {
      generator.generatePicture();
      generator.exit();
    }

    public void dispose() {
      generator.dispose();
    }
  }
}

作为附加信息:我的 libgdx jar 包含整个项目(包括核心和桌面)。 我希望这可以帮助任何想将 MPS 和 libGDX 结合起来的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2019-01-15
    • 2019-01-16
    相关资源
    最近更新 更多