2

我在 java 小程序中做两辆车之间的小比赛。只有两张图片以随机速度移动。我正在计算当前位置和终点线之间的距离,并且您应该能够看到上角的距离。

问题是我无法刷新文本字段,而是在旧数字之上应用了一个新图层,因此几乎无法阅读。这里有图片来证明我的问题。

我以为我可以通过在每个循环开始时创建蓝色矩形来解决它,但这似乎并没有解决它。

最初的

图 2

    public void action(){
    Random rand = new Random();
    boolean race = true;
    int x1 =500, y1 = 233;
    int x2 = 500, y2 = 333;
    int speed1 = rand.nextInt(15) + -16;
    int speed2 = rand.nextInt(15) + -16;
    int finishline = 30;
    Text winnerBlue = new Text("Winner: BLUE",new Font("SansSerif",Font.BOLD,20), Color.blue,Color.white);
    Text winnerRed = new Text("Winner: RED",new Font("SansSerif",Font.BOLD,20), Color.red,Color.white);
    //background
    Text text =null;
    Text text2 = null;
    window.fillRect(0, 0, 600, 400, Color.GREEN);
    //track 1
    window.fillRect(20, 330, 550, 39, Color.gray);
    //track2
    window.fillRect(20, 230, 550, 39, Color.gray);

    //Finish line
    window.fillRect(40, 210, 10, 180, Color.BLACK);



    while(race){

        text = new Text(Integer.toString(x1),new Font("Courier",Font.BOLD,20), Color.WHITE);
        text2 = new Text(Integer.toString(x2),new Font("SansSerif",Font.BOLD,20), Color.WHITE);
        window.fillRect(0, 0, 70, 50, Color.blue);
        window.fillRect(70, 0, 70, 50, Color.red);
        window.showImage(text, 0, 0);
        window.showImage(text2, 70, 0);

        window.showImage(car1.getImage(), x1, y1);
        window.showImage(car2.getImage(), x2, y2);

        car1.moveTo(x1 += speed1, y1);
        car2.moveTo(x2 += speed2, y2);
        window.pause(50);
        if(x1 <= (finishline ) ){
            speed1 = 0;
            speed2 = 0;
            window.showImage(winnerBlue, 200, 200);
            race = false;



            }
        if(x2 <= (finishline)){
            speed2 = 0;
            speed1 = 0;
            window.showImage(winnerRed, 200, 200);
            race = false;

        }

    }


}

}

4

1 回答 1

0

对于两个屏幕截图和提供的代码片段,很明显您不了解在 Swing/AWT 中绘制是如何工作的。

永远不要在方法之外维护对Graphics上下文的任何类型的引用paintXxx

这些paint方法执行了许多非常重要的步骤来准备Graphics绘画的上下文

首先看一下执行自定义绘画

于 2013-10-18T19:40:27.780 回答