2015-03-24 2 views
0

Je voulais créer une balle qui rebondit de haut en bas et je veux déplacer la balle vers la gauche et la droite pendant que la balle rebondit avec les touches «a» et «d». PS le mouvement ne fonctionne pas sur la balle. Voici mon code à ce jour s'il vous plaît aidez-moi:Comment utiliser la commande de mouvement sur une balle que j'ai créée dans le Jpanel?

import java.util.Scanner; 
import java.awt.event.*; 
import java.awt.*; 

import javax.swing.*; 
public class jump extends JPanel implements ActionListener,KeyListener{ 
    static int x=100,y=100,xinc=10,yinc=10, o=50; 
    static int width =250,height=350; 
    boolean ballright, ballleft; 
    static JFrame f;    
    public void paintComponent (Graphics g){ 
     g.fillOval(x, y,20,20); 

    } 
    public static void main(String a[]){ 
     jump j= new jump();  
     f= new JFrame();     
     f.add(j);  
     f.setSize(width,height);    
     f.setVisible(true); 
     Timer t = new Timer(50, j);   
     t.start();     
    } 

    public void actionPerformed(ActionEvent e) { 
     if ((y>height-40)|| (y<0)) yinc=-yinc; 
     y=y+yinc; 
     if (ballleft==true){ 
      x=x+50; 
     } 
     if (ballright==true){ 
      x=x-50; 
     } 
     f.repaint(); 
    } 
    @Override 
    public void keyTyped(KeyEvent e) { 
     // TODO Auto-generated method stub 
     if (e.getKeyCode()==KeyEvent.VK_A){ 
      ballleft=true; 
     } 
     else if (e.getKeyCode()==KeyEvent.VK_D){ 
      ballright=true; 
     } 
     f.repaint(); 
    } 
    @Override 
    public void keyPressed(KeyEvent e) { 
     // TODO Auto-generated method stub 
     if (e.getKeyCode()==KeyEvent.VK_A){ 
      ballleft=false; 
     } 
     if (e.getKeyCode()==KeyEvent.VK_D){ 
      ballright=false; 
     } 
    } 
    @Override 
    public void keyReleased(KeyEvent e) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

D'abord, utilisez les raccourcis clavier api sur KeyListeners; Deuxièmement, appelez super.paintComponent avant d'effectuer une peinture personnalisée; Troisièmement, assurez-vous de démarrer l'interface utilisateur dans le contexte de l'EDT – MadProgrammer

Répondre

1

Je pense que le principal problème est que vous keyTyped en utilisant au lieu de keyPressed ou keyReleased. keyTyped est utilisé lorsque vous saisissez quelque chose dans une zone de texte, etc.

Lorsque vous appuyez sur la touche, vous définissez la valeur à droite et la valeur à faux, de sorte qu'elle ne puisse pas bouger. Donc, j'utiliser keyPressed pour définir le droit ou gauche à true et keyReleased pour les remettre à false.

+0

Ok, merci pour le conseil. Mais mon programme ne fonctionne toujours pas. –