java中的碰撞在基于网格的碰撞系统中检测不够快

时间:2015-09-03 04:59:01

标签: java libgdx

我正在使用2d布尔数组来解决java libgdx中真实点之间的冲突。我的碰撞检查并查看玩家是否可以向左或向右移动或跌倒或跳跃。这一切都有效,但碰撞速度不够快,无法检测到玩家何时应该说停止下降。当他停下来时,玩家差不多是平台内部的1/5。

这是一张更好地描述我的意思的图片。玩家是粉红色的可碰撞平台是红色的。下面的图片是玩家刚刚从一个小水滴降落到平台上并且重力非常缓慢。

Player collision

我的碰撞类非常简单,如果当前位置已经为真,则不允许移动,这里的类仅供参考。请注意,该课程功能齐全,速度很慢。

    @Override
public void run() {
    if(mapGrid.getGrid()[(int) (entity.getGridPosition().x + 1)][(int) entity.getGridPosition().y + 1]){
        entity.setCanMoveRight(false);
    }else
        entity.setCanMoveRight(true);

    if(mapGrid.getGrid()[(int) (entity.getGridPosition().x - 1)][(int) entity.getGridPosition().y + 1]){
        entity.setCanMoveLeft(false);
    }else
        entity.setCanMoveLeft(true);



    if(mapGrid.getGrid()[(int) (entity.getGridPosition().x)][(int) entity.getGridPosition().y] ||
            (mapGrid.getGrid()[(int) (entity.getGridPosition().x + 1)][(int) entity.getGridPosition().y] &&
                    !mapGrid.getGrid()[(int) (entity.getGridPosition().x)][(int) entity.getGridPosition().y])){
        entity.setCanFall(false);
    }else
        entity.setCanFall(true);



}

这里是所有内容都在更新的地方。

    @Override
public void render () {
    collisionHandler.run();
    player.update();
    mapGrid.update();

    tmpLogger.log();
    camera.position.set(player.getPosition(), 0);
    camera.translate(player.getPosition());
    camera.update();
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    tmpRend.begin();
    mapGrid.render(tmpRend);
    player.render(tmpRend);
    tmpRend.end();
}

我已经看了几个小时,我似乎无法让玩家在我想要的地方。仅供参考,这是我希望玩家在他的小跌幅或任何速度下降之后的样子。 enter image description here

非常感谢任何帮助。我只需要我的碰撞非常准确,而不是准确。谢谢!!

1 个答案:

答案 0 :(得分:2)

据我所知,碰撞后阻止化身永远不够好;在现实生活中,一个稍慢的帧可以将你的头像嵌入到表面中(正如你所经历的那样) - 你需要检测碰撞点,然后将头像移动到那么远< >只是坐在碰撞点上。

另一种说法是,当你发现与地面发生碰撞时,你需要将头像向上移动,使其刚好高于地面。