Попытка выяснить новый угол поворота ракеты - PullRequest
0 голосов
/ 07 июня 2011

у меня есть этот код

float angle = rocket.rotation;
float vx = sin(angle * M_PI / 180) * xVelocity;
float vy = cos(angle * M_PI / 180) * yVelocity;
CGPoint direction = ccp(vx, vy);
[rocket setPosition:ccpAdd(rocket.position, direction)];

yVelocity -= 0.2;

в основном он запускает ракету в том направлении, в котором я его установил.Это прекрасно работает, ракета идет вверх, затем падает нормально.Теперь мне нужно изменить направление вращения ракеты в соответствии с новым направлением, которое я устанавливаю, чтобы ракета вращалась правильно в зависимости от того, как она летит.Как я могу определить новый угол, который мне нужен, чтобы правильно вращать ракету?Я предполагаю, что могу использовать новое направление, чтобы создать этот новый угол, но я не уверен, как.Спасибо

1 Ответ

2 голосов
/ 07 июня 2011

Я не совсем уверен, что вы имеете в виду, но первая часть не точна

float angle = rocket.rotation;
float vx = sin(angle * M_PI / 180) * xVelocity;
float vy = cos(angle * M_PI / 180) * yVelocity;

Чтобы сказать, как быстро движется ракета и в каком направлении, у вас есть два варианта:

  1. Скажите направление (угол) и скорость (как быстро он идет в м / с)
  2. Сообщите горизонтальную скорость (как быстро она движется по горизонтали в м / с) и вертикальную скорость (м / с)

Если у вас есть скорость (горизонтальная и вертикальная), вы можете рассчитать скорость и направление. А также, если у вас есть угол и скорость, вы можете рассчитать скорость (горизонтальную и вертикальную). Ваш код, кажется, рассчитывает скорость, от направления и скорость вместо направления и скорость .

float angle = rocket.rotation;
xVelocity = sin(angle * M_PI / 180) * speed;
yVelocity = cos(angle * M_PI / 180) * speed;

yVelocity -= 0.2f;//apply gravity

//now we need to find the new angle and speed again
//speed is easy, Pythagoras helps
speed = sqrt(xVelocity*xVelocity + yVelocity*yVelocity);
//angle is more difficult, luckily atan2 solves this:
angle = atan2(yVelocity,xVelocity);

//now we can update the rocket
//Sorry, but I don't know COCOS...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...