RectF.intersects奇怪地行动

时间:2015-06-28 08:16:49

标签: java android collision-detection

我一直在游戏中使用android的RectF来检测移动中的碰撞。当一个实体移动时,它会将世界中的对象移动到它想要移动的位置。如果此对象是RectF或我的Entity类的实例,则会告知实体它无法移动到那里。这是我的地图检查方法的代码:

public Object getCollisionObject(Entity ent){
    for(Entity e : entities){
        if(e == ent)continue;
        if(e.collides(ent.getBoundsF())return e;
    }
    for(RectF r : collisions){
        if(ent.collides(r))return r;
    }
    return null;
}

public void moveHere(Entity e, float x, float y){
    float originalX = e.getX();
    float originalY = e.getY();
    e.setX(x);
    e.setY(y);
    Object o = getCollisionObject(e):
    boolean moved = true;
    if(o instanceof RectF || o instanceof Entity)moved = false;
    e.setX(originalX);//actual movement is done in the entity class if this method returns true
    e.setY(originalY);
    return moved;
}

以下是Entity类中的相关方法:

public RectF getBoundsF(){
    return new RectF(x, y, x + width, y + height);
}

public boolean collides(RectF rect){
    return RectF.intersects(getBoundsF(), rect);
}

这是一个快速视频来演示我的问题(红色框是围绕碰撞绘制的,蓝色框是围绕位图边界绘制的):

VidMe Link

从视频来看,似乎在底部和右侧墙壁上,实体不能靠近其宽度(32像素)移动到墙壁。但是,在左侧和顶部墙上,实体能够尽可能地成功移动。墙壁的左侧和顶部侧面也会出现同样的问题(在每个墙壁上)。我很困惑,花了好几个小时试图解决这个问题但无济于事。如果需要更多信息,请在评论中提问。

0 个答案:

没有答案