首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用mouseEvents删除Java中的形状

无法使用mouseEvents删除Java中的形状
EN

Stack Overflow用户
提问于 2012-09-08 01:09:42
回答 1查看 504关注 0票数 1

我正试图在Eclipse中制作一个原始游戏,但我在使用mouseClicked方法编写删除GObjects并更改其他游戏属性的代码时遇到了一些问题。

问题似乎是私有的即时变量在mousePressed方法中不被识别。

有没有人能告诉我这里哪里错了?我已经在这上面花了一整天的时间了,我将非常感谢你的帮助。

致以亲切的问候,

梅胡尔

代码语言:javascript
复制
*/*
 * 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;
    }
}
}*
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-08 02:49:37

您尝试删除的三角形不是您添加的三角形。您在setupGame()中创建了一个名为三角形的本地GPolygon,并添加了该成员,而不是私有成员。

代码语言:javascript
复制
 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);

然后,您尝试删除未初始化的成员变量,因此不会发生任何事情。你可能不想要一个单独的三角形的本地副本。你可能想要

代码语言:javascript
复制
  public void setUpGame() {
    triangle = new GPolygon (WIDTH/2, HEIGHT/2);
    // ...
    add(triangle); // Now, you are adding the member
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12322517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档