我有这个代码
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;
基本上它朝着我面对的方向发射火箭。这个工作正常火箭上升然后下降罚款。我现在需要使火箭旋转随着我设定的新方向而改变,以便火箭正确地旋转以便飞行。我如何计算出需要正确旋转火箭的新角度?我假设我可以使用新方向创建这个新角度,但我不知道如何。感谢
答案 0 :(得分:2)
我不确定你的意思,但第一部分不准确
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...