如何在 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 一切正常!
我创建了一个游戏功能,子弹以恒定的速度飞向十字准线。但是我有一个问题:怎样才能让子弹的射程与射出的方向相反?
让我解释一下我想做什么。当子弹碰到特定的 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 一切正常!