碰撞检测,让物体穿过一个完美大小的通道?

时间:2015-04-05 00:53:59

标签: java libgdx

这是我的动作代码

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,它更有可能排成一条并穿过通道,但是在大多数时间它仍然移动过快,因为我直立,例如。我想这更像是一个如何补偿一个小的完美拟合通道,而不是一个确切的代码错误。

0 个答案:

没有答案