JFrame中的Java背景图像无法立即显示

时间:2019-04-25 01:10:50

标签: java graphics jframe paint

最近几天我一直在遇到问题....所以我正在用GUI编写一个小游戏,但是我的问题是启动程序时背景图像无法立即显示。因此,这里有一个向我展示问题的youtube视频的链接:https://www.youtube.com/watch?v=v420OErObLI

我认为问题可能是多次调用了paint方法,并且由于某种原因未显示图像。在下面的代码中,您可以找到paint方法,如果有人可以帮助我::

public void paint(Graphics g)
    {
    super.paint(g);
    this.paintBG(g);

    if (this.paintPlayer && bgDrawn)
        {
        // Spieler versuchen zu zeichnen auf startpositionen
        spielfeld.setPlayerListToFront();
        spielfeld.setEnemyPlayer1ListToFront();
        spielfeld.setEnemyPlayer2ListToFront();
        spielfeld.setEnemyPlayer3ListToFront();
        while (spielfeld.playerHasAccess()
            && spielfeld.gegenspieler1HasAccess()
            && spielfeld.gegenspieler2HasAccess()
            && spielfeld.gegenspieler3HasAccess())
            {
            this.paintPosition(spielfeld.getOwnPlayer().getCurrentX(), spielfeld.getOwnPlayer().getCurrentY(), g);
            this.paintPosition(spielfeld.getGegenspieler1().getCurrentX(), spielfeld.getGegenspieler1().getCurrentY(), g);
            this.paintPosition(spielfeld.getGegenspieler2().getCurrentX(), spielfeld.getGegenspieler2().getCurrentY(), g);
            this.paintPosition(spielfeld.getGegenspieler3().getCurrentX(), spielfeld.getGegenspieler3().getCurrentY(), g);

            spielfeld.nextPlayer();
            spielfeld.nextEnemyPlayer1();
            spielfeld.nextEnemyPlayer2();
            spielfeld.nextEnemyPlayer3();
            }

        // Spieler versuchen zu zeichnen auf normalen positionen
        for (int i = 0; i < spielfeld.getSpielfeldSize()-1; i++)
            {
            this.paintPosition(spielfeld.getCurrentSlot(i).getX(), spielfeld.getCurrentSlot(i).getY(), spielfeld.getCurrentSlot(i).getColor(), g);
            this.paintPosition(spielfeld.getCurrentSlot(i+1).getX(), spielfeld.getCurrentSlot(i+1).getY(), red, g);

            try
                {
                Thread.sleep(animationSpeed);
                }
            catch (Exception e)
                {
                errorMessage = e.getMessage();
                }
            }
        this.paintPosition(spielfeld.getCurrentSlot(spielfeld.getSpielfeldSize()-1).getX(), spielfeld.getCurrentSlot(spielfeld.getSpielfeldSize()-1).getY(), spielfeld.getCurrentSlot(spielfeld.getSpielfeldSize()-1).getColor(), g);
        this.paintPlayer = false;
        }
    }

public void paintPosition(int x, int y, Color c, Graphics g)
    {
    g.setColor(c);
    g.fillOval(x, y, spielfeld.getSlotWidth(), spielfeld.getSlotHeight());
    }

public void paintBG(Graphics g)
    {
    // Spielfeld laden
    g.drawImage(Toolkit.getDefaultToolkit().getImage("img/background.png"), 0, 0, this);
    bgDrawn = true;
    }

0 个答案:

没有答案