ApplyLinearImpulse () работает только в одном направлении - PullRequest
0 голосов
/ 15 февраля 2011

Я пытаюсь использовать как b2PrismaticJoint, так и b2MouseJoint. Мне нужно переместить мой снаряд по оси X, чтобы расположить его как цель, и я хочу проводить его только вертикально, не двигая снаряд, чтобы бросить его в этом направлении. Я использую ApplyLinearImpulse (), но независимо от того, в каком направлении я проведу пальцем, его направление всегда направлено вверх-вправо. Код:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {


   UITouch *myTouch = [touches anyObject];
   CGPoint location = [myTouch locationInView:[myTouch view]];
   location = [[CCDirector sharedDirector] convertToGL:location];
   b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

   if (_mouseJoint) {   
           _world->DestroyJoint(_mouseJoint);
           _mouseJoint = NULL;
      }
   if(_primJoint) {
          _world->DestroyJoint(_primJoint);
          _primJoint = NULL;
   }    

   if (hit) {       
    _strikerBody->ApplyLinearImpulse(locationWorld, _strikerBody->GetPosition());       
   }
}

1 Ответ

1 голос
/ 16 февраля 2011

Похоже, ваш вектор locationWorld каждый раз указывает в одном и том же направлении.Я думаю, вы хотите что-то вроде этого:

b2Vec2 impulseDirection = locationWorld - _strikerBody->GetPosition();
impulseDirection.Normalize();

const double Force = 10 * _strikerBody->GetMass(); //or anything you want
_strikerBody->ApplyLinearImpulse( Force*impulseDirection, _strikerBody->GetPosition() );

Теперь импульс будет применен к центру _strikerBody в направлении касания (относительно _strikerBody).

...