2014-02-24 160 views
0

所以我仍然试图让这个工作...我需要它告诉我与用户的位置匹配阵列中的墙壁之一的位置。比较和创建点2D阵列

我输出所有的坐标到控制台,一切看起来都是正确的,只是当它们相等时它不起作用。 (这工作之前...似乎如果我不在循环中创建墙它会工作,但是一旦我声明太多的墙它似乎退出工作(不完全确定,但我设置没有循环的地图,它没有始终如一地工作,我无法找出一个理由..

GameObject(user).positionPoint2D和'setPosition两种设置posiion,

public class Map { 
    public ArrayList<Wall> theseWalls = new ArrayList<Wall>(); 
    private boolean isSomethingThere; 

    public Boolean somethingIsThere(GameObject user){ 
     for(int i = 0; i < theseWalls.size(); i++){ 
      GameObject a = (Wall) theseWalls.get(i); 

      if(user.returnPosition().equals(a.returnPosition())){ 
       isSomethingThere= true; 
      } else { 
       isSomethingThere= false; 
      } 
     } 
     return isSomethingThere; 
    } 
} 

,使检查,如果他们碰了壁

和这使得墙壁

public void makeWallWE(double starty, double endy, double x){ 
    double length = endy - starty; 
    for(int i = 1; i<=(int)length;i++){ 

     Wall Wallie= new Wall(); 
     Wallie.setPosition(x,starty+i); 

     Wallie.showPosition(); 

     theseWalls.add(Wallie); 
    } 
} 
+1

你的输出是什么样的? – TastyLemons

+0

您可以用比较x和y值来替换点比较。 –

回答

0

您有:

public Boolean somethingIsThere(GameObject user){ 
    for(int i = 0; i < theseWalls.size(); i++){ 
     GameObject a = (Wall) theseWalls.get(i); 

     if(user.returnPosition().equals(a.returnPosition())){ 
      isSomethingThere= true; 
     } else { 
      isSomethingThere= false; 
     } 
    } 
    return isSomethingThere; 
} 

即使用户的位置相匹配的城墙之一,您可以继续通过墙壁其余检查,并最终设定isSomethingTherefalse。这是唯一的一次,如果theseWalls的最后一堵墙是匹配的。

当您找到匹配的墙时,您将希望跳出该循环,以避免在列表中稍后检查不匹配的墙时,将isSomethingThere重置为false

+0

因此,如果我将它初始化为false并删除else语句,我应该很好? – user3337754

+0

当然也可以。在你已经知道结果会是什么后,尽快打破循环,这样可以避免继续进行测试,但这不是必须的 - 这是一种常见的简单性能优化,我只是本能地在这一点上做的。 –

+0

你如何摆脱循环? – user3337754