使用单个矩形在java中渲染等轴测贴图

使用单个矩形在java中渲染等轴测贴图,java,arrays,map,isometric,Java,Arrays,Map,Isometric,我已经研究了大约一个小时了,我似乎无法绘制等距图。我想达到这样的目标。 但是我越来越紧张了。我将地图存储为一维数组中的分幅,如下所示: private final int width, height; private final int tileWidth, length; private int[] tiles; public Level(int width, int height) { this.width = width; this

我已经研究了大约一个小时了,我似乎无法绘制等距图。我想达到这样的目标。 但是我越来越紧张了。我将地图存储为一维数组中的分幅,如下所示:

private final int width, height;
    private final int tileWidth, length;
    private int[] tiles;

    public Level(int width, int height) {
        this.width = width;
        this.height = height;
        tiles = new int[width * height];
        tileWidth = 68;
        length = 48;
    }
我通过10,10作为宽度和高度的参数。我这样渲染地图:

public void render(Graphics g) {
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                g.setColor(Color.red);
                if (x % 2 == 0)
                    g.drawRect(x * tileWidth, y * length / 2, tileWidth, length);
                else
                    g.fillRect((x * tileWidth) + (tileWidth / 2), (y * length / 2), width, length);
            }
        }
    }
public void渲染(图形g){
对于(int x=0;x

任何帮助都将不胜感激,我一直想学习制作等距游戏,但有一段时间一直坚持使用平面2D。

对于瓷砖,您可以使用:

您可能还需要设置剪切锚定点:

double sa_x = 100, sa_y = 100; // or whatever
AffineTransform at = new AffineTransform();

// S3: Move back to original origin
at.translate(sa_x, sa_y);

// S2: Shear
at.shear(1, 0);

// S1: Set origin
at.translate(-sa_x, -sa_y);

您可以改变剪切系数
1
以获得不同的剪切量。

您需要以等轴测角度绘制直线,而不是绘制矩形

等轴测几何图形中的角度分别为30度、90度、150度、210度和270度(弧度:pi/6、pi/2、5pi/6、7pi/6、3pi/2、11pi/6)

cos(pi/6)是sqrt(3)/2或0.866。。。sin(pi/6)为1/2或0.5。(这是有意义的,因为)

这意味着,如果要从x1,y1开始以D像素长的角度pi/6绘制一条线:

x2 = x1+cos(pi/6)*D e.g. x1+D*sqrt(3)/2
y2 = y1+sin(pi/6)*D e.g. y1+D/2
从x1,y1到x2,y2绘制

所有其他角度要么是这个的反射(一个维度或两个维度都是负的),要么是笔直的上下(绘制起来很简单)

在屏幕上计算<强> > < /强>绘制等距物体,考虑等距几何有三个维度:x,y,z。z的移动只会让你画得更高或更低。按X或Y移动将使您在一个等轴测角度方向或另一个等轴测角度方向上移动,移动的X和Y与在该方向上绘制一条瓷砖线的距离相同(因此与上述公式类似)

x2 = x1+cos(pi/6)*D e.g. x1+D*sqrt(3)/2
y2 = y1+sin(pi/6)*D e.g. y1+D/2