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

标签 java libgdx

我使用二维 boolean 数组来处理 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

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

最佳答案

据我了解,仅仅在碰撞后停止化身是不够的;在现实生活中,稍慢的帧可以将您的化身嵌入到表面中(正如您所经历的那样) - 您需要检测碰撞点,然后将化身移动那么远,以便它正好位于碰撞点上。

另一种说法是,当您检测到与地面发生碰撞时,您需要将头像向后移动,使其刚好位于地面上方。

关于java - java中的碰撞在基于网格的碰撞系统中检测得不够快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32367284/

相关文章:

java - 错误/AndroidRuntime(219) : java. lang.RuntimeException : Unable to start activity ComponentInfo{elf. app/elf.app.RoomInfoActivity} : java. lang.NullP

java - 通过 Java 从 Selenium RC 使用 JavaScript

java - ArrayAdapter 的泛型

java - 从 GWT CellTable 获取所有对象

Libgdx Actions => 逐渐将 Actor 从 A 点移动到 B 点

java - 防止 Android 屏幕在特定屏幕上进入 hibernate 状态 (LibGDX)

java - ORA-29546 错误 - 当尝试在 oracle 中上传 jar 文件时

java - 什么是编程中的 vector (LibGDX)?

java - 如何在导致运行时的 libgdx 中编写计时器

android - 在没有用户交互的情况下在安卓游戏期间保持屏幕打开