Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Rect Intersect不工作_Java_Android - Fatal编程技术网

Java Android Rect Intersect不工作

Java Android Rect Intersect不工作,java,android,Java,Android,我正在为一款使用Android的Rect类的游戏开发一个碰撞检测系统。我遇到了一个问题,程序没有检测到楼层上的相交点 下面是在level类中检测intersect的代码 public void checkVerticalCollision(Rect rbot, Rect rtop){ if(type != 0){ if(Rect.intersects(rtop, r)){ Log.d("CollisionCheck", "Hit Head");

我正在为一款使用Android的Rect类的游戏开发一个碰撞检测系统。我遇到了一个问题,程序没有检测到楼层上的相交点

下面是在level类中检测intersect的代码

public void checkVerticalCollision(Rect rbot, Rect rtop){

    if(type != 0){
        if(Rect.intersects(rtop, r)){
            Log.d("CollisionCheck", "Hit Head");
        }

        //System.out.println("Bottom Hitbox" + " " + rbot.top + " " + rbot.bottom + " " + rbot.left + " " + rbot.right);

        if (Rect.intersects(rbot, r)){
            Log.d("CollisionCheck", "Hit Floor");
            player.setJumped(false);
            player.setSpeedY((byte) 0);
            player.setCenterY(tileY - 40);
            player.setHealth(player.getHealth() - damage);
        }
    }

}

public void checkSideCollision(Rect rleft, Rect rright){
    if(type != 0 ) {

        if(Rect.intersects(rleft,r)) {
            System.out.println("in left side intersect");
            player.setCenterX(tileX + 88);
            player.setSpeedX((byte) 0);
        }


        if(Rect.intersects(rright,r)) {
            System.out.println("in right side intersect");
            player.setCenterX(tileX + 10);
            player.setSpeedX((byte) 0);
        }   
    }
}
头部、左侧和右侧的点击框工作正常。但是,底部的hitbox rbot不起作用,因为在intersects中永远不会返回true。所有矩形变量都以相同的方式声明和设置,所有矩形变量都将更新。我甚至渲染了复选框,以检查它是否正在使用其他矩形进行更新,并且它正在更新。我完全搞不懂为什么这行不通。有人能帮忙吗

谢谢

更新播放器类中的Rect代码:

    bottom.set(centerX + 45, centerY + 65, centerX + 20, centerY + 55);
    head.set(centerX + 25 , centerY + 12, centerX + 38, centerY + 4);
    leftHand.set(centerX + 13, centerY + 42, centerX + 23, centerY +  20);
    rightHand.set(centerX + 50, centerY + 42, centerX + 40, centerY + 20);
    check.set(centerX - 40, centerY - 40, centerX + 90, centerY +100);

看起来您的矩形底部设置不正确。我假设bottom是类型,在这种情况下,要设置的参数是setint left、int top、int right、int bottom

对于底部,您已经设置了左参数和右参数,这样左参数就是右参数的右参数。例如,如果centerX为100,则将左侧设置为145,右侧设置为120,这是错误的


我认为您需要检查所有的左、右、上、下参数是否正确,因为我认为还有一些其他错误。

看起来您的矩形底部设置不正确。我假设bottom是类型,在这种情况下,要设置的参数是setint left、int top、int right、int bottom

对于底部,您已经设置了左参数和右参数,这样左参数就是右参数的右参数。例如,如果centerX为100,则将左侧设置为145,右侧设置为120,这是错误的


我认为您需要检查所有的左、右、上、下参数是否正确,因为我认为还有一些其他错误。

您说过下交点永远不会返回true。调试器中的值表示什么?这就是你将如何确定你的问题。你说过底部相交永远不会返回真值。调试器中的值表示什么?这就是你将如何确定你的问题。谢谢你!原来我把矩形倒过来了!谢谢你!原来我把矩形倒过来了!