2

我正在用 libgdx 做我的第一件事。那是一个平铺的 2D 游戏。假设我有两种类型的瓷砖:蓝色和绿色。这些是覆盖游戏场上一个单元格的 32x32 像素图像。我希望能够在瓷砖之间创建过渡,例如所附图像右侧的过渡。蓝色和绿色并不意味着平铺中的所有像素都是相同的颜色,它只是定义了一个像素来自什么纹理。

在此处输入图像描述

我不是在问算法——我已经通过 JavaScript 中的画布完成了它。我只需要一些关于在 libgdx 中专门使用哪些类/技术/解决方案的说明。

所以我需要从蓝色纹理中提取像素并将它们绘制在绿色纹理之上。有没有办法使用着色器或直接从蓝色瓷砖的纹理中获取像素值?

假设我已经将所有纹理(尚未计算过渡精灵)加载到TextureAtlas. 接下来应该上哪些课程才能获得预期的效果?

更新:这是我当前代码的粗略示例。我的 gameScreen.render() 方法看起来就像这样:

batch.begin();
for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
                Sprite sprite = getFloorSpriteByCell(cells[x][y]);
                batch.draw(sprite, x * 32, y * 32);
        }
}
batch.end();

getFloorSpriteByCell()我在一些预加载的精灵之间进行选择,仅此而已,没有花哨的 gui 中的花哨的关卡编辑。

我不使用瓷砖贴图,我只需要在渲染过程中在另一个纹理上方绘制纹理的一部分。

4

1 回答 1

1

Welp,我完成了它,它的外观如下:

无扩散:

在此处输入图像描述

有扩散:

在此处输入图像描述

我猜,代码本身太大且特定于项目,无法在此处发布。以下是步骤(来自 LibGDX 的实际类以大写字母开头的粗体显示):

  1. 选择您要扩散到的图像的单个像素并将它们放入Pixmap(如果您的纹理 像我一样在TextureAtlas中,请使用 GoogleCode上此问题中的PixmapTextureAtlas类来获取 Pixmaps)。
  2. 将这些像素图绘制到纹理
  3. 然后,像往常一样,将所有纹理绘制到SpriteBatch

希望这对某人有用。如果您需要实际代码,请与我联系。

于 2013-10-26T00:02:46.453 回答