Справжня хитрість у цьому - наука на рівні середньої школи; що ви мали б зробити. Якщо ви не зробили швидкий пошук в Google, ви почнете роботу . Щоб пояснити, як ви уникаєте «початківців» думок, візьміть приклад місячного грунту .
Після того, як ви прочитали, що [change in position] = [velocity] * [time passed]
стає зрозумілим, що потрібно буде відслідковувати ці змінні:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Виходячи з цього, ви просто застосуєте швидкість до положення кожного кадру:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Тепер ми хотіли б змінити швидкість кожного кадру, щоб ми могли додати гравітації. За точно таким же джерелом [change in velocity] = [acceleration] * [time passed]
. Тому ми можемо застосувати абсолютно той самий принцип:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Тепер вам потрібен спосіб для гравця керувати своїм космічним апаратом. Читаючи детальніше про основну фізику, ви дізнаєтесь, що рух є результатом сили - я не можу знайти джерело, але [change in acceleration] = ([force] / [mass]) * time
(наскільки я пам’ятаю). Тому , коли гравець натискає кнопку , яку ви б просто встановити fx
і fy
змінні до чого - то і застосувати рівняння під час оновлення.
Зрештою, вам потрібно подумати про фізику навколо об'єктів у вашій грі - і замість того, щоб намагатися змусити їх рухатися так, як ви думали, скоріше шукайте рівняння .
Майбутня примітка: Пам’ятайте, що це, безумовно, не найкращий спосіб займатися фізикою (це називається інтеграція Ейлера і може призвести до деяких дивних сценаріїв з низькою швидкістю кадрів) - вам потрібно розглянути інші способи здійснення справ (ця стаття має досить приємна написання також на голих засадах). Однак зараз дотримуйтесь Euler Integration, оскільки це означає, що ви намагаєтесь навчитися чомусь менше.
Які ігри навчили б вас думати в правильному режимі мислення?
Як би ви перевірили, що ви все робили правильно і з правильним мисленням? Вставте Sleep(10 milliseconds)
в свій ігровий цикл, і все має рухатися та реагувати так само, як і повний кадр.
Нарешті, будь ласка, тримайтеся подалі від 3D (а отже, кватерніонів та матриць), поки у вас не буде хорошого досвіду роботи над тим, щоб 2D-ігри працювали. Я б ризикну сказати, що досить багато розробників ігор насправді не знають, як працюють Quaternions або Matrices - а просто знають, як їх використовувати - підходити до них набагато пізніше (або ніколи, 2D ігри не дуже цікаво і можуть бути досить цікавими) вдалий). Вам не потрібно знати лінійну алгебру і так далі, щоб зробити це на базовому рівні (але це дійсно допомагає, тому ходіть на деякі нічні заняття, якщо можете).
Остаточний бонус: одне, що мій учитель мистецтв мені завжди казав, - це "не малюй те, що ти думаєш, що бачиш, малюй те, що бачиш". Те ж саме стосується і тут: "не моделюйте те, що ви думаєте, що відбувається ( object.position++
), моделюйте те, що відбувається (` object.position + = швидкість * час) "- принаймні до розумних меж (ви не моделюєте ідеально точну систему, але робите те, що є гарним наслідуванням).