使用单个矩形在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