目前我有代码可以检测2个矩形的碰撞,r1.overlaps(r2)
但我真的不知道如何让矩形简单地碰撞并停止移动(理论上每个人都有相同的力量)目前我已经玩过一站的组合,反转,或两者兼而有之,但结果总是有问题(无论矩形是慢慢变形还是只是结块并停止移动)。
这是我的碰撞声明(它们有效)
public static void checkCollisions() {
for(int i = 0; i < Map.enemies.size(); i++) {
for(int j = 0; j < Map.players.size(); j++) {
if(Map.enemies.get(i).body.overlaps(Map.players.get(j).body)) {
Map.players.get(j).hit = 1;
Map.enemies.get(i).hit = 0;
}
}
for(int j = 0; j < Map.enemies.size(); j++) {
if( i!= j && Map.enemies.get(i).body.overlaps(Map.enemies.get(j).body)) {
Map.enemies.get(j).hit = 0;
Map.enemies.get(i).hit = 0;
}
}
}
}
和运动方法(目前两者相同。8 方向运动完美,直到我们添加碰撞并且盒子不会欣赏它..tick()
每次屏幕渲染时运行以及checkCollisions()
)
if(hit == 1) {
double MoveX = 0;
double MoveY = 0;
if(degree >90 && degree < 270) MoveX-=1;
if(degree < 90 || degree > 270) MoveX+=1;
if(degree > 0 && degree < 180) MoveY+=1;
if(degree > 180 && degree < 360) MoveY-=1;
if(MoveX == 0) MoveY *=1.5;
if(MoveY == 0) MoveX *=1.5;
x--;
y--;
}else if( hit == 0){
double MoveX = 0;
double MoveY = 0;
if(degree >90 && degree < 270) MoveX-=1;
if(degree < 90 || degree > 270) MoveX+=1;
if(degree > 0 && degree < 180) MoveY+=1;
if(degree > 180 && degree < 360) MoveY-=1;
if(MoveX == 0) MoveY *=1.5;
if(MoveY == 0) MoveX *=1.5;
x += MoveX;
y += MoveY;
}
hit = 0;