2013-03-30 54 views
1

我有我创建的游戏的图像表示的实体对象。我能够检测到涉及矩形的简单碰撞,但我不知道如何阻止物体相互移动...(Java)通过墙壁停止移动

我不需要太多的物理模拟。我只是不希望任何物体能够通过对方。如果实体遇到墙,则停止。如果一堵墙碰到一个实体,墙就会停下来。

我该怎么做呢?

+0

看看[这篇文章](http://www.gamasutra.com/view/feature/3190/advanced_collision_detection_.php)。具体来说,第一种情况对你来说可能很简单。本质上创建一个边界框,覆盖物体穿过的区域并检查是否存在碰撞 –

回答

1

简单的答案就是列出所有的“实体”并检查它们是否发生碰撞。 使每个实体知道它是自己的半径(用于圆形碰撞)或边界框(用于矩形碰撞)。 然后有一个像下面这样的循环:

for (int x = entityList.count; i < 0; i--) 
{ 
    for (int y = entityList.count; i < 0; i--) 
    { 
     if (x == y) continue; // Make sure you don't check to collide with yourself 
     CheckIfCollides(entityList[x], entitylist[y]); 
    } 
} 

编辑: 你可以有碰撞码每一个实体试图更新它的位置和检查,以确保新位置是有效的,并没有按”时间内跑去不会碰撞任何东西。

+0

我曾考虑过检查下一个潜在位置是否可能,但这会使得如果我以与墙壁成一定角度,物体完全不会移动,当它移动到允许移动的方向时,就好像在墙上滑动一样。 – Linkxgl

+0

@Linkxgl您还可以检查“障碍物的哪一侧”,并且只能朝朝向障碍物的方向禁止移动。即。你首先检查整个运动,如果碰撞,你检查如果你只在X轴上移动等等。 另一种方法是首先移动然后沿对撞机边缘的法线移回来“修复”碰撞。 – TheDespite