我有一个对象列表,我需要迭代来检测碰撞,但方法Rect.intersects(Rect a,Rect b)或任何检测到碰撞的人,只检查列表中的第一个对象,我甚至试图建立我自己的交叉方法,它可以更好地满足我的需求,它是:
public boolean intersect(Tile tile)
{
boolean interTB = bounds.top <= tile.getBottom();
boolean interLR = bounds.left <= tile.getRight() && interTB;
if (interTB || interLR) {
return true;
} else {
return false;
}
}
这里我称之为交叉,请注意我将此方法包装在 for(Tile tile:tiles)中并且我已经尝试了 Rect。相交
public void collision(Tile tile)
{
if (playerTouch.intersect(tile)) {
//if player touched a tile turn tile to cyan
if (tile.isCorrupt()) {
gameOver();
} else {
tile.setColor(Color.argb(233, 73, 106, 175));
playerScore++;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
playerTouch.clear();
}
列表是我的私人列表&lt;瓷砖&gt; tiles; ,以及我初始化它并添加对象的地方:
protected void init()
{
//...some code before this
tiles = new ArrayList<Tile>();
//...more code...
}
protected void loadTiles()
{
tiles.add(new Tile(newTileLeft, newTileTop, newTileRight, newTileBottom, corrupt));
}
感谢您的建议