Java 角度变成弧度,然后变成dx。不像我想的那样工作

Java 角度变成弧度,然后变成dx。不像我想的那样工作,java,Java,我目前正在开发一个非常简单的游戏,只是为了进一步学习Java。我确实有一些这方面的经验,但不多。 这个游戏应该是像鸡一样的入侵者 这就是我的问题。 我创建了一个Bullet类,玩家在单击空格时会发射子弹。 在构造函数中,我需要一个角度作为int参数。然后我将其转换为弧度,并使用Math.cos和Math.sin将其转换为子弹在每个轴上移动的方向: public Bullet(int x, int y, int angle) { super(x, y); double rad =

我目前正在开发一个非常简单的游戏,只是为了进一步学习Java。我确实有一些这方面的经验,但不多。 这个游戏应该是像鸡一样的入侵者

这就是我的问题。 我创建了一个Bullet类,玩家在单击空格时会发射子弹。 在构造函数中,我需要一个角度作为int参数。然后我将其转换为弧度,并使用Math.cos和Math.sin将其转换为子弹在每个轴上移动的方向:

public Bullet(int x, int y, int angle) {
    super(x, y);

    double rad = Math.toRadians(angle);

    this.dx = Math.cos(rad) * speed;
    this.dy = Math.sin(rad) * speed;
}
速度是一个静态的最终值

更新项目符号时,只需将dx和dy添加到x和y变量中

当玩家射击时,我创建了3个角度为270、265和275的子弹,都从同一个位置开始:

GamePanel.bullets.add(new Bullet(x + (width - Bullet.width) / 2, y + 5, 270));
GamePanel.bullets.add(new Bullet(x + (width - Bullet.width) / 2, y + 5, 265));
GamePanel.bullets.add(new Bullet(x + (width - Bullet.width) / 2, y + 5, 275));
我所期望的是3发子弹,一发直上,另外两发偏右或偏左,速度相同,但左发子弹比右发子弹偏多:


我不知道为什么左边的和右边的不一样。我觉得我遗漏了一些非常明显的东西,但我无法找到它。

问题是x和y是整数。忘了吧:) 基本上,我在x和y(int)上加上了dx和dy(它们是双精度的)。 由于Java将double转换为int的方式,负数的取整方式有所不同,这导致x更偏左

将x和y更改为自身加倍(然后在绘图时将其强制转换为整数)解决了此问题

谢谢你和所有帮助我的人:D


解决了

dx
dy
的类型是什么?@Bathsheba:由于
Math#sin
Math#cos
的缘故,它们会加倍。不一定。我想确切地知道。这个触发器乍一看是正确的。你在
x+(width-Bullet.width)/2
后面的意图是什么?你想在商之后加x,还是在除以2之前把所有的东西加在一起?你的
x
y
是整数吗?