Тело движется слишком быстро после ApplyLinearImpulse () - PullRequest
1 голос
/ 20 октября 2010

У меня есть нисходящая игра для iPhone (без гравитации), и я использую Cocos2d и Box2d.

Я пытаюсь переместить пулю по этому коду:

// 'targetPosition' is a point of touch

b2Vec2 touchInWorld = b2Vec2(targetPosition.x/PTM_RATIO, targetPosition.y/PTM_RATIO); 

b2Vec2 direction = b2Vec2(touchInWorld.x - ballBodyDef.position.x, touchInWorld.y - ballBodyDef.position.y);

b2Vec2 force = b2Vec2(direction.x, direction.y);

force.Normalize();

ballBody->ApplyLinearImpulse(force, ballBodyDef.position);

Проблема в том, что мяч быстро движется, если спрайт маленький (10x10 пикселей).* Если спрайт 50х50, то скорость меньше и выглядит нормально.

Это сводит меня с ума, потому что я вообще не могу контролировать скорость.

И не только это, если яне прикладывайте силу. Нормализуйте (), скорость отличается в зависимости от направления касания ...

Все работало замечательно, когда я использовал только Cocos2d и анимацию.Я пытался использовать Box2d для реализации столкновений, но мне кажется, что это ОГРОМНОЕ количество усилий, и я собираюсь заняться физикой самостоятельно: (

1 Ответ

1 голос
/ 26 октября 2010

Во-первых, я не уверен, но почему вы делите на PTM_Ratios здесь, я не думаю, что вам это нужно, может быть, вы обрабатываете это каким-то другим способом.

Во-вторых, 10x10 движется быстрее, чем 50x50, потому что вы устанавливаете SetMassFromShapes, поэтому при условии, что вы создаете тело 50 / PTM_RATIOSx50 / PTM_RATIO для спрайта 50x50, тело имеет большую массу, чем тело 10x10. поэтому он движется медленно.

В-третьих, вы используете Расстояние для Импульса, так что определенно, если вы не собираетесь Нормализовать, вы собираетесь получить Пропорциональный Импульс на ваше расстояние

и для Hackish Solution, если у вас больше ничего не работает, просто уменьшите PTM_RATIO!

...