Java 为什么我的雪碧在对角移动?

Java 为什么我的雪碧在对角移动?,java,swing,animation,sprite,keylistener,Java,Swing,Animation,Sprite,Keylistener,我看了本教程,并按照我所学的方法制作了一个矩形,按下箭头键后,矩形可以上下左右移动。然而,我得到的唯一运动是对角线运动,也就是在上下箭头键不起作用的情况下,按左右键 有人能分析一下我的代码,告诉我为什么我得到的是对角线运动而不是左、右、上下运动吗? 谢谢你的期待 import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListen

我看了本教程,并按照我所学的方法制作了一个矩形,按下箭头键后,矩形可以上下左右移动。然而,我得到的唯一运动是对角线运动,也就是在上下箭头键不起作用的情况下,按左右键

有人能分析一下我的代码,告诉我为什么我得到的是对角线运动而不是左、右、上下运动吗? 谢谢你的期待

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

    }


    }

请参见这段代码:

            x=x+sx;
            y=y+sx; <--- should be sy
x=x+sx;

y=y+sx;投票决定关闭这个网站,因为这是一个印刷错误。很高兴我们能帮忙!