2012-09-07 2 views
1

J'essaie de créer un jeu original dans Eclipse et j'ai de la difficulté à écrire du code qui va supprimer GObjects et changer les propriétés des autres, en utilisant la méthode mouseClicked.Impossible de supprimer des formes en Java en utilisant mouseEvents

Le problème semble être que les variables instantanées privées ne sont pas reconnues dans la méthode mousePressed.

Quelqu'un peut-il s'il vous plaît conseiller sur ce que je me trompe ici? J'ai passé une journée entière à ce sujet et de l'aide sera grandement appréciée.

Cordialement,

Méhul

*/* 
* File: Linesv1.java 
* 07/08/2012 
* 
*/ 
import acm.graphics.*; 
import acm.program.*; 
import acm.util.*; 
import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.event.MenuEvent; 
public class Linesv1 extends GraphicsProgram { 


    /** Width and height of application window in pixels */ 
    public static final int BACKGROUND_WIDTH = 400; 
    public static final int BACKGROUND_HEIGHT = 600; 
    /** Dimensions of game board (usually the same) */ 
    private static final int WIDTH = BACKGROUND_WIDTH; 
    private static final int HEIGHT = BACKGROUND_HEIGHT; 

    /** Dimensions of triangle*/ 
    private static final int LENGTH_OF_TRIANGLE_SIDE = 100; 

    /** Dimensions of arc height*/ 
    private static final int ARC_HEIGHT = 100; 

    /** Dimensions of radius of switches*/ 
    private static final int SWITCH_RADII = 5; 


    // private instant variables 

    private GObject switchA; 

    private GOval switchB; 

    private GObject triangle; 


    private GObject bottomArc; 


public void run() { 
     addMouseListeners(); 
     setUpGame(); 
     } 

public void setUpGame(){ 

    //add central triangle 
    GPolygon triangle = new GPolygon (WIDTH/2,HEIGHT/2); 
    triangle.addVertex(0,-LENGTH_OF_TRIANGLE_SIDE*2/3); 
    triangle.addVertex(LENGTH_OF_TRIANGLE_SIDE/2,+LENGTH_OF_TRIANGLE_SIDE*1/3); 
    triangle.addVertex(-LENGTH_OF_TRIANGLE_SIDE/2,+LENGTH_OF_TRIANGLE_SIDE*1/3); 
    triangle.setFilled(true); 
    triangle.setFillColor(Color.green); 
    add(triangle); 

    //add topArc 
    GArc bottomArc = new GArc (WIDTH/2-LENGTH_OF_TRIANGLE_SIDE/2, HEIGHT/2+LENGTH_OF_TRIANGLE_SIDE*1/3-ARC_HEIGHT/2, ARC_HEIGHT,ARC_HEIGHT,0,-180); 
    bottomArc.setFilled(true); 
    bottomArc.setFillColor(Color.green); 
    add(bottomArc); 

    //add switches to the bottom of the triangle 
    GOval switchA = new GOval (WIDTH/2-LENGTH_OF_TRIANGLE_SIDE/2-SWITCH_RADII, HEIGHT/2+LENGTH_OF_TRIANGLE_SIDE*1/3-SWITCH_RADII,SWITCH_RADII*2,SWITCH_RADII*2); 
    switchA.setFilled(true); 
    switchA.setFillColor(Color.black); 
    add(switchA); 

    //add switches to the bottom of the triangle 
    GOval switchB = new GOval (WIDTH/2+LENGTH_OF_TRIANGLE_SIDE/2-SWITCH_RADII, HEIGHT/2+LENGTH_OF_TRIANGLE_SIDE*1/3-SWITCH_RADII,SWITCH_RADII*2,SWITCH_RADII*2); 
    switchB.setFilled(true); 
    switchB.setFillColor(Color.black); 
    add(switchB); 
    } 
public void mousePressed(MouseEvent e) { 
    findObject(e.getX(),e.getY()); 
    GObject check = findObject(e.getX(),e.getY()); 
    if (check!=null){ 
     remove(triangle); 
     switchA.setColor(Color.cyan); 
    } 
} 
private GObject findObject(int a, int b){ 

    if(getElementAt(a,b) != null) { 
     return getElementAt(a,b); 
    } else { 
     return null; 
    } 
} 
}* 
+0

ne peut pas être reconnu? tous? Mais vous n'avez pas créé les objets. vous venez de déclarer les types. ai-je raison? –

+0

Quelles sont les variables qui ne peuvent pas être reconnues? –

+0

De la réponse de Jeff, il semble que les variables d'instance que j'ai déclarées en haut du corps ne sont pas les GObjects que j'ai ajoutés dans le setUpGame(); méthode. – Mehul

Répondre

0

Le triangle que vous essayez de supprimer est pas celui que vous avez ajouté. Vous avez créé un GPolygon local appelé triangle dans setupGame() et ajouté cela, pas le membre privé.

private GObject triangle; // this is uninitialized 

public void setUpGame(){ 

    GPolygon triangle = new GPolygon (WIDTH/2,HEIGHT/2); // this is hiding your member variable 

    // THIS IS LOCAL COPY, NOT MEMBER VARIABLE 
    add(triangle); 

Ensuite, vous essayez de supprimer la variable membre non initialisée, donc rien ne se passe. Vous ne voulez probablement pas de copie locale séparée du triangle. Vous voulez probablement

public void setUpGame() { 
    triangle = new GPolygon (WIDTH/2, HEIGHT/2); 
    // ... 
    add(triangle); // Now, you are adding the member 
    } 
+0

Cela a fonctionné comme un charme. Merci d'avoir pris le temps de m'aider Jeff. Je l'apprécie beaucoup. – Mehul

Questions connexes