【问题标题】:libGDX Add custom method to SpriteBatchlibGDX 向 SpriteBatch 添加自定义方法
【发布时间】:2023-03-11 22:30:01
【问题描述】:

我正在尝试将我自己的自定义 draw() 函数添加到 libGDX 中的 SpriteBatch 类,但 SpriteBatch 类是在 jar 文件中编译的。

我曾尝试创建自己的扩展 SpriteBatch 类的类,但我需要访问只能在类本身中访问的私有变量...

我假设我需要下载 libGDX 源,修改我需要的内容,然后重新编译,但是我在关注this tutorialthis question 时遇到了一些麻烦,除了在我的 Mac 上安装 Ant遵循这种方法(Mac 2011 年初)。

我应该如何修改和应用新的源代码?

【问题讨论】:

  • 想要扩展/覆盖 SpriteBatch 是一个很好的迹象,表明您可能正在尝试解决错误的问题。您要解决的实际问题是什么?
  • @Xoppa 我需要添加一个绘图函数,可以允许为每个顶点输入四种不同的颜色。 SpriteBatch 类可以做到这一点吗?或者我是否必须使用不同的方式来完全实现这一点?我认为您可以使用着色器来完成此操作,但我已经遵循了几个关于着色器的教程,但似乎无法全神贯注地做这件事。编辑:我忘了提到 this 链接,他在其中“向 SpriteBatch 添加了一个方法”。
  • 当然,您不必为此扩展 spritebatch。它具有允许您指定顶点的方法。更方便的是,sprite 类提供了对顶点的访问,因此您可以随意更改。

标签: java libgdx


【解决方案1】:

Stage.draw () 中包含的所有内容都可以使用 Stage 类中包含的公共 getter 进行检索。

从舞台:

public void draw () {
    Camera camera = viewport.getCamera();
    camera.update();

    if (!root.isVisible()) return;

    Batch batch = this.batch;
    if (batch != null) {
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        root.draw(batch, 1);
        batch.end();
    }

    if (debug) drawDebug();
}

可以写成:

public void draw () {
    Camera camera = stage.getCamera();
    Group root = stage.getRoot();
    Batch batch = stage.getBatch();
    camera.update();

    if (!root.isVisible()) return;

    if (batch != null) {
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        root.draw(batch, 1);
        batch.end();
    }

    if (root.getDebug()) super.drawDebug();
}

我在这里从臀部射击,我目前无法测试此代码。如果一切顺利,您应该能够编辑该绘制方法以满足您的需求。

【讨论】:

  • 如果您需要更多控制权,可以使用 Group.draw(batch,parentAlpha)Group.drawChildren(batch,parentAlpha) 方法执行相同的操作。
【解决方案2】:

最后,我只是简单的从here复制了整个SpriteBatch.java的源码,制作了自己的SprBatch.java(不能和SpriteBatch同名,否则运行时会报错)类使用复制的代码和修改,并在我的所有 draw() 调用中使用该类而不是 SpriteBatch。

因为我在 Batch 中添加了一个覆盖 draw() 的函数,并且 SpriteBatch 为绘制方法扩展了 Batch,所以我还需要创建一个复制的 Batch 类(在我的例子中是 SBatch)。并让 SprBatch 扩展 SBatch。

适用于我复制的 SpriteBatch 和 Batch 修改代码。

注意:当您向 SprBatch 添加需要 @Overidde 的函数时(例如 draw()),请务必将函数构造函数也添加到您复制的 Batch 类中。

最后,它在项目中的样子(Eclipse):

要使用它,就像 SpriteBatch 一样使用它...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多