gpt4 book ai didi

java - 根据新屏幕尺寸重新计算 X 和 Y 坐标

转载 作者:行者123 更新时间:2023-12-02 03:38:28 26 4
gpt4 key购买 nike

我正在尝试显示我拥有的数组中的图 block ,以便它们在绘制在一起时始终填充屏幕的大小。我现在忽略宽高比。

这是我的代码的工作原理。我将图 block 对象传递给图 block 集(用于管理图 block 对象数组的类),然后迭代图 block 集数组,返回每个图 block 对象 ID 并根据所述 ID 渲染图 block 集图像的子图像。

这是我的 mapUpdate 方法,每个 JFrame 调整大小事件都会调用该方法:

public synchronized void mapUpdate(Screen screen) {
factorX = (float)(screen.getWidth() / scW);
factorY = (float)(screen.getHeight() / scH);

for (int i = 0; i < tileset.getRows(); i++) {
for (int j = 0; j < tileset.getCols(); j++) {
int x = tileset.getTile(i, j).getX();
int y = tileset.getTile(i, j).getY();
tileset.getTile(i, j).setX((int)(x * factorX));
tileset.getTile(i, j).setY((int)(y * factorY));
}
}

mapTiles.clear();

for (int i = 0; i * 70 < mapImage.getWidth(); i++) {
mapTiles.add(mapImage.getSubimage(70 * i, 0, 70, 70).getScaledInstance(screen.getWidth() / 10, screen.getHeight() / 10, Image.SCALE_SMOOTH));
}
}

mapTiles 是一个图像数组列表,在每次调整大小事件时,它都会重置数组列表,将子图像缩放到宽度和高度的 1/10,然后重新添加新大小的图像以供我拉出进行渲染(图 block 集图像只有 3 个图 block ,原始尺寸为 70x70)。

如果您好奇的话,这里是 componentResized 方法:

public void componentResized(ComponentEvent e) {
canvas.setSize(app.getContentPane().getWidth(), app.getContentPane().getHeight());
if (level1 != null) {
level1.mapUpdate(this);
}
}

正如您在我的 mapUpdate 方法中看到的,我尝试获取一个 float 来将每个当前的 x 和 y 值相乘以接收新的正确值(它将对整数进行四舍五入),但这根本不起作用。

是否有任何解决方案可以轻松地重新计算我的 X 和 Y 坐标,以便正确绘制图 block ?

最佳答案

你的factorX不应该是一个 float 。它应该是一个 int。如果您使用 float ,则会进行舍入,因此偶尔会因为舍入而在图 block 之间产生像素间隙。如果你只使用 int 那么你不必担心这个。那么位置就是因子 * for 循环的索引值。

另一方面,最简单的解决方案是仅使用带有 GridLayout 的 JPanel。然后您可以添加带有图像图标的 JLabel。 GridLayout 将平均调整每个组件的大小。

然后您甚至可以使用 Stretch Icon并且图像将随着框架大小的调整而动态调整。

关于java - 根据新屏幕尺寸重新计算 X 和 Y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com