【发布时间】:2016-07-13 15:19:13
【问题描述】:
我在 libGDX 中实现非常基本的碰撞时遇到了一些困难。 “播放器”的更新代码如下:
private void updatePosition(float _dt)
{
Vector2 _oldPos = _pos;
_pos.add(_mov.scl(_dt*50));
_bounds.setPosition(_pos.x-8, _pos.y-12);
if(_game.getMap().checkCollision(_bounds))
{
System.out.println("Collision Detected");
_pos = _oldPos;
_bounds.setPosition(_pos.x-8, _pos.y-12);
}
}
因此,最初 _oldPos 在应用任何移动之前存储为 _pos 位置向量的值。
然后通过将移动向量_mov(乘以delta-time * 50)到位置向量来执行移动,然后更新玩家的边界矩形_bounds到这个新位置。
在此之后,玩家的新边界矩形会检查与游戏“地图”中每个图块的交叉点,如果检测到交叉点,则玩家无法朝该方向移动,因此将其位置设置为之前的位置 _oldPos,并且边界矩形的位置也设置为之前的位置。
那么这里发生了什么?我认为这段代码应该解决检测到的冲突是否正确?
奇怪的是,替换
_pos = _oldPos;
with(做同样的动作,只是反过来)
_pos.sub(_mov.scl(_dt*50));
产生非常不同的结果,玩家仍然可以穿过固体块,但会遇到阻力。
这很令人困惑,因为以下陈述应该是正确的:
_oldPos == _pos.sub(_mov.scl(_dt*50));
【问题讨论】:
标签: java android libgdx collision-detection