我已经开始学习游戏物理,我正试图用一个角度移动一个球。但它并没有改变它的角度。 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中使用坐标系。
答案 0 :(得分:7)
Math.sin()和Math.cos()期望角度为弧度。您应该将角度转换为弧度(角度* Math.PI / 180)。
答案 1 :(得分:2)
scale_X = Math.sin(Math.toRadians(angle));
scale_Y = Math.cos(Math.toRadians(angle));
答案 2 :(得分:2)
检查您的类型。您可能希望所有内容都是浮点数,因为您的比例变量将小于1,大于零。如果它们乘以整数,则很有可能最终会转换为1或0。我不完全确定这一点,如果我是你,我会编写一些简单的方程式以确保(而不是记住所有规则)。
一种方法是在最后一刻(当你需要将值传递给方法调用时)将你的浮点数(或双精度数)向下转换为int。这有点像矫枉过正,但除了你没有使用的CPU之外什么都不会伤害 - 并且可以防止错误。