gpt4 book ai didi

java - LibGDX 设置子弹绕船圈 2D 图形的初始位置

转载 作者:行者123 更新时间:2023-12-02 06:00:49 26 4
gpt4 key购买 nike

有一些想法上的小问题,但不知道要使用哪些库以及如何使用。到目前为止,我正在创建 2D 游戏,我有一个小船 Sprite 和子弹。此时此刻,我的子弹从船的中心点发射。

我想要什么:

  • 在我的船周围创建一个类似圆圈的东西,并使根据方向从圆圈线发射子弹。或许可以使用四元数类来制作,但需要一些提示,如何开始。
  • 另一个想法是创建另一个项目符号,将始终与第一个平行并且将被解雇同时。

下图描述了我在这个项目中的目标。 enter image description here

到目前为止,玩家类中的 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();

}

如果您需要代码的任何其他部分或其他信息,请询问。我将非常感谢您的帮助或任何提示。谢谢你!

最佳答案

您应该使用必须的direction vector 来获取起始位置。为此,您只需使用圆的半径缩放方向 vector ,并将该 vector 添加到圆中心:

bulletStart.set(position).add(direction.scl(radius));

位置是你的船的中心。direction 是归一化方向 vector 。radius 是圆的半径。

请注意,Vector2 的方法会更改 Vector 并将其返回以进行链接。因此,在调用 direction.scl(radius) 后,direction 不再标准化。

另一个注意事项:这并不准确(据我所知),因为 Vector 的长度是 vector.x + vector.y 而不是 sqrt(vector.x² + vector.y²),这将是半径。但在你的情况下差异不应该太大,我只是现在无法考虑正确的公式,即使它不应该那么难。如果有人知道请告诉我:P

关于java - LibGDX 设置子弹绕船圈 2D 图形的初始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com