我创建了一个游戏的功能,即子弹以恒定的速度进入十字准线。但是我有一个问题:我怎样才能让子弹与它的射击方向相反?让我解释一下我想做什么。当子弹接触到特定材料时,它会朝相反的方向移动。就像这张图片:如您所见,子弹正向相反的方向“弹跳”。这是我的功能,如果需要,我可以在其中设置子弹的线速度: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);希望你能理解我的想法。谁能帮我这个?
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
在思考我该怎么做之后,我有了一个主意。
根据矢量数学,子弹在接触到有问题的材料后可以采用这些值进行反弹......
如图所示:
经过这次分析,我已经适应了一个简单的代码。
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 一切正常!
添加回答
举报
0/150
提交
取消