Apa dasar-dasar pengembangan game? [Tutup]

12

Saya benar-benar tidak mengerti bagaimana video game dapat dikodekan.

Saya seorang programmer pemula dan hanya memiliki pengalaman menulis aplikasi konsol yang melakukan matematika dan apa yang tidak. Saya tidak mengerti bagaimana proses logis ini dapat membuat gambar bergerak di layar (video game). Jelas jika saya melompat ke buku pengembangan game atau sesuatu seperti itu saya akan mengerti tapi saya saat ini masih memahami dasar-dasar pemrograman pada umumnya. Adakah yang bisa memberikan penjelasan sederhana, mengkodekan dengan bijaksana, pada lompatan antara membuat komputer melakukan matematika sederhana untuk membuat komputer menghasilkan program grafis yang luar biasa seperti video game? Mungkin ada beberapa video pengantar yang bisa saya tunjuk?

Mat
sumber

Jawaban:

14

Dengan asumsi Anda adalah pemula mutlak dalam pemrograman, dan untuk mendasarkan contoh saya pada sesuatu yang mungkin Anda ketahui, saat menulis aplikasi konsol yang memiliki menu di mana Anda ingin pengguna memilih di antara opsi yang tersedia, apa yang akan Anda lakukan pertama kali?

Jika Anda berpikir untuk membuat menu, Anda ada benarnya, tetapi bagaimana jika setelah pengguna menekan tombol yang bukan bagian dari opsi yang tersedia,

  1. akan keluar aplikasi Anda, atau
  2. haruskah itu berlanjut sampai pengguna menekan tombol "Keluar"?

Taruhan saya adalah # 2, aplikasi akan berlanjut sampai pengguna secara tegas menekan tombol untuk keluar dari aplikasi konsol.

Sebuah game entah bagaimana rasanya! Kapan Anda ingin game keluar? Kapan pengguna memilih, kan? Oleh karena itu, aksi atau menu permainan harus bertahan hingga pengguna ingin keluar. Kemudian, Anda harus membuat lingkaran yang memberi tahu program untuk melanjutkan sampai tombol untuk keluar ini telah ditekan.

Anda baru saja diperkenalkan ke Loop Game. Game hanyalah program lain yang berjalan hingga keluar dari pengguna secara tegas.

Saat berada di loop game, saat Anda memainkan game, gerakannya adalah gambar yang diambil di layar dengan koordinat tertentu. Ketika pengguna / pemain menekan tombol arah seperti [Left], maka Anda membuat gambar Anda menyegarkan koordinat sambil mengurangi koordinat X-nya sehingga Anda memberi kesan untuk gerakan ke arah kiri. Anda harus mendapatkan input ini untuk mendapatkan tindakan apa yang diinginkan pemain / kapalnya untuk dilakukan selanjutnya. Kemudian, Game Loop terus berlanjut hingga Anda bisa mendapatkan tindakan lain yang diinginkan dari pemain, hingga game keluar.

Yah, saya khawatir jawaban ini mulai cukup lama, jadi izinkan saya untuk mengarahkan Anda ke dua pertanyaan lain yang mungkin menarik bagi Anda, saya harap.

  1. Di mana mulai menulis game, tutorial atau sejenisnya?
  2. Memindahkan sprite saya di XNA menggunakan kelas .

Tautan ketiga ini bukan tentang bagaimana memulai menulis game, tetapi tentang bagaimana membuat gerakan sprite di layar. Karena Anda juga bertanya tentang bagaimana membuat grafik bergerak di layar, saya pikir ini dapat menarik minat Anda.

Saya harap ini membantu! =)

Will Marcouiller
sumber
4

Saat Anda membuat aplikasi konsol, kemungkinan besar Anda menggunakan fungsi yang disebut print () atau read () atau write (). Alih-alih ini, game grafis menggunakan fungsi lain yang bisa setinggi set_pixel () untuk mengatur warna piksel individu pada layar, ke seluruh kerangka kerja yang memungkinkan Anda menggambar model tiga dimensi dengan banyak efek.

Tapi ide utamanya sama dengan aplikasi konsol matematika sederhana. Anda mendapatkan input dari pengguna, bertindak sesuai dengannya untuk memodifikasi beberapa variabel, dan kemudian mencetak (atau menggambar) beberapa output. Permainan dan program interaktif lainnya melakukan 30, 60 atau lebih siklus input-kalkulasi-output ini terjadi setiap detik. Tentu saja, setiap bagian bisa serumit yang Anda inginkan, tetapi biasanya semua tergantung pada input-perhitungan-output. Jadi jangan khawatir, Anda berada di jalan yang benar.

Adapun rekomendasi, saya akan mengatakan Anda terus pemrograman, sebanyak yang Anda bisa. Jika Anda tertarik untuk fokus pada pemrograman game, dan Anda hanya tahu pemrograman konsol, cobalah dan buat petualangan berbasis teks kecil atau RPG. Dengan begitu Anda akan banyak berlatih tentang cara mengelola variabel Anda, menggunakan angka acak dan mengatur kode Anda.

Setelah Anda mendapatkan pengalaman dengan itu, lanjutkan ke dasar-dasar perpustakaan grafis. Jika Anda melakukan pemrograman prosedural, saya akan merekomendasikan OpenGL, sementara jika Anda melakukan pemrograman berorientasi objek, saya akan merekomendasikan XNA.

Namun, jangan mengambil terlalu banyak barang sekaligus. Sangat mudah untuk kecewa karena mempelajari alat yang rumit, saat Anda belajar cara mengelola pohon sumber, saat Anda belajar cara beralih di atas array, saat Anda belajar cara mendapatkan input dan suara, sambil Anda sedang merancang game Anda.

Ada jalan panjang di depan, tapi ingat bahwa kesenangan itu benar-benar berjalan melewatinya.

Pertahankan kerja bagus!


sumber
4

Game komputer adalah loop tanpa akhir dari:

  • Pembaruan: Tingkatkan keadaan permainan satu irisan waktu kecil (seperti 1/80 detik).
  • Cat kondisi permainan saat ini.

Ada variasi dari ini. Beberapa gim memiliki lebih banyak pembaruan di antara masing-masing cat, atau dapat memvariasikannya untuk membuat gim mengalir sama rata pada mesin yang berbeda. Tapi itu detail teknis.

Fase pembaruan yang terjadi antara 50 dan 100 kali setiap detik (ya itu yang sering) lakukan ini:

  • Perbarui fisika game. Katakanlah bahwa seorang aktor memiliki kecepatan. Pembaruan harus memindahkannya sedikit ke arah yang benar. Juga, jika Anda menggunakan mesin fisika, itu harus memeriksa tabrakan dengan akting atau hambatan lain.
  • Perbarui aturan permainan. Inilah yang membuatnya menjadi permainan dan bukan eksperimen fisika. Katakanlah bahwa peluru mengenai aktor pemain. Aturan permainan memberi tahu pemain untuk mengurangi poin X kesehatan dan peluru untuk menghilang.
  • Pembaruan AI. Terkadang aktor yang dikendalikan komputer harus memutuskan apa yang harus dilakukan. Ke kiri atau kanan? Temukan jalan menuju tempat yang menyenangkan. Tembakan senjata.
  • Kontrol input. Perbarui aktor pemain sesuai tombol yang ditekan pada keyboard.
  • Perbarui grafik adegan. Ini dapat meningkatkan satu langkah animasi, atau memperbarui GUI untuk menunjukkan bahwa pemain sekarang memiliki 10 poin lebih sedikit kesehatan. Satu-satunya tujuan adalah membuat permainan terlihat dan terasa menyenangkan.

Di mana Anda mulai?

Persyaratan dasar untuk gim grafis adalah memprogram grafik. Pastikan Anda dapat membuka jendela, dan menggambar bola di dalamnya.

Saya menganggap Anda dapat membuat semacam kelas. Buat kelas Ball. Itu memiliki anggota berikut: x, y, deltaX, deltaY. Semua bilangan bulat dan dalam skala piksel. Sekarang, tulis loop ini.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

Ini akan membuat bola memantul dari batas jendela. Ini bukan permainan , melainkan simulasi fisik. Jika Anda menulis pembaruan fisika bola di dalam kelas bola, mudah untuk menambahkan beberapa bola. Simpan dalam daftar dan perbarui dan cat masing-masing untuk setiap frame.

Anda dapat menambahkan dayung (mensimulasikan fisika untuknya dan membuatnya dapat dikontrol dengan mouse atau keyboard) dan tujuan permainan seperti menghentikan bola mencapai dinding kiri. Jika permainan menambahkan semakin banyak bola dari waktu ke waktu, kesulitannya akan meningkat. Anda memiliki permainan.

Mengapa tidur selama (25 - workTime) milidetik? Jika Anda melakukannya seperti ini, simulasi akan berjalan dengan kecepatan 40 pembaruan dan cat per detik. Ini akan cukup lancar. Jika Anda melewatkan bagian tidur, animasinya akan tersentak-sentak, dan menghabiskan CPU 100%. Juga, kecepatan bola akan tergantung pada kecepatan mesin yang menjalankannya. Sekarang, kecepatan vertikal bola adalah 40 * deltaY piksel per detik.

Gunslinger
sumber
2

Ambil program konsol Anda yang berhitung, dan kemudian ketika Anda memasukkan jawaban yang benar, buatlah itu keluar dari confetti ... Itu sudah menjadi permainan (Siapa pun selain saya yang bermain Math Blaster saat kecil? :)).

Mengenai bagaimana komputer dibuat untuk menciptakan lingkungan gim, kadang-kadang bisa sedikit membungkus kepala Anda tetapi kadang-kadang tergantung pada aplikasi pemahaman manusia tentang dunia di sekitar mereka. Game menggunakan matematika, fisika, dan sains yang sama untuk mendefinisikan diri mereka sendiri saat kita berlaku pada dunia di sekitar kita untuk menjelaskan cara kerjanya.

Permainan Sim adalah contoh yang baik dari nyata ke virtual. Beberapa waktu yang lalu saya membaca sebuah wawancara dengan orang di belakang permainan Sim dan hampir semua dari mereka, tanpa kecuali, lahir dari membaca tentang topik yang mencoba menjelaskan dunia di sekitar kita, kemudian memanfaatkan dengan rumus matematika dan dimasukkan ke dalam lingkungan virtual untuk mewakilinya. SimCity misalnya, berasal dari mencoba untuk mensimulasikan dasar-dasar ekonomi.

Adapun secara spesifik bagaimana Anda membuat lingkungan game 3D, memasukkan fisika di dalamnya, menambahkan audio, biarkan pengguna mulai berinteraksi dengannya .. Yah itulah tujuan situs ini dan banyak lainnya di sini dan tidak mungkin untuk jumlah jawaban yang lebih spesifik.

Pada akhirnya saya menggambarkan video game sebagai basis data yang sangat cepat dan terbatas. Mereka sangat fokus pada data relasional dan akses data kecepatan tinggi .. Maksud saya jika Anda membuat frame setiap 60 detik, Anda sedang memproses data dalam jumlah besar yang berpotensi sangat cepat berdasarkan pada hubungan di mana pemain berada dalam permainan. untuk semua data lain yang dilacak oleh game :)

James
sumber
Lol, "video game sebagai basis data set data terbatas yang sangat cepat" mungkin hanya menambah kebingungan.
michael.bartnett
1

Yang perlu Anda pahami adalah matriks. Mereka mendukung permainan. Setelah Anda memahami kekuatan matriks, Anda akan melihat bagaimana gim dikurangi menjadi matematika sederhana.

Anda mengambil posisi titik di ruang permainan. Anda memproyeksikannya menggunakan matriks ke layar (temukan koordinat layarnya). Anda menginterpolasi beberapa piksel antara itu dan itu simpul tetangga, dan Anda selesai. Itu jelas penyederhanaan yang sangat besar, tetapi dasar-dasar rasterisasi sama sekali tidak rumit begitu Anda menemukan matriks.

DeadMG
sumber