我目前正在开发一个非常简单的游戏,只是为了更多地学习 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 是整数。忘记了:) 基本上,我将 dx 和 dy( double )添加到 x 和 y(整数)。 由于 Java 将 double 转换为整数的方式,负数的舍入方式不同,这导致 x 更向左移动。
将 x 和 y 更改为自身加倍(然后在绘制时将它们转换为整数)解决了这个问题。
谢谢 RealSkeptic 和大家对我的帮助:D
解决了!
关于java - 角度转换为弧度,然后转换为 dx。没有像我想象的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33105021/