在我制作的游戏中,我需要不断地从列表中找到对象,然后检查它的坐标是否相邻,有数百个这样的对象,其中只有4个是正确的,是否有更好的方法来做到这一点?
列表在getMap.getTerrain(x,y);
它是一个2维int数组,保存对象的数据值。
int[] r = new int[4];
int tX = (int)(getX()/32);
int tY = (int)(getY()/32);
if((tY > 1) && (tX > 1) && (tY < 39) && (tX < 39))
{
r[0] = getMap().getTerrain(tX-1, tY);
r[1] = getMap().getTerrain(tX+1, tY);
r[2] = getMap().getTerrain(tX, tY-1);
r[3] = getMap().getTerrain(tX, tY+1);
//}
}
int resource = 0;
for(int i : r) if(i != 0) resource = i;
if(resource != 0)
{
System.out.println("R isnt 0, We are next to a "+resource);
}
嗯…如果getTerrain在一个40x40的二维数组中查找一个值,我认为你不会变得更快。唯一的问题可能是,如果你有一个稀疏的数组和资源分散在整个地图。在这种情况下,你有1600个数组元素,大多数都是0。如果它是稀疏的,并且您想要100 x 100或1,000 x 1,000的大映射,那么您应该查看Point类和HashMap,其中点是键。然后,对于不在散列映射中的任何元素,getterrain都可以返回0。否则,如果你坚持用较小的二维数组的话,它看起来并不可怕。