Java:角度移动球?

时间:2010-04-29 21:31:58

标签: 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;
  ball.posY=ball.posY+(int)velosity_Y;

我使用(int)velosity_X(int)velosity_Y,因为在ball类中我绘制了对象

g.drawOval(posX, posX, width, height);

此处g.drawOval需要int。我不知道这是不是一个问题。此外,如果我使用角度30它会变为+ X和+ Y但是如果我使用角度35它会变为-X和-Y。我没弄清楚如何在Java中使用坐标系。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

使用Math#toRadians()

scale_X = Math.sin(Math.toRadians(angle));
scale_Y = Math.cos(Math.toRadians(angle));

答案 2 :(得分:2)

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

一种方法是在最后一刻(当你需要将值传递给方法调用时)将你的浮点数(或双精度数)向下转换为int。这有点像矫枉过正,但除了你没有使用的CPU之外什么都不会伤害 - 并且可以防止错误。