【问题标题】:LibGDX rectangle's y-position updates even after collision即使在碰撞后,LibGDX 矩形的 y 位置也会更新
【发布时间】:2015-05-14 15:23:48
【问题描述】:

我正在使用 2D 平台游戏,我想制作从天而降的盒子。当盒子和地面发生碰撞时,盒子应该停止下落。这是我在Box 类中的碰撞检测和更新代码

public Box(int x, int y){

        hitBox = new Rectangle(x, y, 64, 64);
        bottom = new Rectangle(x + 5, y, 54, 14);
        top = new Rectangle(x + 5, y + 5 + 50, 54, 14);
        // other code
}
@Override
public void update(float delta) {
    if(!hits){
        velocity -= (1 * delta);
        System.out.println("velc " + velocity);
        hitBox.y += velocity;
        top.y += velocity;
        bottom.y += velocity;
        sprite.setPosition(hitBox.x, hitBox.y);
    }
}

@Override
public int hits2(Rectangle r) {
    if(bottom.overlaps(r)){
        velocity = 0;
        hits = true;
        System.out.println("hit");
        return 1;
    }
    System.out.println("n");
    hits = false;
    return 0;
}

这是我来自 Main 类的代码

for(int i=0; i<list.size(); i++){
            Box tmpBox = (Box) (list.get(i) instanceof Box ? list.get(i) : null);
            for(int j=0; j<list.size(); j++){
                if(tmpBox != null){
                    Brick brick = (Brick) (list.get(j) instanceof Brick ? list.get(j) : null);
                    Box tmpOtherBox = (Box) (list.get(j) instanceof Box ? list.get(j) : null);
                    if(brick != null){ // if collision with ground rectangle
                        tmpBox.hits2(brick.getTop());
                    }
                    if(tmpOtherBox != null && tmpOtherBox.hashCode() != tmpBox.hashCode()){ if collision with other box rectangle
                        tmpBox.hits2(tmpOtherBox.getHitBox());
                    }
                }
            }
            if(tmpBox != null){
                tmpBox.update(Gdx.graphics.getDeltaTime());
            }
}

但问题是当盒子与地面碰撞时,我的盒子仍然会掉下来,只是它的速度非常小。为什么我得到这个奇怪的结果?我知道我可以在我的hits2 方法中删除hits = false;,然后当它们与地面碰撞时我的盒子不会掉下来,但为什么矩形之间的碰撞会如此奇怪? 更新: 这里看起来如何visually

【问题讨论】:

    标签: libgdx collision overlap rectangles


    【解决方案1】:

    你有没有通过绘制检查地面的碰撞矩形?并绘制盒子的碰撞并检查碰撞点。因为我在我的一个游戏中已经这样做了,并且我正在绘制地面矩形以在大部分底部进行碰撞,所以当演员走出屏幕时,只要这样想它就会发生碰撞。

    libgdx 中的碰撞与重叠方法完美配合。

    【讨论】:

    • 谢谢,我都检查过了。我还更新了我的帖子并添加了关于我的问题的短视频
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多