对于一些想法有一个小问题,但不知道使用哪些库以及如何使用。 到目前为止,我正在创建2D游戏,我有一个小船精灵和子弹。 这一刻,我的子弹从船的中心点发射。
我想要的是什么:
下面的图片描述了我在这个项目中的目标。
到目前为止,我在player类中的update()方法进行了下一步操作:
@Override
public void update() {
//When player touches the screen, TouchInputHandler class sets the variable isAiming = true.
if (TouchInputHandler.isAiming) {
//Creating an Vector2 object which takes coordinates from user input on the screen.
Vector2 aim = new Vector2(TouchInputHandler.getAimDirection().x, TouchInputHandler.getAimDirection().y);
//Checking if aim is real value.
//Waiting for the delay between previous and next bullet launched.
if (aim.len2() > 0 && cooldownRemaining <= 0) {
//cooldownFrames if final static value equal to 6.
//So loop will go through 6 times before next bullet.
cooldownRemaining = cooldownFrames;
//Taking the current position of the ship and applying it to the current position of bullet.
Vector2 currentPos = new Vector2(position.x, position.y);
//Substituting current bullet position from the aim position and getting direction vector.
aim.sub(currentPos);
//Normalizing the aim (bullet direction) vector, so the sum of scalars of vector = 1;
aim.nor();
//Incresing the speed of bullet movement.
aim.x *= 10;
aim.y *= 10;
//adding new entity with the bullet currentPos and direction where it has to move.
EntityManager.addEntity(new Bullet(currentPos, aim));
//After bullet has been launched, set isAiming to false.
TouchInputHandler.isAiming = false;
}
}
//decreasing cooldown Remaining in every loop until it will be equal 0 and bullet'll be ready again.
if (cooldownRemaining > 0)
cooldownRemaining--;
//method that is responsible for player movement.
motionMove();
}
如果您需要任何其他代码部分或其他信息,请询问。 我将非常感谢您的帮助或任何提示。谢谢!
答案 0 :(得分:2)
您应该使用direction
向量来获取起始位置。
要执行此操作,您只需使用圈子的direction
缩放radius
向量,并将此向量添加到圈子中心:
bulletStart.set(position).add(direction.scl(radius));
position
是您船舶的中心。
direction
是标准化的方向向量。
radius
是圆圈半径。
请注意,Vector2
的方法会更改Vector
并将其返回以进行链接。因此,在致电direction.scl(radius)
后,direction
不再正常化。
另一个注意事项:这不是很准确(尽管我理解的很多),因为Vector
的长度为vector.x + vector.y
而不是sqrt(vector.x² + vector.y²)
,这将是半径。但是在你的情况下,差异不应该很大,我现在无法考虑正确的公式,即使它不应该那么难。如果有人知道,请告诉我:P