在Swing中绘画:绘制一个组件一次,同时不断刷新另一个组件

时间:2018-04-13 05:55:25

标签: java swing awt

抱歉,如果我的标题措辞奇怪。我想不出另一种方式。这是我的代码,然后我会尝试解释我的问题。

    Image dbImage;
    public static Graphics dbg;
    public boolean hasDone = true;

    @Override
    public void paint(Graphics g) {
        int xDrawPos = 0;
        int yDrawPos = 32;

        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, xPos, yPos, 364, 488, null);
        if(hasDone) {
            for(int i = 0; i < 25; i ++) {
                for(int x = 0; x < 25; x ++) {
                    g.drawImage(map.getSpritesheet().grabSprite(0, 0, 16, 16), xDrawPos, yDrawPos, 128, 128, null);
                    xDrawPos = xDrawPos + 128;
                }
                yDrawPos = yDrawPos + 128;
                System.out.println(yDrawPos);
            }
            hasDone = true;
        }
    }

这是我的绘画方法。我正在尝试制作2D游戏。此方法调用paintComponent调用repaint(),因此它是一个无限循环。这就是问题:dbImage是我的玩家,需要在移动时不断重新绘制。但是,我也试图在这两个for循环中绘制一个tilemap,但不断重新绘制所有的tile会导致巨大的延迟。我尝试使用布尔值只绘制一次,但随后在下一次重绘()中擦除它们。我需要以某种方式绘制我的瓷砖一次,仍然能够更新我的播放器,但我无法弄明白。

非常感谢任何帮助。

0 个答案:

没有答案