Java 用鼠标射击子弹,Math.atan2

Java 用鼠标射击子弹,Math.atan2,java,math,Java,Math,我给一个2D射击游戏编写代码,你用鼠标射击: timeSinceLastShot+=timeSinceLastFrame; double bullet_angle = Math.atan2(MyMouseListener.getClickPosY()-posY, MyMouseListener.getClickPosX()-posX); float bullet_startX = posX+(skin.getWidth()/2)-(Bullet.getImg().

我给一个2D射击游戏编写代码,你用鼠标射击:

timeSinceLastShot+=timeSinceLastFrame;
        double bullet_angle = Math.atan2(MyMouseListener.getClickPosY()-posY, MyMouseListener.getClickPosX()-posX);
        float bullet_startX = posX+(skin.getWidth()/2)-(Bullet.getImg().getWidth()/2);
        float bullet_startY = posY+(skin.getHeight()/2)-(Bullet.getImg().getHeight()/2);
        double bullet_speedX = Math.cos(bullet_angle * Math.PI/180)*500;
        double bullet_speedY = Math.sin(bullet_angle * Math.PI/180)*500;

        if(timeSinceLastShot>(1f/shotsPerSec) && MyMouseListener.isButtonClicked(MouseEvent.BUTTON1)){
            bullets.add(new Bullet(bullet_startX, bullet_startY, bullet_speedX, bullet_speedY));
            timeSinceLastShot = 0;
        }

所有项目符号都向右,但我希望它们完全朝鼠标的方向移动。

我想您正在尝试将项目符号的角度转换为弧度,但它已经是弧度了。从本质上讲,子弹的速度是在角度=零的情况下计算的,这是直的。从cos()和sin()计算中删除“*Math.PI/180”

timeSinceLastShot+=timeSinceLastFrame;

double bullet_angle = Math.atan2(MyMouseListener.getClickPosY()-posY, MyMouseListener.getClickPosX()-posX);
float bullet_startX = posX+(skin.getWidth()/2)-(Bullet.getImg().getWidth()/2);
float bullet_startY = posY+(skin.getHeight()/2)-(Bullet.getImg().getHeight()/2);
double bullet_speedX = Math.cos(bullet_angle)*500;
double bullet_speedY = Math.sin(bullet_angle)*500;

if(timeSinceLastShot>(1f/shotsPerSec) && MyMouseListener.isButtonClicked(MouseEvent.BUTTON1)){
    bullets.add(new Bullet(bullet_startX, bullet_startY, bullet_speedX, bullet_speedY));
    timeSinceLastShot = 0;
}

非常感谢您的回复!我真的很感谢你的支持!我猜是Java。如果不是这样的话,你能给你的语言贴上标签吗?C++?@ MiTimek不能是C++。类分隔符在这里是
。这是C#或Java。@ColeJohnson:不可能是C#-
Math
方法将大写。谢谢