0

我正在创建一个小游戏,您可以在其中围绕 27*27 网格移动块。

网格的每个正方形为 16*16 像素。

我使用 awt Graphics 中的“drawLine”函数创建了网格。我创建了许多行来创建跨越 JFrame 窗口/画布的网格。我需要将网格中的每个正方形分配给某种坐标。

例如,如果您曾经研究过 Minecraft 纹理和/或制作过纹理包,您就会注意到 icons.png 或 texture.png。它是一个 256*256 的 16*16 方格,每个方格上都有一个图像。当 Notch(或现在的 Jens)需要将图片中的图像引用到代码中时。他基本上认为:

“哦,我需要从icons.png中的坐标(1, 3)找到图像。”

1 代表 16*16 的正方形,即第一个水平块右侧的 1 个正方形。而 3 代表 16*16 的正方形,即垂直向下 3 个正方形。

这张图表中的点代表我在说什么。右一格,下三格。

|1|2|3|4|5|6|

|2|3|4|5|6|7|

|3|•|5|6|7|8|

看,如何不尝试计算有多少 16 像素,而是让每个“1”坐标具有与 16 像素相同的值。

(1, 3) 16*16 的正方形必须是 (16, 48) 以像素为单位。

哦,天哪,我不善于解释事情。


这基本上是我为创建图表所做的一切。

    for (int i = 16; i <= 432; i += 16){

        /* Vertical Chart Lines: */ g.drawLine(i, 0, i, HEIGHT*2);
        /* Horizontal Chart Lines: */ g.drawLine(0, i, WIDTH*2, i);

    }

我正在使用 Java Canvas,并将首选尺寸设置为 HEIGHT*2/WIDTH*2。

HEIGHT*2 或 WIDTH*2 仅表示窗口/或画布末端的基于像素的坐标。

我需要做什么来分配这些新坐标?我必须制作一个新图表吗?

哦,请帮忙。

4

1 回答 1

0

首先围绕 27*27 尺寸和 16 倍缩放因子组织所有内容。

因此,将您的代码更改为:

const int scale = 16;
for (int i = 0; i < 27; i++){

    /* Vertical Chart Lines: */ g.drawLine(scale*i, 0, scale*i, HEIGHT*2);
    /* Horizontal Chart Lines: */ g.drawLine(0, scale*i, WIDTH*2, scale*i);

}

而且,要将“图表”坐标转换为“像素”坐标,只需执行以下操作:

int row = getRow(...); /* your code here */
int col = getCol(...); /* your code here */
int x = col * 16;
int y = row * 16;

希望有帮助。

于 2013-03-23T22:30:13.847 回答