2010-08-22 13 views
0

Voici mon code, ce que j'essaie de faire est de déplacer ce rectangle avec une touche. Questions - comment puis-je le spécifier sur les touches fléchées et pourquoi cela ne me permettra pas de travailler de cette façon? Il souligneKeylistener Java et l'action sur l'objet, quel est le problème?

mon objet paddle en rouge dans l'événement KeyPressed et ne fonctionnera pas.

import acm.graphics.*; 
import acm.program.*; 
import java.awt.event.*; 
public class BreakOut extends GraphicsProgram { 
/** Runs the program */ 
public void run() { 

GRect paddle = new GRect(200, 400, 100, 20); 
add(paddle); 

addKeyListeners(); 

} 
public void keyPressed(KeyEvent e){ 
paddle.move(5,0); 


} 
+0

Cela ne compilera même pas, et encore moins exécuter – skaffman

Répondre

0

palette est une variable locale dans le procédé run(). Il n'est pas accessible à partir de la méthode keyPressed(KeyEvent e).

Vous voulez probablement transformer la pagaie en champ.

0

Je n'ai aucune idée de ce que sont les paquets ACM et je n'ai aucune idée de la classe GrphaicsProgram, donc je ne sais pas vraiment ce que vous faites. Mais, en général, les KeyEvents ne sont transmis qu'aux objets qui ont un focus. Je ne peux pas dire si votre objet paddle a le focus ou non.

Je suggère que vous pouvez écrire votre programme en utilisant Swing, puis en utilisant Key Bindings au lieu de compter sur KeyEvents.

0

essayez ceci:

import acm.graphics.*; 
import acm.program.*; 
import java.awt.event.*; 

public class BreakOut extends GraphicsProgram { 

    GRect paddle; 

    public void run() { 

     paddle = new GRect(200, 400, 100, 20); 
     add(paddle); 

     addKeyListeners(); 

    } 

    public void keyPressed(KeyEvent e){ 
     paddle.move(5,0); 
    } 

} 
0

Il y a deux problèmes que je peux voir à partir de maintenant:

  1. Votre programme a des accolades asymétriques en ce moment, vous devriez probablement ajouter un à la fin de votre méthode keyPressed.

  2. Vous ne mettez pas à jour le rectangle, vous aurez donc besoin d'une boucle quelconque.

+0

Bienvenue dans StackOverflow. Essayez d'améliorer votre réponse en ajoutant quelques exemples. Peut-être que le problème avec les accolades est juste qu'il a oublié de copier l'orthèse, alors peut-être n'est pas si pertinent, peut-être un avis serait suffisant. En ce qui concerne le problème principal, vous trouvez que la solution est une boucle, essayez d'être plus clair afin d'aider le demandeur à mieux comprendre la solution que vous proposez. –