Ява: двигая мяч под углом? - PullRequest
3 голосов
/ 30 апреля 2010

Я начал изучать физику игры, и я пытаюсь перемещать мяч под углом. Но это не меняет своего угла. Система координат 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 ]

7 голосов
/ 30 апреля 2010

Math.sin () и Math.cos () ожидают угол в радиан . Вы должны преобразовать ваши углы в радианы (угол * Math.PI / 180).

2 голосов
/ 30 апреля 2010

Проверьте ваши типы. Вы, вероятно, хотите, чтобы все было с плавающей точкой, потому что ваши переменные масштаба будут меньше единицы, больше нуля. Если они умножаются на целые, есть большая вероятность, что вы все время будете конвертировать в 1 или 0. Я не совсем уверен в этом, я бы написал несколько простых уравнений, чтобы убедиться (а не запомнить все правила), если бы я был вами.

Один из способов сделать это - уменьшить число с плавающей запятой (или удвоить) до int в последний возможный момент (когда вам нужно передать значения в вызов метода). Это немного излишне, но не повредит ничего, кроме процессора, который вы все равно не используете - и может предотвратить ошибки.

2 голосов
/ 30 апреля 2010

Использование Math # toRadians ()

scale_X = Math.sin(Math.toRadians(angle));
scale_Y = Math.cos(Math.toRadians(angle));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...