这是我的动作代码
float d45 = (float) (1 / Math.sqrt(2));
float moveX, moveY;
switch (direction) {
case NORTH:
moveX = 0;
moveY = 1;
break;
case SOUTH:
moveX = 0;
moveY = -1;
break;
// [...] and so on [...]
case SOUTHEAST:
moveX = d45;
moveY = -d45;
break;
default:
moveX = 0;
moveY = 0;
break;
}
float t = Gdx.graphics.getDeltaTime();
moveX = moveX * t * speed;
moveY = moveY * t * speed;
然后这里是检测碰撞并移动我的对象的代码,我称之为Stuff
for (Stuff s : collidables) {
if (overlaps(s, moveX, 0)) { //checks X collision
collidedX.add(s);
x += moveX > 0 ? s.x - width - x : s.x + s.width - x;
}
}
if (collidedX.size < 1) {
x += moveX;
}
for (Stuff s : collidables) { //checks Y collision
if (overlaps(s, 0, moveY)) {
collidedY.add(s);
y += moveY > 0 ? s.y - height - y : s.y + s.height - y;
}
}
if (collidedY.size < 1) {
y += moveY;
}
如果我放大相机以使像素变大,那么我可以移动物体穿过通道。但是,如果我按照正常的1920x1080分辨率缩小,无论我握住我的向上和向右箭头键多少,我都无法通过完美的合身通道。我该怎么做才能穿过这个完美尺寸的通道?
编辑我有更多信息 它与我最终得到像素的事实有关。如果我将浮动x和y投射到一个int,它更有可能排成一条并穿过通道,但是在大多数时间它仍然移动过快,因为我直立,例如。我想这更像是一个如何补偿一个小的完美拟合通道,而不是一个确切的代码错误。