java - 角度转换为弧度,然后转换为 dx。没有像我想象的那样工作

标签 java

我目前正在开发一个非常简单的游戏,只是为了更多地学习 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 颗子弹,一颗直接向上,另外两颗稍微向右或向左,速度相同,但左边一颗比右边一颗偏多一点:

An image of the game

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

最佳答案

问题是 x 和 y 是整数。忘记了:) 基本上,我将 dx 和 dy( double )添加到 x 和 y(整数)。 由于 Java 将 double 转换为整数的方式,负数的舍入方式不同,这导致 x 更向左移动。

将 x 和 y 更改为自身加倍(然后在绘制时将它们转换为整数)解决了这个问题。

谢谢 RealSkeptic 和大家对我的帮助:D

解决了!

关于java - 角度转换为弧度,然后转换为 dx。没有像我想象的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33105021/

相关文章:

java - Android 支持 Jersey 客户端吗?

java - 发送邮件到javamail(或ftpmail?)并保存附件

java - BufferReader 不会遍历整个文本

java - 在父类(super class)/子类框架中使用 ArrayLists

java - Android SQLite 不排序

java - 如何创建自增主键?

Java - 使用 Jsoup 获取脚本标签内的文本

java - 如何使用 spark Java API 从 HDFS 读取二进制文件流?

java - 如何将整个中文字符串转换为英文字母?

java - 我不能输入 Go 键