我知道有很多关于Java中的碰撞检测的教程。我搜索,阅读并观看了很多关于它的视频,教程和文章。但我仍然无法解决它。
我目前如何检测我的碰撞是通过块或字符每边的4个矩形框。这在所有游戏对象中都类似:
public Rectangle getBoundsT(){
return new Rectangle(x + 1,y,30,10);
}
public Rectangle getBoundsL(){
return new Rectangle(x,y + 1,10,62);
}
public Rectangle getBoundsB(){
return new Rectangle(x + 1,y + 54,30,10);
}
public Rectangle getBoundsR(){
return new Rectangle(x + 22,y + 1,10,62);
}
这可以检测到碰撞:
if(getBoundsB().intersects(tempObject.getBoundsT())){
y=tempObject.y - 64;
}
if(getBoundsL().intersects(tempObject.getBoundsR())){
x=tempObject.x + 32;
}
if(getBoundsR().intersects(tempObject.getBoundsL())){
x=tempObject.x -32;
}
if(getBoundsT().intersects(tempObject.getBoundsB())){
y=tempObject.y + 32;
}
我的播放器对象大小为32x64,我的块为32x32。
现在这个工作,并且它检测到碰撞并停止块,排序。当我完全覆盖一侧时,它将起作用。一旦我移动以便我发生多次碰撞,它将对两者做出反应,导致我的玩家向上传送,或者向侧面传送。我无法发布此图片,因为我需要至少10个声誉。
我不知道如何解决这个问题,我不知道是否必须完全重做碰撞所有内容,因为我做错了。