Bagaimana pengembang game menargetkan berbagai platform (Xbox 360, PS3, PC dan Linux)?

8

Bagaimana cara pengembang game menargetkan banyak platform sekaligus? Misalnya, Xbox 360, PS3, PC dan Linux. Untuk gim 2D, mungkinkah juga menargetkan iPhone? Saya tertarik pada mesin yang digunakan (2D / 3D, dll), bagaimana pipa penyiapannya diatur dan umumnya seberapa banyak "kode inti" dapat dipusatkan tanpa harus menulis cabang kode platform khusus.

Atau, jika benar-benar batang kode yang terpisah biasanya dipelihara untuk setiap platform, bagaimana perpustakaan / kode digunakan kembali (dalam hal menghubungkan dan modularisasi)?

sean2078
sumber

Jawaban:

11

Untuk pengembangan game konsol komersial, pengaturan sistem build untuk menargetkan 360, PC, dan PS3 secara bersamaan menjengkelkan tetapi tidak terlalu sulit. Kit 360 dev hanyalah sebuah target baru baru untuk Visual Studio + beberapa alat dan menggunakan kompiler yang sangat mirip dengan kompiler standar windows MSVC ++. PS3 menggunakan ujung belakang kompiler GCC tetapi mudah dihubungkan ke ujung depan studio visual. Untuk gameplay dan kode utilitas umum, secara umum dimungkinkan memiliki kode yang 99% sama antara 3 platform. ADA beberapa ketidakcocokan antara GCC dan MSVC ++, tapi untungnya jika Anda mengerjakannya di luar linux (dengan asumsi Anda menggunakan versi gcc yang dekat dengan PS3) tidak akan terlalu banyak masalah di atas itu. 1% kode terakhir yang berbeda biasanya bisa Anda perbaiki dengan kludgy #defines.

Melewati langkah-langkah dasar pembuatannya, rintangan terbesarnya adalah sistem grafis serta elemen kinerja tinggi dari gim Anda. Untuk elemen-elemen ini Anda secara realistis akan berakhir menulis kode khusus platform, atau menggunakan mesin yang ada. Memori akan menjadi masalah besar tapi itu untuk pertanyaan lain. Sebuah proyek komersial yang saya kerjakan dapat memperoleh versi konsol dari sumber PC yang semula cukup mudah, tetapi membuatnya benar-benar berkinerja baik adalah masalah yang sama sekali berbeda.

Jika Anda ingin mengintegrasikan iPhone juga Anda mungkin ingin pergi dengan semacam solusi mesin / middleware yang ada. Pengaturan iPhone pada openGL + objektif C tidak benar-benar cocok dengan platform lain. Itu sangat banyak pilihan di pihak Apple, karena mereka sangat mengecilkan penggunaan middleware yang ditafsirkan dalam aplikasi iPhone.

Ben Zeigler
sumber
Masalah terbesar (di luar kinerja umum) mungkin akan selalu dengan hal-hal yang menyentuh sistem file. Antara PC, 360, dan PS3 Anda memiliki 3 API sistem file yang hampir saling eksklusif> _ <
coderanger
Ya, grafik, kinerja, dan API khusus sistem lainnya seperti sistem file atau hal-hal seperti prestasi dan hal-hal jaringan.
Ben Zeigler
Saya tahu ini adalah pertanyaan lama, tetapi bagaimana dengan boost :: filesystem untuk filesystem API?
rwols
3

Untuk sebagian besar platform, Anda dapat menulis subsistem yang abstrak dari API khusus yang digunakan untuk memanggil dan mendapatkan informasi kembali dari platform yang Anda jalankan. IO API biasanya paling mudah untuk diabstraksikan - semua sistem file bekerja dengan beberapa asumsi mendasar tentang membuka, menutup, dan membaca dari file, bahkan ketika Anda memfaktorkan panggilan asinkron. Kemudian Anda memiliki sistem inti Anda seperti membaca input pengontrol, menanyakan waktu, mengakses memori dan primitif utas, yang sebagian besar bekerja dengan cara yang sama.

Bahkan grafik dapat diabstraksi untuk sebagian besar, dan memang di sebagian besar mesin bagus mereka. Tetapi Anda harus mengemas barang-barang 'yang dapat diurai' ke dalam kotak hitam di mana Anda tidak diizinkan untuk mengetahui apa yang terjadi di dalamnya. Anda tahu bahwa Anda memiliki 'benda' yang Anda jadikan posisi tertentu di dunia. Anda tidak tahu bagaimana itu dibuat, hanya itu saja. Dan lapisan abstraksi grafis menangani semua detail untuk menampilkannya di layar. Pipeline khusus membangun platform mengemas data grafis sedemikian rupa sehingga dapat dirujuk dari engine tanpa benar-benar mengetahui bagaimana itu direpresentasikan secara internal.

Semua yang dikatakan, ketika benar-benar turun untuk pengiriman permainan, ada bagian-bagian tertentu yang Anda tidak bisa abaikan. Akan konyol untuk berpikir Anda bisa mengirimkan kode yang sama pada iPhone seperti pada 360 atau PS3, karena mekanisme input, cara operasi yang mendasar, dan kemampuan platform terlalu berbeda. Anda dapat membuat judul berukuran iPhone pada 360, tetapi harus membatasi mekanisme inputnya hanya pada yang dapat didukung oleh 360. Jadi, kursor virtual di layar mensimulasikan jari, dan mungkin menggunakan joystick tempat input accelerometer 3D digunakan.

Lebih masuk akal, bagian-bagian gim ini dapat ditulis dengan cara yang dapat digunakan kembali, dan modul kode individu dapat diangkut di antara platform, meskipun mayoritas judulnya berbeda. Misalnya jika Anda memiliki mesin keadaan AI, itu tidak terlalu peduli apakah itu berjalan di 360, PC, atau iPhone. Game Anda akan menggunakan banyak komponen seperti itu, dan selama mereka telah dirancang dengan baik sehingga mereka mengambil input dan output yang terdefinisi dengan baik, maka sisa gim dapat dililitkan di sekitar mereka, terlepas dari platform, dan menghindari keharusan menulis ulang semua itu. komponen.

Penggunaan kembali adalah kunci untuk pengembangan lintas platform, bukan mencari mesin satu ukuran yang cocok untuk semua yang bekerja pada semua platform. Bahkan jika hal semacam itu memang ada, itu akan sangat lumpuh dengan harus bekerja pada penyebut umum terendah, itu tidak akan banyak berguna untuk membuat game dengan.

MrCranky
sumber
0

Cara menggunakan mesin multiplatafom seperti Torque atau Unity3D . Tapi saya tidak berpikir mereka bekerja pada semua plataforms itu. Ada juga cara lain: mengembangkan satu mesin ...

CrociDB
sumber