删除并重绘Java小程序中的图像

时间:2015-08-31 14:20:41

标签: java image applet drawimage

在我真正回答我的问题之前,请允许我说我不是Java applet的粉丝,这是一个项目。我知道有更好的方法可以做我想做的事。

无论如何,这个问题。

我正在创建一个乌龟和野兔种族,其中生成一到十到一个的随机数。然后该数字将用于确定乌龟或野兔移动的空间数量(即如果随机数为2,那么野兔将移动1平方)。我必须展示野兔和乌龟的移动,但我正在使用的代码不会将图片移动到任何地方,只是保持静止。

这是我的代码:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

    public class experiment extends Applet {


Image tortoise, hare; //create the images
final int tortoiseYPos = 50, hareYPos = 400, square = 20, end = 1256; //create x positions and y positions
int tortoiseXPos = 180, hareXPos = 180;
public void init()
{
    tortoise = getImage(getDocumentBase(), "picresources/tortoise.jpg"); //get the images for the objects
    hare = getImage(getDocumentBase(), "picresources/hare.jpg");

   }

public void paint(Graphics field)
{

    drawField(field); //draw the field

}

public void drawField(Graphics field)
{

    Font f  = new Font("Times New Roman", Font.BOLD, 48);
    field.setFont(f);
    field.drawString("Tortoise", 0, 75);
    field.drawString("Hare", 0, 425);

    //fill alternating black and white rectangles       
    field.setColor(Color.black);
    int x = 180;
    for(int i = 0; i < 50; i++)
    {
        field.fillRect(x, 50, square, 50);
        field.fillRect(x, 400, square, 50);
        x += (square);
    } 


    field.drawImage(tortoise, 180, tortoiseYPos, this);       
    field.drawImage(hare, 180, hareYPos, this);
}

public void drawMoves (Graphics g) {
    while(tortoiseXPos < end && hareXPos < end)
    {
        int move = (int)(Math.random() * 10);
        tortoiseMoves(move);
        delay();
        delay();
        delay();
        hareMoves(move);
        delay();
        delay();
        delay();
        clearCurrent(g);
        delay();
        g.drawImage(tortoise, tortoiseXPos, tortoiseYPos, this);
        g.drawImage(hare, hareXPos, hareYPos, this);

    }
}

public void tortoiseMoves(int move)
{ //Moves for Tortoise, 180 is start, 1200 is finish
    if(move <= 5)
    {
        tortoiseXPos += (3 * square);

    }
    else if(move <= 8)
    {
        tortoiseXPos += square;

    }
    else if(move <= 10)
    {
        tortoiseXPos -= (6 * square);

    }

    if(tortoiseXPos < 180)
    {
        tortoiseXPos = 180;

    }

    if(tortoiseXPos > end)
    {
        tortoiseXPos = end;

    }

}

public void hareMoves(int move)
{ //Moves for Hare, 180 is start, 1200 is finish
    if(move <= 2)
    {
        hareXPos += (9 * square);

    }
    else if(move <= 5)
    {
        hareXPos += (square);

    }
    else if(move <= 6)
    {
        hareXPos -= (12 * square);

    }
    else if(move <= 8)
    {
        hareXPos -= (2 * square);

    }
    else if(move <= 10)
    {

    }

    if(hareXPos < 180)
    {
        hareXPos = 180;

    }

    if(hareXPos > end)
    {
        hareXPos = end;

    }
}

public void clearCurrent( Graphics s )
{
    s.clearRect(tortoiseXPos+1, tortoiseYPos+1, WIDTH-1, HEIGHT-1);
    s.clearRect(hareXPos+1, hareYPos+1, WIDTH-1, HEIGHT-1);
}

public void delay()
{
    try {
        Thread.sleep(1000);                 
    } catch(Exception ex) {

    }
}
    }

提前致谢!

1 个答案:

答案 0 :(得分:1)

您没有在任何地方调用drawMoves(g)方法。 Jut从paint(Graphics field)调用此方法,它将起作用。这是唯一遗漏的事情。

public void paint(Graphics field)
{
    drawField(field); //draw the field
    drawMoves (field)
}

你的实施将重新绘制你的物品,所以随着时间的推移你会看到许多乌龟和野兔。