java中的libgdx冲突在基于网格的冲突系统中检测速度不够快
我在Javalibgdx中使用一个2d布尔数组来处理真实点之间的冲突。我的碰撞检查,看看玩家是否能左右移动,摔倒或跳跃。这一切都是可行的,但碰撞速度不够快,无法检测到玩家何时应该停止坠落。当玩家停下来的时候,他已经差不多是平台内部的1/5了
这里有一张图片可以更好地描述我的意思。玩家是粉红色的,可碰撞平台是红色的。下图是一名玩家从一个很小的落点降落到平台上,重力非常缓慢
我的碰撞类非常简单,如果当前位置已为真,则不允许移动,这里的类仅供参考。注意,这个类功能齐全,只是速度慢
@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();
}
我已经找了好几个小时了,但我似乎找不到我想要的球员。仅供参考,这里是我希望球员在他的小下降,或任何速度下降后的样子。
非常感谢您的帮助。我只需要我的碰撞非常精确,不是那种精确。谢谢
# 1 楼答案
据我所知,仅仅在碰撞后停止阿凡达是不够的;在现实生活中,一个稍微慢一点的帧可以将你的化身嵌入到表面中(正如你正在经历的那样)-你需要检测碰撞点,然后将化身移动那么远,使其正好位于碰撞点上
另一种说法是,当你检测到与地面的碰撞时,你需要将化身向上移动,使其刚好位于地面之上