java - 如何移动JPanel中图形的位置

标签 java swing jpanel

所以我正在使用 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/

相关文章:

java - 通过 SQL 查询在 JTree 中动态创建节点

java - 重新实例化 GUI (JFrame) 对象

java - Object对象如何返回String? ( java )

java - 如何将多个csv文件读入HashMap?

java - 共享首选项不起作用

java - JTree 中的桌面 View - Swing - 仅限 Windows

java - 添加改变颜色之间的过渡 Java

java - 针对这种情况进行验证或重新绘制?

java - 在一个 jframe 中的两个 jpanel 中使用两种绘制方法

java - Java 中的资源加载无法正常工作