我正在弄乱Java中的图形(特别是通过Swing和AWT库),并且想在屏幕上移动一个圆圈(画线),并且当x
或y
坐标设置为0时,线击中了画布的边界。我对这部分代码没有问题。
但是,现在我试图在坐标均为0(使用super.paint(Graphics)
)时清除屏幕并更改颜色。屏幕清除效果很好,但是我无法更改颜色。看起来,当坐标都为0时,指定颜色的椭圆形出现在[0,0]位置的条纹。但是,我希望条纹的颜色可以更改颜色,直到将坐标重置为(0,0)。这是我的代码:
@SuppressWarnings("serial")
public class Game extends JPanel
{
static final int SCREEN_X = 300;
static final int SCREEN_Y = 400;
int x = 0;
int y = 0;
private void moveBall()
{
x += 1;
y += 1;
if (x >= SCREEN_X) x = 0;
if (y >= SCREEN_Y) y = 0;
}
@Override
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (x == 0 && y == 0)
{
super.paint(g);
// Generate random value in [0, 5)
int rand_val = (new Random()).nextInt(5);
// Init random color variable
Color rand_color = Color.black;
// Pick a random color
switch (rand_val)
{
case 0:
rand_color = Color.black;
break;
case 1:
rand_color = Color.red;
break;
case 2:
rand_color = Color.green;
break;
case 3:
rand_color = Color.blue;
break;
case 4:
rand_color = Color.gray;
break;
}
// I'm assuming I need to do something more here?
// This is likely where my mistake is...
g2d.setColor(rand_color);
}
g2d.fillOval(x, y, 30, 30);
}
public static void main(String[] args) throws InterruptedException
{
JFrame frame = new JFrame("Mini Tennis");
Game game = new Game();
frame.add(game);
frame.setSize(SCREEN_X, SCREEN_Y);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true)
{
game.moveBall();
game.repaint();
Thread.sleep(10);
}
}
}
我正在弄乱Java中的图形(特别是通过Swing和AWT库),并想在屏幕上移动一个圆(画线),并在该行将x或y坐标设置回0时...
// I'm assuming I need to do something more here?
// This is likely where my mistake is...
g2d.setColor(rand_color);