我绘制了等轴测图。

我将移动精灵的当前位置和移动后精灵应该位于的目标位置:

    // region is my TextureRegion.
    int x1 = getIsometricX(1,1,region);
    int x2 = getIsometricX(1,2,region);

    int y1= getIsometricY(1,1,region);
    int y2 = getIsometricY(1,2,region);


然后,我使用ShapeRenderer绘制一条简单的线,以查看是否正确设置了本地/目标点,并绘制了矩形,以便可以看到精灵渲染的开始位置。

    renderer.setProjectionMatrix(camera.combined);
    renderer.begin(ShapeRenderer.ShapeType.Line);
    renderer.setColor(Color.RED);
    renderer.line(x1 + location.getOffsetx(), y1 + location.getOffsety(), x2 + location.getOffsetx(), y2 + location.getOffsety());
    renderer.rect(x1 + location.getOffsetx(), y1 + location.getOffsety(), region.getRegionWidth(), region.getRegionHeight());
    renderer.end();


我的每个子画面都设置了offsetX和offsetY以调整其在等轴测图瓷砖上的位置,因为每个子画面都是不同的。

输出看起来像这样:



您在此处看到的是精灵开始绘制的起点(您会看到偏移量对其进行了调整,因此,精灵看起来就像在1,1磁贴上一样。

您会看到一条线,该线从子图形的起始绘制点开始,到子图形的目标绘制点结束。

现在我的问题是,我怎样才能让精灵在那条线的路径上移动,这样看来船就在向前移动?

因此,问题的主要概念是:如何使子画面从本地点到目标点沿直线移动?

您可能需要查看一些功能:

public int getIsometricX(int x, int y, TextureRegion region) {
    return (x * GameTile.TILE_WIDTH / 2) - (y * GameTile.TILE_WIDTH / 2) - (region.getRegionWidth() / 2);
}

public int getIsometricY(int x, int y, TextureRegion region) {
    return (x * GameTile.TILE_HEIGHT / 2) + (y * GameTile.TILE_HEIGHT / 2) - (region.getRegionHeight() / 2);
}


使用相同的方法绘制图块,只是使用图块的纹理。

最佳答案

我想回答自己这个问题,因为其他人可能也有同样的问题,只是像我一样使问题变得过于复杂。

如果要在等轴测图上执行任何移动,请不要遵循我的误解并在等轴测坐标上进行计算。

您必须在平面屏幕矩阵坐标上进行计算,然后将其转换为等轴测坐标。

例如,我想像这条线一样向上移动,我需要做的就是:

ship.y += 0.1f // when it reaches 1, then it will be at 0, 1


因此,您知道您想在非等轴测图上位于0,1处。

因此,您需要执行此增量,最后,在绘制之前必须将其转换为等距坐标:

float x = (ship.x * GameTile.TILE_WIDTH / 2) - (ship.y * GameTile.TILE_WIDTH / 2) - (textyure.getWidth() / 2);

float y = (ship.x * GameTile.TILE_HEIGHT / 2) + (ship.y * GameTile.TILE_HEIGHT / 2) - (texture.getHeight() / 2);


这将在等轴测图上绘制它,就像在屏幕坐标上一样,但是以等轴测图格式。

关于java - LibGdx-使 Sprite 遵循行路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45776424/

10-12 00:32