Apa perbedaan antara kerangka game dan mesin game?

23

Apa perbedaan antara kerangka kerja game (misalnya, XNA dengan C #, SDL untuk c ++) dan mesin game?

Apakah kerangka kerja game menggunakan mesin? Apakah mesin game merangkum sub-mesin seperti mesin fisika, mesin partikel dll? Haruskah mereka digunakan bersama, atau mereka saling eksklusif?

Saya bawa ada mesin yang terpisah untuk 2D dan 3D?

Calum Murray
sumber

Jawaban:

21

Sebenarnya tidak ada definisi ketat untuk "engine" atau "framework."

Secara umum, sebuah mesin dianggap "melakukan lebih banyak" atau memiliki lebih banyak alat dan dukungan terkait daripada sebuah kerangka kerja, yang seringkali hanya berupa kumpulan longgar fungsi terkait yang diekspos melalui beberapa API terpadu.

Untuk itu, hal-hal yang mengklaim sebagai mesin dapat menggunakan hal-hal yang mengklaim sebagai kerangka kerja untuk mencapai fungsionalitas, tetapi hal itu tidak selalu harus demikian. Demikian pula, sesuatu yang mengklaim sebagai mesin permainan dapat mengklaim bahwa itu adalah bagian penyusunnya (fisika dan rendering, dan lain-lain) diimplementasikan dengan mesin fisika atau kerangka kerja fisika. Jenis-jenis teknologi yang dirujuk oleh kedua istilah tersebut dapat digunakan secara bergantian, atau tidak.

Mungkin ada "mesin" atau "kerangka kerja" untuk apa saja - fisika, suara, dan ya, bahkan grafik 2D atau 3D.

Ini benar-benar hanya masalah terminologi, dan umumnya tidak terlalu berarti. Dari perspektif fungsionalitas, perspektif yang berfokus pada pembuatan game Anda, yang penting adalah apakah teknologi yang bersangkutan memberikan apa yang Anda butuhkan untuk membuat game Anda. Apakah itu menyebut dirinya mesin atau kerangka tidak akan ada hubungannya dengan itu.

Josh
sumber
11

Definisi sederhana yang saya gunakan: Anda dapat membangun mesin di atas kerangka tetapi Anda tidak akan pernah membangun kerangka di atas mesin. Salah satunya adalah kerangka yang menentukan aliran arsitektur dan program, yang lainnya adalah otot yang melakukan pekerjaan.

Sebagai contoh konkret, Artemis adalah kerangka kecil yang rapi untuk membangun sistem komponen tetapi Anda tidak akan pernah menyebutnya sebagai mesin. Anda dapat membangun Sistem Artemis dan komponen standar untuk membuat mesin darinya.

Patrick Hughes
sumber
1
Di perusahaan saya seseorang merancang kerangka kerja di atas mesin. Kerangka kerja ini berfungsi sebagai kumpulan suku cadang yang hilang yang tidak disediakan oleh mesin, menyatukan hal-hal yang agak tidak rapi di mesin (lama) kami. Dan menyediakan pembantu untuk memfasilitasi dev.
v.oddou
2

Kerangka kerja adalah kumpulan (biasanya) perpustakaan tingkat rendah dan hal-hal pembantu yang dapat Anda gunakan untuk melakukan apa pun yang Anda inginkan (grafik, suara, dll.). Tidak ada yang terkait game tentang suatu kerangka kerja kecuali mereka biasanya dioptimalkan atau dirancang untuk melakukan hal-hal yang umum dalam game.

Contoh: mesin memungkinkan Anda memiliki daftar entitas, masing-masing dengan posisi di peta. Kerangka kerja memungkinkan Anda untuk membuat objek 3d pada posisi tertentu.

Jadi Anda menghubungkannya dengan memberikan masing-masing entitas Anda objek 3d, dan merendernya saat diperlukan.

Dan ta-da, kamu punya permainan.

menganiaya
sumber
2

Untuk penjelasan terperinci yang sebenarnya saya sarankan membaca satu-satunya Arsitektur Mesin Game bible oleh Jason Gregory. Saya kira ini adalah karya paling lengkap tentang topik ini sejak diterbitkan. Itu tidak hanya menangani bagian C ++ tetapi juga dan penting bagi setiap programmer mesin teori / arsitektur di belakang. Ini adalah titik awal yang baik terlepas dari bahasa. Untuk mendapatkan gambaran apa yang sedang kita bicarakan adalah gambar ini dari buku

Biarkan saya mencoba menjawab pertanyaan itu.

Apa pun yang Anda tulis akan menjadi kode :-) setelah pengalaman bertahun-tahun, tulis apa yang Anda butuhkan dan bagaimana Anda membutuhkannya atau gunakan apa yang menyediakan apa yang Anda butuhkan.

Engine istilah dan kerangka kerja berasal dari arsitektur perangkat lunak bersama dengan istilah lainnya. Jadi mari kita mulai dengan istilah dasar dan mari bergerak ke atas.


Perpustakaan

Contoh umum: perpustakaan matematika yang menyediakan semua tipe dan fungsi dasar untuk perhitungan matematika (Vektor, Matriks, ...) atau perpustakaan gambar (jpeg atau png) yang menyediakan fungsionalitas untuk menulis gambar jpeg atau png

Dalam Unity 3D Math adalah pustaka matematika.

Teori: sebuah perpustakaan menyediakan fitur khusus di sekitar topik (misalnya matematika) DAN dipanggil oleh pemrogram sesuai permintaan .

Beberapa pratinjau: mungkin ada perpustakaan yang memegang kerangka kerja alias menjadi kerangka perpustakaan.


Kerangka

Teori: Kerangka kerja memperkenalkan inversi kontrol . Ini berarti pengembang sebagian besar waktu tidak memanggil metode kerangka kerja tetapi kerangka kerja memanggil kode pengembang. Pengecualian adalah ketika Anda harus mengintegrasikan perpustakaan kerangka kerja dalam kode Anda dan harus memulai kerangka kerja. Pustaka kerangka kerja menyediakan semua metode dan fungsi dan antarmuka untuk kerangka kerja dengan penggunaan khusus. Jadi framework bisa ada di perpustakaan.

Contoh umum: The Unity 3D MonoBehaviour menyediakan metode seperti Sedarlah, Mulai, Diupdate. Pengembang mengimplementasikan metode ini dan kemudian metode ini dipanggil oleh kerangka kerja (manajemen objek game) (ini adalah inversi kontrol) . Sama dengan metode OnCollisionEnter, OnCollisionExit. Mereka berada di Monobehaviour yang sama tetapi saya berani bertaruh mereka dipanggil oleh kerangka fisika.


Pratinjau: Engine, Runtime, Editor, SDK

Karena istilah mesin selalu agak kabur dan masih (dan tidak menjadi lebih baik dengan perkembangan teknologi lebih lanjut) beberapa penjelasan preview.

Istilah engine digunakan untuk banyak hal dan tidak dapat secara unik mengatakan mana yang benar. Kembali pada tahun 2004 ketika saya pertama kali berhubungan dengan mesin permainan menulis itu juga tidak jelas. Anda memiliki mesin gim dalam arti semacam pemuatan kode data yang telah ditentukan dan membiarkan Anda bermain gim. Karena memuat data yang telah ditentukan mereka disebut mesin data-driven. Anda mengkompilasinya satu kali dan data eksternal bisa saja merupakan game yang berbeda tanpa mengompilasinya. Pada beberapa titik waktu ini sama seperti runtime.

Editornya jelas. Ini memungkinkan Anda menentukan data yang telah ditentukan dimuat oleh mesin / runtime.

Mesin dengan editor disebut SDK (misalnya Hammer SDK).

Lalu ada / mesin khusus. Mesin phyis, mesin render, mesin suara, mesin manajemen objek game, mesin jaringan, ....

Menurut pendapat pribadi saya itu bukan mesin (terutama mesin render BUKAN mesin permainan karena hanya rendering). Ketika saya menggunakan mesin game Google hasilnya berisi 90% mesin render murni yang bukan mesin game. Saya akan memanggil mereka semua perpustakaan tetapi karena mereka dapat memuat data yang telah ditentukan mereka akan cocok dengan istilah mesin data-driven.

Catatan singkat terakhir sebelum kita membahas detail: Saya berhasil lulus dengan gelar master dalam ilmu komputer. Tesis master saya menangani topik "bagaimana mengembangkan inti dari mesin game". Berarti bagian dari kode yang petunjuk bersama semua mesin lainnya, apakah manajemen objek game, loop game, dll ...

Saya menerbitkan tesis master saya sebagai buku (pendek). Satu-satunya komentar di Amazon dari pembeli / pembaca adalah (setelah beberapa tahun keluar): ini bukan tentang mesin game. Karena saya lulus dengan sukses dan karena itu telah mempertahankan tesis saya terhadap 3 programmer berpengalaman (2 di antaranya didedikasikan untuk game dan aplikasi interaktif) saya kira saya telah menulis mesin permainan.


Editor

Mudah: memungkinkan Anda menentukan data dalam format yang diminta oleh bagian lain dan karenanya menghilangkan permintaan untuk menulis file-file itu dengan tangan atau menggunakan alat eksternal untuk membuatnya.

Inilah yang dilakukan editor Unity 3D.


Runtime

Istilah ini sering digunakan sama dengan mesin (yang bisa benar atau salah).

Runtime mengeksekusi data yang dihasilkan dan melakukan apa yang harus dilakukan dengan data. Misal menunjukkan permainan dan membiarkan Anda bermain game. Itu tidak membuat data apa pun (kecuali mungkin menyimpan game) dalam arti Anda tidak dapat memodifikasi game itu sendiri dengan itu.

Unity Web Player adalah / adalah runtime yang memungkinkan Anda memainkan game Unity dalam browser web.

Anda dapat memuat dan menjalankan beberapa game berbeda dengan runtime yang sama.

Dalam kasus API skrip Unity 3D, ada pemotongan antara fungsionalitas yang akan berfungsi dalam game dan fungsionalitas yang hanya akan berfungsi di dalam editor.


SDK

Istilah ini sering juga disebut kerangka kerja .

Saat itu SDK telah menjadi bundel alat seperti editor, IDE (lingkungan pengembang terintegrasi) untuk programmer, eksportir untuk format data dan runtime / engine.

Jadi SDK / framework memberi Anda alur kerja dan utilitas yang telah ditentukan dan menunjukkan kepada Anda cara (yang dirancang dengan baik) bagaimana Anda dapat (dengan mudah) membuat game.

Pada dasarnya mesin 3D Unity akan salah karena akan lebih cocok ke arah SDK. Tetapi karena Unity bahkan lebih banyak kata / definisi baru diperlukan untuk mencocokkan apa itu.

Pokoknya, untuk memperkenalkan istilah lain, SDK / framework memberi Anda pipeline pengembangan game yang telah ditentukan (tidak hanya pipeline aset tapi mungkin, seperti Unity, pipeline untuk aset, logika, build, penyebaran, ....)


Mesin

Sarkasme pada Digunakan untuk segalanya karena semua orang ingin menjadi keren dengan menulis tidak hanya perpustakaan, kerangka kerja atau permainan tetapi lebih baik menulis mesin yang lengkap. lepas sarkasme

Mari kita turunkan:

Sebuah mesin

  1. adalah bagian dari kode / perangkat lunak
  2. itu bertujuan untuk digunakan kembali dalam beberapa proyek (Anda juga dapat menulis mesin gim untuk hanya satu gim)
  3. karena digunakan kembali mesin gim memisahkan bagian yang dapat digunakan kembali dari bagian gim tertentu
  4. untuk dapat digunakan kembali (tergantung pada bagaimana itu dimaksudkan untuk digunakan kembali) ada rasa yang berbeda seperti mesin data-driven memuat data eksternal

Mesin dapat terdiri dari banyak mesin lain (karena semuanya disebut mesin saat ini). Mesin permainan dapat mencakup

  • mesin render melakukan rendering (LAGI: dewa, sial, neraka: kode hanya melakukan rendering BUKAN mesin game)
  • mesin fisika melakukan fisika (ini adalah mesin fisika, bukan mesin game)
  • mesin AI yang menangani hal-hal AI (ini adalah mesin AI dan bukan mesin game)
  • mesin jaringan (mis. RakNet) melakukan hal-hal jaringan (ini adalah mesin jaringan, bukan mesin game)
  • mesin audio melakukan hal-hal audio (ini adalah mesin audio dan bukan mesin game)

Contoh untuk aplikasi berbasis pada mesin inti yang menyediakan kerangka kerja berbasis plug-in untuk mengkaitkan semuanya bersama-sama dalam model manajemen objek permainan berbasis komponen. Setiap subengine (render audio) adalah modul yang ditambahkan ke mesin permainan sebagai plug in. Setiap komponen dapat menjadi bagian dari subengine / modul. Dan manajemen objek game (berbasis komponen) adalah tautan penghubung antara modul-modul yang terpisah.

masukkan deskripsi gambar di sini


Definisi terdekat untuk Game Engine

Sebuah mesin permainan adalah bagian dari kode sumber permainan Anda yang menyediakan semua fungsi yang dimaksudkan untuk digunakan kembali accross beberapa permainan dan membiarkan Anda kode dan menjalankan permainan Anda. Oleh karena itu ia menyatukan semua bagian lain dari kode (rendering, audio, fisika, manajemen objek game, jaringan) yang dapat berupa perpustakaan, kerangka kerja atau mesin khusus (rendering, fisika, ...).

Mesin permainan berantakan di tengah.


monty
sumber
0

Seperti @Josh sudah nyatakan, tidak ada definisi kerangka atau mesin yang ketat, tetapi, dalam pengertian konseptual, keduanya adalah alat yang sangat berbeda.

Kerangka kerja berisi abastraksi API dasar untuk bekerja dengan, memberi pengguna alat tingkat lebih tinggi untuk berinteraksi dengan platform atau fungsi tanpa (umumnya) mengkhawatirkan kinerja, kompatibilitas, dll. Dalam contoh yang Anda berikan, SDL adalah kerangka kerja, ia memberikan Anda abstarction melalui platform, dan Anda dapat membangun perangkat lunak Anda di belakang lapisan itu tanpa khawatir tentang manajemen jendela, hal-hal spesifik OS, dll. Jika Anda ingin membangun seluruh perangkat lunak, Anda akan memerlukan kerangka kerja yang berbeda, seperti SDL untuk mengelola media dan hal-hal platform, Box2D untuk mengelola fisika, dll.

Mesin berbeda, dalam hal ini, alat mengirimkan semua yang diperlukan untuk pengembangan, mesin fisika akan memberi Anda semua yang diperlukan untuk mengelola fisika dan akan mengirimkan API yang mudah digunakan, jadi, jika Anda ingin membuat simulasi fisika, Anda tidak memerlukan perpustakaan pihak ketiga lainnya. Mesin tidak lebih dari kumpulan kerangka kerja, mesin lain, antarmuka, snippet, dan kode umum yang menyediakan segala yang dibutuhkan untuk menyelesaikan proyek tanpa perlu pihak ke-3 lainnya atau mengkhawatirkan hal-hal tingkat rendah.

PRDeving
sumber