繁体   English   中英

用鼠标Math.atan2射击子弹

[英]Shooting Bullets with mouse, Math.atan2

所以我为2D Shooter编写了代码,如果您使用鼠标进行射击:

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;
        }

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

我认为您正在尝试将bullet_angle转换为弧度,但是已经在弧度中。 本质上,bullet_speed的计算角度为零,这是直的。 从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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM