Platformlar arası C ++ / OpenGL ES geliştirme (iOS / Android) [kapalı]


10

C ++ ve OpenGL ile zaten makul bir deneyime sahibim ve son zamanlarda mobil oyun geliştirmeyi denemeye karar verdim. Java kullanarak basit bir OpenGL ES Android uygulamasını başarıyla oluşturduktan sonra, hem Android hem de iOS'u mümkün olduğunca az yeniden yazma koduyla hedeflemenin yollarını araştırdım. Visual Studio 2015'in gururla övünen platformlar arası uygulama geliştirme araçlarını kullanmayı denedim, ancak bunların çok yeni olduğunu ve bu nedenle son derece yetersiz belgelendiğini gördüm. Programın bana verdiği şablon projelerini oluşturabilirdim, ancak bu şablonlar göz önüne alındığında, oyuna varlık ekleyebilir veya dokunmatik ekran girişini nasıl idare edebilirim.

Maalesef belirli bir arzum var, Google ile bulamayacak kadar özel. Android ve iOS için platforma özgü ince paketlerle C ++ kullanarak bir OpenGL ES oyunu yapmak istiyorum. İnsanlar bana benzer sorular sordu (tam olarak aynı olmasa da) ve yanıt veren birden fazla kişi yapmak istediğim şeyin sadece mümkün değil, nispeten kolay olduğunu belirtti, çünkü kullanıcı arayüzü hakkında endişelenmem gerekmiyor.

Bu öğreticiyi denedim , ancak neredeyse üç yaşında ve bu nedenle muhtemelen eski teknoloji için tasarlandı ve sonuç olarak çeşitli hesaplanmamış hatalarla karşılaştım. Şu an itibariyle, bu öğretici bulduğum şeylere en yakın şey. Diğer her şey ya sadece Android için, ya da Marmalade SDK'yı kullanmak için yılda yüzlerce dolar ödememi tavsiye ediyor. Bazen kodu sadece iki kez, bir kez Java'da ve bir kez Objective-C'de yazmak gibi hissediyorum, ancak bu çözümün mümkün olduğu, ancak bir nedenden dolayı, herhangi bir modern detayın herhangi bir yerinde ele alınmadığı konusunda motive oldum.

Özetlemek gerekirse, iOS ve Android için küçük bir platforma özgü kodla sarılmış tek bir C ++ kod tabanı ile bir OpenGL ES oyunu yapmak istiyorum. Bununla birlikte, birkaç kişinin bu yaklaşımı önermesine rağmen, kimse bana nasıl yapılacağını söyleyemez. Birisi bana gerçekten mümkün olup olmadığını söyleyebilir mi, eğer öyleyse, ne yapabilirim ya da nasıl yapılacağını öğrenmek için nereye gidebilirim?



1
unity3d, OP'nin kaynak erişiminiz olmadığı için sorduğundan çok uzaktır. Ben cocos2d-x kullandım ve derleme sorunları hala bir dereceye kadar orada. Objective-C etkisi de hissedilir, bazıları böyle olabilir, ama benim için bu bir dönüş. Bununla birlikte, açık kaynak kodlu bir çözümdür, bu yüzden belki de OP'lerin araştırmaya değer.
Matthew Sanders

Yanıtlar:


6

Benzer bir soruya verdiğim cevabı yardımcı olması için burada bulabilirsiniz .

Ayrıca diğer çözümlerin kaynak kodlarına bakmayı da faydalı bulabilirsiniz. Godot Motor ödemeli şey gerek asla örneğin bir çapraz platform açık kaynak oyun motorudur.

Benim söz gibi diğer cevap size gerekmez (ve muhtemelen olamaz) sizin için işi yapmak için bir IDE güvenmektedir. CMake , Scons ve diğer birçok derleme aracı , platformlar ve IDE'ler arasındaki çapraz derleme / derleme işlemine yardımcı olabilir.

Örneğin Godot Engine , Scons ve LLVM projelerini ( Clang / C ++ / Objective-C derleyicisi clang tarafından kullanılan derleyici çerçevesi olarak da bilinir ) CMake kullanır .

Oyunlar için popüler bir yaklaşım, C / C ++ 'da bir motor oluşturmak ve belirttiğiniz gibi platform özelliklerini soyutlamaktır. İOS ve Android söz konusu olduğunda, bu işletim sistemi ile arayüz oluşturan yaşam döngüsü yönetim mantığıdır. Eğer ekstra mil gidip kullanmak istiyorsa Emscripten ayrıca derlemeye asm.js , sen ne miktarda arkasındaki ana döngü uzakta soyutlayarak ile benzer bir şey yapıyoruz tarayıcıda yerli hızına yakın ve sandığından requestAnimationFrame aramalar.

Emscripten , platform özelliklerinin soyutlanmasına yardımcı olabileceğinden, taşıma işlemini kolaylaştırmak için SDL'nin kullanılmasını önerir , ancak bunu kendiniz yapmanıza engel olan hiçbir şey yoktur (diğer araştırmalar, hata ayıklama vb.).

Gerçekten, gerçekten çılgınsanız, yaptığım şeyi yapabilir ve LLVM'nin yerel C ABI veya hatta JIT'i desteklenen platformlarda derleme gücünü kullanarak kendi dilinizi yazabilirsiniz .

Mesele şu ki, evet gerçekten mümkün, ancak bazı yollar diğerlerinden daha karmaşık / zaman alıcı.

Not: iOS'a derlemek içinMac OSX'i bir Mac, VM veya XCode ile Hackintosh aracılığıyla kullanmanız gerekecektir. Bu, bir Macbook Pro'yu bir geliştirme sistemi için mükemmel bir aday olarak bulmamın birçok nedeninden biridir.

Not2: Bugün birçok çapraz platform motorunun oyuna özgü mantık için komut dosyası dilleri kullandığından bahsetmek gerekir. Unity , örneğin kaynak kodlarına yaklaşmanıza bile izin vermiyor (yerel eklentiler yazabilmenize rağmen). Bu, geliştirme döngülerinin hızlandırılmasına yardımcı olurken, komut dosyası dilleri oldukça platform agnostik olduğundan (özellikle bir VM'de çalışan yorumlanmış diller) en az düzeyde tutmaya yardımcı olabilir. Dilimin hedefi hem JIT'e (çoğunlukla geliştirme zamanından tasarruf için) hem de statik derlemeye izin vermektir.

Not3: Bunu henüz bulamadıysanız. SDL veya platform özelliklerini özetleyen başka bir çözüm kullanmıyorsanız, her platformun belirli C / C ++ arayüz özelliklerini kullanmanız gerekir. İOS ile bu, XCode'da derleyici (yukarıda belirtildiği gibi clang) zaten C / C ++ 'ı desteklediğinden oldukça basittir. Android ileJava ve C / C ++ arasında NDK ve marshall çağrılarınıkullanmanız gerekir.


1
Godot Engine'in kaynak kodunu inceledim. Biraz aşırı görünüyor; İhtiyacım olmayan özellikler olmadan kendiminkini oluşturmayı tercih ederim. Ancak bunu nasıl yapacağımdan tam olarak emin değilim. Android'de herhangi bir C ++ kodunu başarıyla çalıştıramadım.
Craig Horwood

hehe ... ya NDK piknik yapmıyor. Dürüst olmak gerekirse Google'ın geliştirici dostu kategorisinde yardıma ihtiyacı olan bir şey buluyorum. SDL kapalı limitleri kullanmak sizin için mi? Cevabı gerekirse güncelleyebileceğim çok daha fazla bilgiye sahibim.
Matthew Sanders

SDL sınır dışı değil, ama oraya gitmemeyi tercih ederim. Bir kez daha, çerçevesiz olarak yapılabileceği her zaman o kadar ilginç bilgi var.
Craig Horwood

Bu böcek beni sürekli ısırdı, bu yüzden nasıl hissettiğini biliyorum. Geçmişte NDK kullandım ve kurulum ve derleme yolunda çok fazla değişiklik olduğunu sanmıyorum. Umarım GDB'yi geçmişte terminal aracılığıyla doğrudan kullanmak zorunda kaldığınız için hata ayıklama düzeldi ve IDE'nin desteği yoktu, ancak android stüdyosuna NDK desteği eklemeye başlamış gibi görünüyor . Hellojni örneğini denediniz mi?
Matthew Sanders

NDK Bir referans olarak bgfx yarayabilecek, varlığı çok iğrenç şeylerden biridir github.com/bkaradzic/bgfx birden render arka uçları vardır, gerçi hoşunuza gidebilir gibi değil ince,
JBeurer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.