Я использую JFrame для отображения некоторых изображений.Я только начал, и в этот момент я хочу, чтобы персонаж двигался по экрану.У меня есть 2 файла, один, который расширяет JFrame (отображает изображения) и файл бегуна.Одно изображение является неподвижным фоном, а другое - подвижным символом, однако кажется, что оба изображения движутся, а положение фона неподвижно.
Я только начал использовать JFrame и понятия не имею, что происходит.
Это файл, который расширяет JPanel:
public class testScene extends JPanel{
private int x = 60;
private int y = 60;
private boolean end = false;
public void paintComponent(Graphics g){
super.paintComponent(g);
ImageIcon background = new ImageIcon("images\\map\\TestMap1.png");
background.paintIcon(this, g, 0, 0);
ImageIcon protag = new ImageIcon("images\\protag\\protag_f.png");
protag.paintIcon(this, g, x, y);
}
public int getX(){return x;}
public int getY(){return y;}
public boolean getEnd(){return end;}
public void setX(int i){x=i;}
public void setY(int i){y=i;}
public void setEnd(boolean b){end = b;}
}
Это предполагаемый бегун:
public class testSceneRunner{
public static void main(String[] args){
testScene scene = new testScene();
scene.setBackground(Color.black);
JFrame jf = new JFrame();
InListner keyIn = new InListner(); //this is a keyboard listner
jf.addKeyListener(keyIn);
jf.setTitle("Test Scene");
jf.setSize(1020,600);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(scene);
while(!scene.getEnd()){
//just changes x or y based on keyboard input
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(keyIn.getPressed() == 87){
scene.setY(scene.getY()-1);
}
if(keyIn.getPressed() == 65){
scene.setX(scene.getX()-1);
}
if(keyIn.getPressed() == 83){
scene.setY(scene.getY()+1);
}
if(keyIn.getPressed() == 68){
scene.setX(scene.getX()+1);
}
if(keyIn.getPressed() == 69){
scene.setEnd(true);
}
jf.repaint();
}
jf.dispatchEvent(new WindowEvent(jf, WindowEvent.WINDOW_CLOSING));
}
}
Я хочу, чтобы фон оставался неподвижным, а персонаж двигалсякогда нажата одна из клавиш WASD.Тем не менее, фон также перемещается.