2016-03-24 12 views
-1

Hey çocuklar Oyuncu sınıfımı sağa veya sola vurduğumda hareket ettirmeye çalışıyorum ama hiçbir şey olmuyor/java için yeni ve neden çalışmadığını anlamıyorum. Hatam yok ama yine de hiçbir şey olmuyor. Herhangi bir yardım için teşekkürler. Ayrıca, bana neden açıklanmadığını gerçekten açıklayabilseydin.Neden Java'da gezinme tuşlarını kullanarak bir dikdörtgeni taşıyamıyorum?

import java.awt.Color; 
     import java.awt.Dimension; 
     import java.awt.EventQueue; 
     import java.awt.Graphics; 
     import java.awt.Rectangle; 
     import java.awt.event.ActionEvent; 
     import java.awt.event.ActionListener; 
     import java.awt.event.ComponentAdapter; 
     import java.awt.event.ComponentEvent; 
     import java.awt.event.KeyEvent; 
     import java.awt.event.KeyListener; 
     import javax.swing.JFrame; 
     import static javax.swing.JFrame.EXIT_ON_CLOSE; 
     import javax.swing.JPanel; 
     import javax.swing.Timer; 
     import javax.swing.UIManager; 
     import javax.swing.UnsupportedLookAndFeelException; 

     public class GamePanel extends JPanel implements ActionListener, KeyListener { 

      public final static int WIDTH = 700, HEIGHT = 450; 

      public Game game; 
      public Player player; 

      public GamePanel(Game game) { 
       setBackground(Color.WHITE); 
       this.game = game; 
       addKeyListener(this); 
       setFocusable(true); 
      } 
        public void update() { 
       player.update(); 
      } 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(WIDTH, HEIGHT); 
      } 

      public void init() { 
       System.out.println("!!"); 
       player = new Player(this, KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, getHeight() - 50, getWidth()/2); 
       repaint(); 
      } 


      public void actionPerformed(ActionEvent e) { 
       update(); 
       repaint(); 
      } 

      public Player getPlayer(int playerNo) { 
       return player; 
      } 
     public void keyPressed(KeyEvent e) { 
      player.pressed(e.getKeyCode()); 
     } 

     public void keyReleased(KeyEvent e) { 
      player.released(e.getKeyCode()); 
     } 

     public void keyTyped(KeyEvent e) { 
    ; 
     } 

      @Override 
      public void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       if (player != null) { 
        player.paint(g); 
       } 
      } 
     } 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Rectangle; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import javax.swing.JFrame; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 
import javax.swing.JPanel; 
import javax.swing.Timer; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Player { 

     public static final int WIDTH = 50, HEIGHT = 50; 
     public GamePanel game; 
     public int left, right; 
     public int y; 
     public int x, xa; 

     public Player(GamePanel game, int left, int right, int y, int x) { 
      this.game = game; 
      this.left = left; 
      this.right = right; 
      this.x = x; 
      y = game.getHeight() - HEIGHT; 
      x = game.getWidth()/2; 
     } 

     public void update() { 
      if (x > 0 && x < game.getWidth() - WIDTH) { 
       x += xa; 
      } else if (x == 0) { 
       x++; 
      } else if (x == game.getWidth() - WIDTH) { 
       x--; 
      } 
     } 

public void pressed(int keyCode) { 
     if (keyCode == left) 
      xa = -1; 
     else if (keyCode == right) 
      xa = 1; 
    } 

    public void released(int keyCode) { 
     if (keyCode == left || keyCode == right) 
      xa = 0; 
    } 

     public Rectangle getBounds() { 
      return new Rectangle(x, y, WIDTH, HEIGHT); 
     } 

     public void paint(Graphics g) { 
      System.out.println(x + "x" + y); 
      g.fillRect(x, y, WIDTH, HEIGHT); 
      g.setColor(Color.ORANGE); 
     } 
    } 

cevap

0

keyReleased() yönteminin sonundaki repaint(); ifadesini eklemeniz yeterlidir. keyTyped() veya keyPressed() yönteminde bir şey yapıp yapmadığınızdan bağımsız olarak, anahtarı her bıraktığınızda keyReleased() yöntemi her zaman çağrılır. Bu yüzden program kontrolü burada repaint() ifadesiyle karşılaşmalıdır.

@Override 
public void keyReleased(KeyEvent e){ 
    player.released(e.getKeyCode()); 
    repaint(); //<--- THIS HERE 
} 

Umarım bu sizin sorununuzu çözer.


Lütfen @ SasonOhanian'ın cevabını not edin ve kodunuzu geliştirin.

0

Sen güncelleme var ve KeyPressed oyuncu için hareket değişkeni ayarlar iken actionPerformed geri aramasında mantığını yeniden boyamak. İşlerin nasıl yapıldığını görmek için dinleyicilerinizde hata ayıklayın veya bir şeyler yazdırın. ActionPerformed ve KeyPressed'in sizden beklediğiniz yol ve düzen olduğunu düşünmüyorum.

0

Yardım için Ty ancak x x + 1 ve x = x -1

İlgili konular