2015-08-06 4 views
0

Я смотрел этот учебник и следил за тем, что я узнал, чтобы иметь прямоугольник, который должен перемещаться вверх, вниз, справа налево при нажатии клавиш со стрелками. Однако единственное движение, которое я получаю, - это диагональное движение, которое тоже нажимая влево и вправо, пока клавиши со стрелками вверх и вниз не выполняют какую-либо работу.Почему мой спрайт движется по диагонали?

Может кто-то проанализировать мой код и рассказать мне, почему я получаю диагональное движение вместо левого, правого, вверх вниз? Спасибо в ожидании.

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 

    } 


    } 
+0

Голосование, чтобы закрыть это, так как он оказался опечатка. Рад, что мы могли бы помочь! –

ответ

7

Посмотреть этот кусок кода:

  x=x+sx; 
      y=y+sx; <--- should be sy 
Смежные вопросы