【问题标题】:JAVA How can I update an already drawn string?JAVA 如何更新已绘制的字符串?
【发布时间】:2020-06-14 02:18:02
【问题描述】:

我正在尝试重新绘制用于在我正在制作的小型 Java 游戏中记分的字符串,但我不确定如何在屏幕上更改字符串。如您所见,它最初是绘制的,我正在尝试在 ingame 的 if 语句中对其进行更新。

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

        g.setColor(Color.white);
        g.fillRect(0, 0, d.width, d.height);
        //g.fillOval(x,y,r,r);

        //Draw Player
        g.setColor(Color.red);
        g.fillRect(p.x, p.y, 20, 20);
        if(p.moveUp == true) {
            p.y -= p.speed;
        }
        moveObstacles();
        for (int i = 0; i < o.length; i++ ) {
            g.fillRect(o[i].x, o[i].y, 10, 5);
        }

        Font small = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics metr = this.getFontMetrics(small);
        g.setColor(Color.black);
        g.setFont(small);
        g.drawString(message, 10, d.height-60);
        g.drawString(message2, 10, d.height-80);

        if (ingame) {
            for (int i = 0; i < o.length; i++ ) {
                if ((o[i].x < p.x + 20 && o[i].x > p.x) && (o[i].y < p.y + 20 && o[i].y > p.y)) {
                    p.x = BOARD_WIDTH/2;
                    p.y = BOARD_HEIGHT - 60;
                    lives = lives - 1;
                    g.drawString(message, 10, d.height-60); 
                }
            }
            // g.drawImage(img,0,0,200,200 ,null);
        }
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }

【问题讨论】:

    标签: java swing graphics


    【解决方案1】:

    您创建了一个类似setMessage(…) 的方法。然后,此方法将“消息”保存为您的类中的属性。

    然后该方法将调用 repaint(),这将导致组件重新绘制自身。

    这就是所有 Swing 组件的工作方式。想想 JLabel 和 setText(...) 方法。

    还有:

    1. 自定义绘画是通过覆盖paintComponent()方法而不是paint()方法来完成的。

    2. 不需要 Toolkit sync() 方法。

    3. 您不应处置 Graphics 对象。

    【讨论】:

    • 成功了!再次将消息字符串保存在游戏中拉绳的正上方修复了它。
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多