Java 2D冲突?

Java 2D冲突?,java,2d,collision-detection,Java,2d,Collision Detection,嘿,伙计们,我正在制作一个2D java游戏,我正在试图找出如何制作一个好的冲突代码。我目前正在使用以下代码: public void checkCollision() { Rectangle player_rectangle = new Rectangle(player.getX(),player.getY(),32,32); for(Wall wall : walls) { Rectangle wall_rectangle = new Rectan

嘿,伙计们,我正在制作一个2D java游戏,我正在试图找出如何制作一个好的冲突代码。我目前正在使用以下代码:

    public void checkCollision() {
    Rectangle player_rectangle = new Rectangle(player.getX(),player.getY(),32,32);

    for(Wall wall : walls) {

        Rectangle wall_rectangle = new Rectangle(wall.getX(), wall.getY(), 32,32);

        if (player_rectangle.intersects(wall_rectangle)) {
            Rectangle intersection = (Rectangle) player_rectangle.createIntersection(wall_rectangle);

            if (player.xspeed > 0) {
                player.x -= intersection.getWidth();
            }

            if (player.yspeed > 0) {
                player.y -= intersection.getHeight();
            }

            if (player.xspeed < 0) {
                player.x += intersection.getWidth();
            }

            if (player.yspeed < 0) {
                player.y += intersection.getHeight(); 
            }

            Print(Integer.toString(intersection.width) + ", " + Integer.toString(intersection.height));

        }

    }

}
public void checkCollision(){
矩形播放器\矩形=新矩形(player.getX(),player.getY(),32,32);
用于(墙:墙){
矩形墙\矩形=新矩形(wall.getX(),wall.getY(),32,32);
if(播放器与矩形相交(墙与矩形)){
矩形相交=(矩形)播放器\矩形。创建相交(墙\矩形);
如果(player.xspeed>0){
player.x-=交叉点.getWidth();
}
如果(player.yspeed>0){
player.y-=交叉点.getHeight();
}
如果(player.xspeed<0){
player.x+=交叉点.getWidth();
}
如果(player.yspeed<0){
player.y+=交叉点.getHeight();
}
打印(Integer.toString(intersection.width)+“,“+Integer.toString(intersection.height));
}
}
}
使用这段代码,如果你按下一个按钮,它可以正常工作,但如果按下并向左,例如,玩家将在某个随机方向飞行

以下是我拥有的地图类型的图片:


你的主要问题是假设玩家直接撞到墙上。考虑有一个墙壁RCT(100100,32,32)的情况,播放器在(80,68,32,32)。播放器向下向左移动,因此player.xspeed<0和player.yspeed>0;假设玩家的下一个位置是(79,69,32,32)。然后,交点为(100100,11,1)

请注意,尽管玩家正在向左(以及向下)移动,但墙实际上位于玩家的右侧。这一行:

if (player.xspeed < 0) {
    player.x += intersection.getWidth();
}
if(player.xspeed<0){
player.x+=交叉点.getWidth();
}
。。。使玩家在突然跳跃时将.x设置为90

你可以做的一件事是检查球员的左手边是否在十字路口,即

if (player.xspeed < 0 && player.x >= intersection.x) {
    player.x += intersection.getWidth();
}
if(player.xspeed<0&&player.x>=crossion.x){
player.x+=交叉点.getWidth();
}

显然,其他方向也需要做类似的事情。

我建议您使用box2d for java,而不是自己做。可能重复的我已将其标记为您以前线程的重复。如果它不是重复的(出于某种原因我错过了),解释一下原因是明智的。另一篇文章包含不同的代码,我不知道这是否给了我创建另一篇文章的权利,但是是的。那么我会使用你提供的代码而不是我的代码吗?或者将其与现有代码一起添加。