如何检查是否刚刚从阵列中单击了某个对象?

时间:2014-04-11 07:25:15

标签: java arrays cookies

基本上我正在创建一个游戏,你点击掉落物体,EG饼干,我需要知道如何检查并查看某个cookie是否被按下以便它可以消失,但问题是它在一个数组中。

这是我的一些代码: 输入类......

public class Input implements MouseListener, MouseMotionListener{

@Override
public void mousePressed(MouseEvent e) {
    if(e.getSource().equals(MainGame.CG)){
        if(MainGame.MG.inGame){
            //There is actually something else here but its classified (haha sorry about that)      
            if(e.getPoint().x > /*I NEED SOMETHING HERE*/){
                                    //tells you if the object has been pressed
                MainGame.CG.cookieClicked = true; //CG = ClickerGame
            }

        }
    }
}
}

带数组的类......

public class ClickerGame extends JPanel{
    public int amount;
    public FallingObject[] fo = new FallingObject[120]; //THE ARRAY I'M HAVING TROUBLES WITH


     /*THE REST IS A SECRET (SORRY ABOUT THAT)*/
}

如果你不明白这里有一张图片来展示我的需要...... And sorry about the terrible drawing

2 个答案:

答案 0 :(得分:2)

为了避免在每次点击时检查120个不同项目的坐标,请让FallingObject[]内的每个元素都知道三件事:

  1. 它自己的影响范围(见sn00fy'答案)
  2. 包含的类(在这种情况下可能是ClickerGame
  3. 它在数组中的位置(一个int)
  4. 为此,您需要将FallingObject构造函数更改为如下所示:

    public void FallingObject(ClickerGame master, int index); //add whatever else is needed for Falling Object.
    

    然后你可以按如下方式实例化数组。

    for(int i = 0; i < 120; i++) {
         fo[i] = new FallingObject(this, i ); //add anything else needed for the constructor
    }
    

    然后每个FallingObject负责自己的状态,点击后它就能够向ClickerGame实例报告。现在您只需要一个ClickerGame中的方法,每个FallingObject都可以调用。

    public void clickedObj(int index) {
    FallingObject temp = null;
         if(index >= 0 && index < 120) {
              temp = fo[index];
              //Do stuff with temp :)
         }
    }
    

    要在FallingObject内调用此方法,只需引用&#39; master&#39;变量(您应该将其保存为类中的全局变量。

答案 1 :(得分:1)

如果FallingObject[]数组中的每个元素与点击时的鼠标指针坐标相交,则必须检查它们。

您可以为每个Cookie实施简单的矩形测试或使用圆圈,如下所述:

Equation for testing if a point is inside a circle