2012-09-07 1 views
1

Eclipse에서 오리지널 게임을 만들려고하고 있으며 mouseClicked 메서드를 사용하여 GObject를 제거하고 다른 객체의 속성을 변경하는 코드를 작성하는 데 문제가 있습니다.mouseEvents를 사용하여 Java에서 도형을 제거 할 수 없습니다.

문제는 개인 인스턴트 변수가 mousePressed 메서드에서 인식되지 않는 것 같습니다.

내가 잘못 알고있는 사람이 있습니까? 나는 이것에 하루 종일 보냈다. 그리고 약간의 도움은 매우 인정 될 것이다.

종류와 관련,

Mehul

*/* 
* 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

을 인식 할 수 없습니까? 모두들? 그러나 당신은 객체를 생성하지 않았습니다. 방금 유형을 선언했습니다. 내가 맞습니까? –

+0

인식 할 수없는 변수는 무엇입니까? –

+0

Jeff의 답변에서 본문 맨 위에 선언 한 인스턴스 변수가 setUpGame()에 추가 한 GObject가 아닌 것처럼 보입니다. 방법. – Mehul

답변

0

제거하려는 삼각형은 추가 한 것이 아니다. setupGame()에 triangle이라는 로컬 GPolygon을 생성하고 private 멤버가 아닌 this를 추가했습니다.

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); 

그리고 나중에 초기화되지 않은 멤버 변수를 제거하려고하면 아무 일도 일어나지 않습니다. 당신은 아마 삼각형의 분리 된 로컬 사본을 원하지 않을 것입니다. 너는 아마도 원하는

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

그것은 매력처럼 작동했습니다. Jeff를 도와 주셔서 감사합니다. 나는 그것을 많이 고맙다. – Mehul