Saya sudah memiliki pengalaman yang wajar dengan C ++ dan OpenGL, dan saya baru-baru ini memutuskan untuk mencoba pengembangan game mobile. Setelah berhasil membuat aplikasi OpenGL ES Android sederhana menggunakan Java, saya meneliti cara untuk menargetkan Android dan iOS dengan kode penulisan ulang sesedikit mungkin. Saya mencoba menggunakan alat pengembangan aplikasi lintas platform Visual Studio 2015 dengan bangga, tetapi menemukan mereka terlalu baru dan karenanya sangat tidak terdokumentasi. Saya bisa membuat proyek templat yang diberikan program kepada saya, tetapi saya tidak tahu bagaimana, mengingat templat ini, saya dapat menambahkan aset ke dalam permainan atau menangani input layar sentuh.
Sayangnya saya memiliki keinginan spesifik, terlalu spesifik untuk ditemukan dengan Google. Saya ingin membuat game OpenGL ES menggunakan C ++, dengan pembungkus khusus platform tipis untuk Android dan iOS. Orang-orang telah mengajukan pertanyaan serupa kepada saya (walaupun tidak persis sama), dan lebih dari satu orang yang menjawab telah menyatakan bahwa apa yang ingin saya lakukan tidak hanya mungkin, tetapi juga relatif mudah, karena saya tidak perlu khawatir tentang UI.
Saya mencoba tutorial ini , tetapi sudah hampir tiga tahun dan karena itu mungkin dirancang untuk teknologi yang lebih tua, dan akibatnya saya bertemu dengan berbagai bug yang tidak ditemukan. Sampai sekarang, tutorial itu adalah hal yang paling dekat dengan apa yang saya inginkan yang saya temukan. Yang lainnya hanya untuk Android, atau merekomendasikan agar saya membayar ratusan dolar per tahun untuk menggunakan Marmalade SDK. Kadang-kadang saya merasa seperti hanya menulis kode dua kali, sekali di Jawa dan sekali di Objective-C, tetapi saya tetap termotivasi oleh pengetahuan bahwa solusi ini mungkin, tetapi untuk beberapa alasan, tidak dibahas di mana pun dalam detail modern mana pun.
Sebagai rangkuman, saya ingin membuat game OpenGL ES untuk iOS dan Android, dengan basis kode C ++ tunggal yang dibungkus dengan sejumlah kecil kode khusus platform. Namun, terlepas dari kenyataan bahwa beberapa orang telah merekomendasikan pendekatan ini, tidak ada yang bisa memberi tahu saya bagaimana melakukannya. Dapatkah seseorang memberi tahu saya jika itu benar-benar mungkin, dan jika demikian, apa yang dapat saya lakukan atau ke mana saya bisa belajar caranya?
Jawaban:
Anda dapat menemukan jawaban saya untuk pertanyaan serupa di sini untuk membantu.
Anda juga mungkin merasa terbantu untuk melihat ke dalam kode sumber solusi lain. The Godot Engine misalnya adalah mesin game open source lintas platform sehingga Anda tidak perlu membayar apa pun.
Seperti yang saya sebutkan dalam jawaban saya yang lain Anda tidak perlu (dan kemungkinan tidak bisa) mengandalkan satu IDE untuk melakukan pekerjaan untuk Anda. CMake , Scons , dan banyak alat build lainnya dapat membantu proses kompilasi / pembangunan lintas lintas platform dan IDE.
Godot Engine , misalnya, menggunakan Scons dan proyek LLVM (alias kerangka kerja kompiler yang digunakan oleh clang kompiler C / C ++ / Objective-C) menggunakan CMake .
Pendekatan populer untuk gim adalah membuat mesin di C / C ++ dan, seperti yang Anda sebutkan, abstrak perincian platform yang jauh. Ketika datang ke iOS dan Android ini adalah logika manajemen siklus hidup yang berinteraksi dengan OS. Jika Anda ingin bekerja ekstra dan memanfaatkan Emscripten juga mengkompilasi untuk asm.js dan menyadari dekat kecepatan asli dalam browser, Anda melakukan sesuatu yang mirip dengan abstrak pergi loop utama di balik apa sebesar requestAnimationFrame panggilan.
Emscripten merekomendasikan penggunaan SDL untuk membuat proses porting lebih mudah karena dapat membantu menangani abstrak platform spesifik, tetapi tidak ada yang menghentikan Anda dari melakukan ini sendiri (selain banyak penelitian, debugging, dll).
Jika Anda benar-benar gila, Anda dapat melakukan apa yang saya lakukan dan menulis bahasa Anda sendiri menggunakan kekuatan LLVM untuk dikompilasi ke C ABI asli atau bahkan JIT pada platform yang didukung.
Intinya adalah ya itu memang mungkin, tetapi beberapa jalan lebih rumit / memakan waktu daripada yang lain.
Catatan: Anda mungkin perlu menggunakan Mac OSX melalui Mac, VM , atau Hackintosh dengan XCode untuk dikompilasi ke iOS. Ini adalah salah satu dari banyak alasan saya menemukan Macbook Pro menjadi kandidat yang bagus untuk sistem pengembangan.
Note2: Perlu disebutkan bahwa banyak mesin lintas platform saat ini menggunakan bahasa scripting untuk logika spesifik game. Unity bahkan tidak membiarkan Anda mendekati kode sumbernya misalnya (meskipun Anda dapat menulis plugin asli). Ini dapat membantu mempercepat siklus pengembangan serta menjaga porting seminimal mungkin karena bahasa skrip adalah platform agnostik (terutama bahasa yang ditafsirkan berjalan di VM). Tujuan bahasa saya adalah untuk memungkinkan JIT (kebanyakan untuk penghematan waktu pengembangan) dan kompilasi statis.
Note3: Jika Anda belum menemukan ini. Jika Anda tidak menggunakan SDL atau solusi lain yang abstrak spesifik platform, Anda perlu memanfaatkan fitur antarmuka C / C ++ spesifik platform. Dengan iOS, ini cukup sederhana di XCode karena kompiler (dentang seperti yang disebutkan di atas) sudah mendukung C / C ++. Dengan Android Anda perlu memanfaatkanpanggilan NDK dan marshall antara Java dan C / C ++.
sumber