Trik sebenarnya dengan ini adalah sains tingkat sekolah menengah; yang seharusnya Anda lakukan. Jika Anda tidak melakukan pencarian cepat Google akan membantu Anda memulai . Untuk menjelaskan bagaimana Anda menghindari pola pikir 'pemula', ambil contoh pendarat bulan .
Setelah Anda membaca bahwa [change in position] = [velocity] * [time passed]
menjadi jelas bahwa Anda perlu melacak variabel-variabel tersebut:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
Setelah itu, Anda cukup menerapkan kecepatan ke posisi setiap frame:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
Sekarang kami ingin mengubah kecepatan setiap frame sehingga kami dapat menambah gravitasi. Menurut sumber yang sama persis [change in velocity] = [acceleration] * [time passed]
. Karena itu kita dapat menerapkan prinsip yang sama persis:
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;
Sekarang Anda membutuhkan cara bagi pemain untuk mengendalikan pesawat ruang angkasa. Dari membaca lebih lanjut tentang fisika dasar, Anda akan belajar bahwa gerak adalah hasil dari kekuatan - saya tidak dapat menemukan sumbernya tetapi [change in acceleration] = ([force] / [mass]) * time
(sejauh yang saya ingat). Jadi ketika pemain menekan tombol, Anda cukup mengatur fx
dan fy
variabel untuk sesuatu dan menerapkan persamaan selama pembaruan Anda.
Pada akhirnya Anda perlu memikirkan fisika di sekitar objek dalam gim Anda - dan alih-alih mencoba membuatnya bergerak sesuai cara yang Anda pikirkan, lebih baik mencari persamaannya .
Catatan di Masa Depan: Ingatlah bahwa ini jelas bukan cara terbaik untuk melakukan fisika (ini disebut Euler Integration dan dapat menyebabkan beberapa skenario aneh pada frame rate rendah) - Anda perlu melihat ke cara lain dalam melakukan sesuatu (Artikel itu memiliki cukup banyak artikel bagus tentang dasar-dasar telanjang). Namun, tetaplah dengan Euler Integration untuk saat ini, karena itu artinya Anda mencoba untuk belajar satu hal lebih sedikit.
Game mana yang akan mengajarkan Anda bagaimana cara berpikir dengan pola pikir yang benar?
Bagaimana Anda menguji bahwa Anda telah melakukan hal-hal dengan benar dan dengan pola pikir yang benar? Masukkan Sleep(10 milliseconds)
dalam lingkaran permainan Anda dan semuanya masih harus bergerak dan bereaksi dengan cara yang sama seperti framerate penuh.
Akhirnya, harap jauhkan dari 3D (dan oleh karenanya Kuarter dan Matriks) sampai Anda memiliki pengalaman yang baik dalam membuat game 2D berfungsi. Saya berani mengatakan bahwa beberapa pengembang game tidak benar-benar tahu cara kerja Quaternions atau Matrices - tetapi hanya tahu cara menggunakannya - mendekati mereka nanti (atau tidak pernah sama sekali, game 2D sangat menyenangkan dan bisa sangat berhasil). Anda tidak benar-benar perlu tahu aljabar linier dan sebagainya untuk melakukan ini di tingkat dasar (tetapi itu benar-benar membantu, jadi pergilah ke beberapa kelas malam jika Anda bisa).
Bonus terakhir: Satu hal yang selalu dikatakan guru seni saya adalah "jangan menggambar apa yang Anda pikir Anda lihat, menggambar apa yang Anda lihat." Hal yang sama berlaku di sini "jangan memodelkan apa yang Anda pikir terjadi ( object.position++
), memodelkan apa yang terjadi (` object.position + = kecepatan * waktu) "- setidaknya ke batas yang wajar (Anda tidak memodelkan sistem yang sangat akurat, tetapi membuat sesuatu yang merupakan tiruan yang baik).