Я смотрел этот учебник и следил за тем, что я узнал, чтобы иметь прямоугольник, который должен перемещаться вверх, вниз, справа налево при нажатии клавиш со стрелками. Однако единственное движение, которое я получаю, - это диагональное движение, которое тоже нажимая влево и вправо, пока клавиши со стрелками вверх и вниз не выполняют какую-либо работу.Почему мой спрайт движется по диагонали?
Может кто-то проанализировать мой код и рассказать мне, почему я получаю диагональное движение вместо левого, правого, вверх вниз? Спасибо в ожидании.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Paint extends JPanel implements ActionListener, KeyListener {
private static final long serialVersionUID = 1L;
int x=0, sx=0, y=0, sy=0;
Timer t= new Timer(5,this);
public Paint(){
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(x, y, 50, 50);
}
@Override
public void actionPerformed(ActionEvent e) {
x=x+sx;
y=y+sx;
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
int c= e.getKeyCode();
if(c== KeyEvent.VK_LEFT){
sx=-1;
sy=0;
}
if(c== KeyEvent.VK_RIGHT){
sx=1;
sy=0;
}
if(c== KeyEvent.VK_UP){
sx=0;
sy=-1;
}
if (c== KeyEvent.VK_DOWN){
sx=0;
sy=1;
}
}
public static void main(String [] args){
Paint p= new Paint();
JFrame j= new JFrame();
j.setTitle("Practice");
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setSize(500,500);
j.setLocationRelativeTo(null);
j.setVisible(true);
j.add(p);
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
Голосование, чтобы закрыть это, так как он оказался опечатка. Рад, что мы могли бы помочь! –