Я хотел бы создать игру для изучения cocos2d
. Lunar lander
первое осуществление, происходящее в мой ум. Любой код/учебное руководство указателя/источника требуемых вычислений физики будет цениться.Спасибо!
Вам понадобится что-то вроде этого:
Вы начнете с начальных условий и пройдете цикл через несколько временных шагов. В конце каждого шага вы проверяете положение и скорость. Если y-позиция над поверхностью равна нулю или отрицательна, вы приземлились. Если скорость больше критического значения y, произойдет авария; значение меньше критического означает безопасную мягкую посадку.
Вы решите уравнения движения Ньютона численно. В вашем случае это четыре связанных обыкновенных дифференциальных уравнения первого порядка: скорость изменения скорости в направлениях x и y и скорость изменения положения в направлениях x и y. Если у вас есть двигатели, вы добавите еще одно уравнение для сохранения массы топлива.
Вы можете исключить два уравнения, если предположите, что отсутствуют x-компоненты: посадочный модуль Луны движется перпендикулярно поверхности, сила двигателя имеет ненулевую составляющую только в вертикальном направлении. Если это правда, вы сводите к трем уравнениям.
Вы будете выполнять пошаговое выполнение по времени, поэтому будет полезно ознакомиться с методами интеграции, такими как явный метод Эйлера или неявный метод Рунге-Кутты 5-го порядка.
Сложная задача - нетривиальная. Удачи.
Вычисления, необходимые для игры на лунный посадочный модуль, довольно просты. Законы движения Ньютона - это все, что вам действительно нужно - просто возьмите учебник по основам физики. Вы должны быть настроены после первой главы. В системе всего два силовых входа - сила тяжести и тяга от двигателей. Просто рассчитайте вертикальную и горизонтальную составляющие движения и соответствующим образом анимируйте свой космический корабль.
Физика очень проста: http://csep10.phys.utk.edu/astr161/lect/history/newtongrav.html
Я предполагаю, что вы не будете беспокоиться о сопротивлении или ветре, поэтому в зависимости от углов наклона (вводимых пользователем), вы будете реализовывать:
Взято из: http://en.wikipedia.org/wiki/Trajectory. Возможно, вы даже сможете обойтись без упрощения. Если вы не хотите быть сверхточным, вы можете просто сделать что-то вроде F=ma
, где F - это любое гравитационное ускорение (9,8 м/с² на Земле).
Если ваша игра в 2D, вам не нужно много математики, вам нужна физика, в частности, основы ньютоновского движения. Вероятно, вступительный курс колледжа или средней школы. Математика - это алгебра из начальной школы с вычислениями из средней школы.
Если вы рассматриваете движение вверх-вниз, то ваш корабль, по сути, является объектом, на который действует сила гравитации (постоянная зависит от вашей "луны"), отрицаемая силой, испускаемой его двигателями. Вы можете использовать это для определения ускорения, а затем и скорости. Используя скорость, вы можете сделать результат столкновения. Движение влево и вправо проще, так как если у вашей луны нет атмосферы, вы просто прикладываете постоянную силу.
Если вы хотите чего-то более реалистичного, вы можете изменить гравитационную постоянную на основе расстояния от поверхности, а также добавить силу атмосферного трения (хотя это будет не совсем наша луна).
Если ваша игра в 3D, и ваш корабль имеет боковые двигатели в дополнение к нижним, то у вас будет не только движение по месту, но и вращение. Это связано с физикой жесткого тела. AFAIK это включает в себя вычисления на уровне колледжа.
Возможно, это излишне, но я рекомендую посмотреть Numerical Recipes - прочитайте главу об обыкновенных дифференциальных уравнениях. Вам даже не нужно изучать всю главу, только первые пару разделов.
В двух измерениях, при каждой отметке вы хотите добавить вращательную тягу корабля к его скорости вращения, добавить его скорость вращения к его текущему курсу, вычислить вектор тяги, умножив синус и косинус направления его основного выхода двигателя малой тяги, добавьте этот вектор и вектор силы тяжести (прямой направленный вниз вектор некоторой величины) к его текущей скорости и добавьте текущую скорость к его положению. Если тики таймера достаточно малы, это почти все, что вам нужно сделать, кроме проверки, соприкасается ли корабль с землей. Поэкспериментируйте с величиной ваших значений тяги и силы тяжести, пока не получите игровую игру.