У меня проблема с использованием b2Body-> ApplyForce () в игре IOS / cocos2D / Box2D.У меня есть объект мяча, и я применяю силу, чтобы имитировать удар по клюшке для гольфа.Пользователь устанавливает угол и силу удара, затем нажимает кнопку «стрелять», чтобы выстрелить в мяч.Код, который я использую, следующий:
CGPoint ballPosition = game.theBall.position;
b2Vec2 force;
force.x = ((game.power*POWER_REDUCTION) * cos(game.angle))/PTM_RATIO; // cocos2D angle
force.y = ((game.power*POWER_REDUCTION) * sin(game.angle))/PTM_RATIO;
CCLOG(@"Force: %f, %f", force.x, force.y);
CCLOG(@"Angle: %.4f", game.angle);
b2Vec2 point = body->GetWorldPoint(b2Vec2(0.0f, 0.0f));
body->ApplyForce(force, point);
POWER_REDUCTION - это просто определенная константа, которую я использую при тестировании, чтобы я мог влиять на мощность выстрела и набирать правильные числа.В моем методе Update я переставляю спрайт, связанный с телом Box2D, которое он представляет:
GolfBallObject *ballSprite = [self getChildByTag:GOLF_BALL_SPRITE_TAG];
if (!ballSprite)
{
CCLOG(@"in PlayLayer->update: [self getChildByTag:GOLF_BALL_SPRITE_TAG] returned nil");
}
b2Vec2 p = theBall->GetWorldPoint(b2Vec2(0.0f, 0.0f));
CGPoint newPosition = ccp(p.x*PTM_RATIO, p.y*PTM_RATIO);
ballSprite.position = newPosition;
game.theBall.position = newPosition;
CCLOG(@"In Flight - ball position: %.2f, %.2f", game.theBall.position.x, game.theBall.position.y);
theBall - это b2Body, привязанный к моему шаровому спрайту.
Независимо от того, как яотрегулируйте приложенную силу, мяч следует за тем же полетом:
Shooting - ball position: 120.00, 455.00
Force: -0.004102, 0.004030
Angle: 14.9314
In Flight - ball position: -1441.75, -731.84
In Flight - ball position: -3015.97, -1961.38
In Flight - ball position: -4591.16, -3192.20
другой:
Shooting - ball position: 120.00, 455.00
Force: -0.410169, 0.402972
Angle: 14.9314
In Flight - ball position: -1441.75, -731.84
In Flight - ball position: -3015.97, -1961.38
In Flight - ball position: -4591.16, -3192.20
Вот один, где я меняю угол:
Shooting - ball position: 120.00, 455.00
Force: -0.561694, 0.122985
Angle: 78.3243
In Flight - ball position: -1441.75, -731.84
In Flight - ball position: -3015.97, -1961.38
In Flight - ball position: -4591.16, -3192.20
IЯ никогда раньше не использовал Box2D, так что я уверен, что мне чего-то не хватает, что, вероятно, элементарно, но это поведение кажется совершенно иррациональнымИ угол, и сила кажутся несущественными.Подскажите, пожалуйста, что я делаю не так?
Спасибо!
-Дик