Я не совсем уверен, что вы имеете в виду, но первая часть не точна
float angle = rocket.rotation;
float vx = sin(angle * M_PI / 180) * xVelocity;
float vy = cos(angle * M_PI / 180) * yVelocity;
Чтобы сказать, как быстро движется ракета и в каком направлении, у вас есть два варианта:
- Скажите направление (угол) и скорость (как быстро он идет в м / с)
- Сообщите горизонтальную скорость (как быстро она движется по горизонтали в м / с) и вертикальную скорость (м / с)
Если у вас есть скорость (горизонтальная и вертикальная), вы можете рассчитать скорость и направление. А также, если у вас есть угол и скорость, вы можете рассчитать скорость (горизонтальную и вертикальную). Ваш код, кажется, рассчитывает скорость, от направления и скорость вместо направления и скорость .
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...