Android Rect Intersect无效

时间:2015-06-26 15:15:40

标签: java android

我正在使用Android的Rect类进行游戏的碰撞检测系统。我有一个问题,程序没有检测到楼层的交叉点。

这里是检测关卡类中的交叉的代码。

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)。所有矩形变量都以相同的方式声明和设置,并且全部更新。我甚至渲染了hitboxes以检查它是否正在使用其他矩形进行更新。我完全不知道为什么这不起作用。请有人帮忙吗?

感谢。

更新播放器类中的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);

1 个答案:

答案 0 :(得分:0)

您似乎错误地设置了矩形bottom。我假设bottom的类型为Rect,在这种情况下set的参数为set(int left, int top, int right, int bottom)

对于bottom,您已设置left参数和right参数,以便left位于right的右侧。例如。如果centerX100,则您将左侧设为145,将右侧设为120,这是错误的方式。

我认为您需要检查所有leftrighttopbottom参数是否正确,因为我认为还有其他一些错误太