所以我正在使用 Javax.swing 库为我的大学类(class)创建一个游戏。 我已经创建了一个窗口,并且已经成功编写了代码来按程序生成游戏 map 。
但是,我无法更改 map 的焦点。我的意思是 map 总是卡在屏幕的一个角落。 (即:位置设置为 0,0,因此图形 g( map )被放置在向外的该位置。)
我希望能够移动“相机”,以便玩家可以查看 map 的不同区域。
下面我已经粘贴了将 map 绘制到屏幕上的方法。谁能告诉我如何让相机在运行时移动。又名:向左或向右移动 map 。
我想到有一个 Graphics 对象来保存 map ,然后我只绘制该 Graphics 对象的子图像,但考虑到如何每帧重新绘制 map (出于动画目的),这意味着我将有更多图形需要重绘。 map 大小为 6,400 * 6,400 像素
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
try {
for(int x = 0; x < OverworldMap.MAP_X_SIZE; x++){
for(int y = 0; y < OverworldMap.MAP_Y_SIZE; y++){
for(int layer = 0; layer < OverworldMap.MAP_LAYER_SIZE; layer++) {
g.drawImage(OverworldMap.getTileAt(x, y, layer).getSprite(), x * SPRITE_SIZE, y * SPRITE_SIZE, null);
}
}
}
} catch (Exception e) {
LauncherClass.printErrorLog(e);
}
}
最佳答案
解决这个问题的最好/最简单的方法是在 JPanel 周围放置一个 JScrollPane,并使 JPanel 的大小与图像的大小相同。您不必担心只重新绘制图像的正确部分 - Java 非常聪明,只绘制屏幕上的部分。请注意,您可以显示或隐藏 ScrollBar,但如果隐藏它们,则需要添加逻辑以通过其他机制激活滚动
关于java - 如何移动JPanel中图形的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138759/