Java 爪哇:用角度移动球?

Java 爪哇:用角度移动球?,java,Java,我已经开始学习游戏物理,我正在尝试以一定角度移动球。但它不会改变它的角度。Java坐标系有点不同,我想我的问题就在这里。这是我的密码 这用于计算x和y速度: scale_X= Math.sin(angle); scale_Y=Math.cos(angle); velosity_X=(speed*scale_X); velosity_Y=(speed*scale_Y); 这用于在run()函数中移动球: ball.posX =ball.posX+(int)velosity_X

我已经开始学习游戏物理,我正在尝试以一定角度移动球。但它不会改变它的角度。Java坐标系有点不同,我想我的问题就在这里。这是我的密码

这用于计算x和y速度:

 scale_X= Math.sin(angle);
 scale_Y=Math.cos(angle);
     velosity_X=(speed*scale_X);
 velosity_Y=(speed*scale_Y);
这用于在run()函数中移动球:

  ball.posX =ball.posX+(int)velosity_X;
  ball.posY=ball.posY+(int)velosity_Y;
我使用了
(int)Velocity_X
(int)Velocity_Y
,因为在
球中
类I绘制对象

g.drawOval(posX, posX, width, height);
这里的
g.drawOval
需要
int
。我不知道这是不是一个问题。同样,如果我使用角度30,它会变成+X和+Y,但如果我使用角度35,它会变成-X和-Y。我没有弄清楚如何在Java中使用坐标系。

Math.sin()和Math.cos()预期角度为弧度。您应该将角度转换为弧度(角度*Math.PI/180)。

使用


检查你的类型。您可能希望所有内容都是浮动的,因为您的比例变量将小于1,大于零。如果它们与整数相乘,则很有可能最终一直转换为1或0。我不完全确定这一点,如果我是你,我会编写一些简单的方程式来确定(而不是记住所有的规则)


一种方法是在最后一个可能的时刻(当您需要将值传递给方法调用时)将浮点(或双精度)向下转换为int。这有点过分了,但除了你不使用的CPU之外,它不会伤害任何东西,而且可能会防止bug。

我改变了它,但它的角度没有改变。我可以在控制台中看到Velocity_X和Y发生了变化,但ball并没有改变它的角度。我使用了扩展JPanel的类并在这里绘制了我的球,在主类中我使用了JFrame和f.getContentPane().add(Velocity);我修复了它。对话成功。我使用了一些错误的值。这是错误的。更改
velocity
for
velocity
它无论如何都不起作用,但更容易阅读:P@Oscar:)谢谢蒂普诺的迂腐(最后,这与你的问题无关)但是“坐标系”不是由Java(语言)决定的,而是由您正在使用的特定图形库决定的。在您的例子中,我猜java.awt.Graphics(Java2D API)是使用int还是Float?如果我想得到平稳的运动,那么浮动不是一个好的选择吗?但是我的ball.posX必须是int,最后我得到int值。
scale_X = Math.sin(Math.toRadians(angle));
scale_Y = Math.cos(Math.toRadians(angle));