试图找出火箭的新旋转角度

时间:2011-06-07 14:44:38

标签: math cocos2d-iphone

我有这个代码

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 个答案:

答案 0 :(得分:2)

我不确定你的意思,但第一部分不准确

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

要说火箭的速度和速度有多快,你有两种选择:

  1. 告诉方向(角度)和速度(以m /秒为单位的速度)
  2. 告诉水平速度(水平水平以m /秒为单位)和垂直速度(m /秒)
  3. 如果你有速度(水平和垂直),你可以计算速度和方向。而且,如果你有角度和速度,你可以计算速度(水平和垂直)。您的代码似乎是计算速度,从方向和速度而不是方向和速度

    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...