Я хотел бы использовать Cocos2d на iPhone, чтобы нарисовать двухмерную машину и заставить ее поворачиваться слева направо естественным образом.
Вот что я попробовал:
Рассчитайте угол наклона колес и просто переместите его в точку назначения, на которую указывают колеса. Но это создает очень неестественное чувство. Автомобиль дрейфует наполовину
После этого я начал некоторые исследования о том, как получить круг поворота из автомобиля, а это означало, что мне нужна пара констант, таких как колесная база и ширина автомобиля.
После долгих исследований я создал следующий код:
float steerAngle = 30; // in degrees
float speed = 20;
float carWidth = 1.8f; // as in 1.8 meters
float wheelBase = 3.5f; // as in 3.5 meters
float x = (wheelBase / abs(tan(steerAngle)) + carWidth/ 2);
float wheelBaseHalf = wheelBase / 2;
float r = (float) sqrt(x * x + wheelBaseHalf * wheelBaseHalf);
float theta = speed * 1 / r;
if (steerAngle < 0.0f)
theta = theta * -1;
drawCircle(CGPointMake(carPosition.x - r, carPosition.y),
r, CC_DEGREES_TO_RADIANS(180), 50, NO);
Первая пара строк - мои константы. carPosition имеет тип CGPoint. После этого я пытаюсь нарисовать круг, который показывает поворот моей машины, но круг, который он рисует, слишком мал. Я могу просто увеличить свои константы, увеличить круг, но тогда мне все равно нужно будет знать, как перемещать спрайт по этому кругу.
Я пытался следовать .NET учебнику , который я нашел по этому вопросу, но я не могу полностью конвертировать его, потому что он использует матрицы, которые не поддерживаются Cocoa.
Может кто-нибудь дать мне пару советов о том, как это начать? Я искал пример кода, но не могу его найти.
РЕДАКТИРОВАТЬ После комментариев, приведенных ниже
Я исправил свои константы, моя wheelBase теперь 50 (спрайт 50 пикселей в высоту), моя carWidth 30 (спрайт 30 пикселей в ширину).
Но теперь у меня проблема в том, что когда моя машина делает первый «тик», вращение правильное (а также размещение), но после этого вычисления кажутся неправильными.
Середина поворотного круга перемещается, а не сохраняется в исходном положении. Что мне нужно (я думаю), так это то, что под каждым углом машины мне нужно пересчитать исходный центр круга поворота. Я думаю, это легко, потому что у меня есть радиус и угол поворота, но я не могу понять, как заставить машину двигаться по кругу.
Есть еще указатели?