0
我对Java和一般编程相当陌生。我正在开发一个小型游戏,用户扮演一个白色方块,其目标是收集屏幕上的所有硬币。随着用户收集硬币,移动红色方块出现在屏幕上,如果用户触摸它们将结束游戏。我使用KeyListener来移动用户的方块。在另一个形状独立移动时使用KeyListener移动形状
我遇到的问题是,当红色正方形移动时,我无法移动玩家的正方形。在paint方法内激活while循环时,红色方块会移动。我希望用户能够在红色正方形移动时移动它们的正方形。
这里是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class FinalGame extends Canvas
{
private static final long serialVersionUID =1L;
//refers to players coordinates
static int x=230, y=230;
static boolean coin1=true;
static int coinsCollected=0;
static int mj;
static boolean bounce=true;
public FinalGame() {
setSize(new Dimension(500, 500));
setBackground(Color.black);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
moveSquare(e);
}
});
}
public void paint(Graphics g)
{
//refers to coin's coordinates
int c1x=20; int c1y=20;
g.setColor(Color.white);
g.fillRect(x,y,20,20);
g.setColor(Color.yellow);
g.fillOval(c1x, c1y, 20, 20);
if((x==c1x)&&(c1y==20))
{
coin1=false;
}
if(coin1==false)
{
g.setColor(Color.black);
g.fillOval(20, 20, 20, 20);
int j=230;
mj=5;
//I am unable to move the square while this loop is active
while(bounce)
{
repaint();
if((j==480)||(j==0))
{
mj=-mj;
}
j=j+mj;
g.setColor(Color.red);
g.fillRect(230, j, 20, 20);
delay();
g.setColor(Color.black);
g.fillRect(230, j, 20, 20);
g.setColor(Color.white);
g.fillRect(x,y,20,20);
}
mj=-mj;
}
g.setColor(Color.white);
g.fillRect(x,y,20,20);
}
public void moveSquare(KeyEvent e)
{
switch(e.getKeyCode())
{
case KeyEvent.VK_DOWN:
y += 5;
break;
case KeyEvent.VK_UP:
y-= 5;
break;
case KeyEvent.VK_LEFT:
x-=5;
break;
case KeyEvent.VK_RIGHT:
x+=5;
break;
}
repaint();
}
public static void main(String[] args)
{
JFrame frame = new JFrame("Basic Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FinalGame ex = new FinalGame();
frame.getContentPane().add(ex);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
ex.requestFocus();
}
public void delay()
{
try
{
Thread.sleep(15);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
不,你并不需要为每一个新的线程移动的对象,这很愚蠢。游戏循环的一个新线程移动并呈现所有内容就足够了。 – eldo