如何在 libGDX 中以相反的方式发射子弹

How to shoot a bullet in the opposite way in libGDX

我创建了一个游戏功能,子弹以恒定的速度飞向十字准线。但是我有一个问题:怎样才能让子弹的射程与射出的方向相反?

让我解释一下我想做什么。当子弹碰到特定的 material 时,它会向相反的方向移动。喜欢这张图片:

如你所见,子弹"bouncing"反方向。

这是我的函数,如果您需要,我可以设置子弹的线速度:

public void direccion(float xx, float yy) {

        float mousex = Gdx.input.getX();
        float mousey = 0;
        if (shoot.getAngle() > 6.1 && shoot.getAngle() < 9.6) { 

            mousey = Gdx.input.getY() - 5;
        } else {
            mousey = Gdx.input.getY();
        }
        Vector3 mousePos = new Vector3(mousex, mousey, 0);
        jugador.camera.unproject(mousePos);
        float speed = 60f;
        float velx = mousePos.x - xx;
        float vely = mousePos.y - yy;
        float length = (float) Math.sqrt(velx * velx + vely * vely);
        if (length != 0) {
            velx = velx / length;
            vely = vely / length;
        }
        shoot.setLinearVelocity(velx * speed, vely * speed);

希望你能理解我的想法。谁能帮我解决这个问题?

思考如何才能做到这一点,我灵机一动。

根据矢量数学,子弹在触及有问题的material后可以取这些值进行反弹...

如图所示:

经过这个分析,我已经适应了一个简单的代码。

        vectorPart = shoot.getLinearVelocity();
        if ((vectorPart.x > 0 && vectorPart.y < 0) || (vectorPart.x > 0 && vectorPart.y > 0)
                || (vectorPart.x < 0 && vectorPart.y < 0) || (vectorPart.x < 0 && vectorPart.y > 0)) {
            vectorPart = new Vector2(vectorPart.x, vectorPart.y * -1);
        } else {
            vectorPart = new Vector2(vectorPart.x * -1, vectorPart.y * -1);
        }
        shoot.setLinearVelocity(vectorPart.x, vectorPart.y);

我评估了 linearVelocity 向量,然后修改了它的符号。

使用此代码和 anylisis 一切正常!