Java ArrayList仅检测最后添加的对象的碰撞

Java ArrayList仅检测最后添加的对象的碰撞,java,arraylist,collision-detection,Java,Arraylist,Collision Detection,在检测播放器和许多相同对象(在本例中为墙砖)之间的碰撞时,我遇到了一个问题。问题是,我的程序仅在与上次添加的墙砖接触时检测碰撞。这是用java编写的 我使用矩形(它们的相交方法)来检测碰撞 代码示例: 更新分幅: for (int i = 0; i < wallTileArr.size(); i++) { wallTile = wallTileArr.get(i); wallTile.update(p); if(wal

在检测播放器和许多相同对象(在本例中为墙砖)之间的碰撞时,我遇到了一个问题。问题是,我的程序仅在与上次添加的墙砖接触时检测碰撞。这是用java编写的

我使用矩形(它们的相交方法)来检测碰撞

代码示例:

更新分幅:

        for (int i = 0; i < wallTileArr.size(); i++)
    {
        wallTile = wallTileArr.get(i);
        wallTile.update(p);
        if(wallTile.getBounds().intersects(Screen.getBounds()))
        {
            wallTile.draw = true;
        }
        else if(!wallTile.getBounds().intersects(Screen.getBounds()))
        {
            wallTile.draw = false;
        }
    }
}

将瓷砖和墙添加到其arrayList中的代码:

public static void addWallTile(WallTile wallTile)
{
    Controller.wallTileArr.add(wallTile);
}

public static void addWall(Wall wall)
{
    Controller.wallArr.add(wall);
}
更新wallTile.java文件中冲突的代码:

    public void update(Player p)
{
    x+=Screen.movementX;
    y+=Screen.movementY;

    if(getBounds().intersects(p.upGetBounds()))
    {

        p.walk = false;

    }
    else
    {
        p.walk = true;
    }
}
为什么会这样?你建议我怎么修


请随意索取更多的代码示例

if(getBounds().intersects(p.upGetBounds()))
{

    p.walk = false;

}
else
{
    p.walk = true;
}
问题是这个代码。您正在为每个未与玩家碰撞的磁贴重置标志,因此只有最后一个磁贴可以与玩家成功碰撞,并且不会重置标志

i、 e-假设有两个瓦片,
#1
发生冲突,
#2
没有冲突

在循环的第一次迭代中-

#1
正在碰撞=>p.walk=false

在循环的第二次迭代中-

#2
没有碰撞=>p.walk=true
//值已重置。

但是,如果发生冲突的是
#2
,则无法重置该标志

要修复:删除
else
子句,并在
for
循环之前将其重置一次
true

问题是这个代码。您正在为每个未与玩家碰撞的磁贴重置标志,因此只有最后一个磁贴可以与玩家成功碰撞,并且不会重置标志

i、 e-假设有两个瓦片,
#1
发生冲突,
#2
没有冲突

在循环的第一次迭代中-

#1
正在碰撞=>p.walk=false

在循环的第二次迭代中-

#2
没有碰撞=>p.walk=true
//值已重置。

但是,如果发生冲突的是
#2
,则无法重置该标志


要修复:删除
else
子句,并在
for
循环之前将其重置一次
true

“请随意要求更多的代码示例!”:我希望您能将其缩小更多。“请随意要求更多的代码示例!”:我希望您能将其缩小更多。我正要指出同样的事情。在for循环之前尝试设置
p.walk=true
,在更新中,如果发生碰撞,则仅将其设置为
false
。@denahiro就像我自己键入的那样:)好吧,我只是在减速,然后:D.正要指出同样的事情。在for循环之前尝试设置
p.walk=true
,在更新中,如果发生碰撞,则仅将其设置为
false
。@denahiro就像我自己键入的那样:)那么我只是在减速:D。
    public void update(Player p)
{
    x+=Screen.movementX;
    y+=Screen.movementY;

    if(getBounds().intersects(p.upGetBounds()))
    {

        p.walk = false;

    }
    else
    {
        p.walk = true;
    }
}
if(getBounds().intersects(p.upGetBounds()))
{

    p.walk = false;

}
else
{
    p.walk = true;
}