C ++ 'da Android oyun geliştirme


26

Öncelikle c / c ++ geliştiricisi olarak, her zaman benim için mobil oyun geliştirme için tek seçeneğin c / c ++ (ve C nesnesini en aza indirgemek) için izin veren iOS kullanmak olduğunu düşündüm.

Yine de bir arkadaşımdan duydum, bu android c ++ kodunun android üzerinde çalışmasını sağlayan yerel bir geliştirme araç setine sahip.

Bunu kimse kullandı mı ve öyleyse, nasıl buldun? Yani, iOS gibi "sadece işe yarayacak mı" veya mevcut çok çeşitli android cihazlardan dolayı dikkat edilmesi gereken hususlar var mı?

Yanıtlar:


26

Android API'leri Java'dır. Google, 2010’dan bu yana C / C ++ geliştiricileri için NDK (SDK) sağlıyor.

NDK iki yol sunar:

  • Android 1.5 cihazlar için, bir elf kütüphanesini yükleyebilir ve bir JNI köprüsü ile java uygulamasından kullanır.
  • Android 2.3 cihazlar için, Tam Ekran Uygulaması için Java Aktivite kodunu atlamak için bir NativeActivity kullanabilirsiniz.

NDK birkaç C / C ++ API sunar:

  • biyonik denilen sözde bir libc: birçok fonksiyon mevcut değildir
  • bir pthread kütüphanesi
  • OpenGL ES 1.x (> Android 1.5) ve OpenGL ES 2.x (Android 2.0)
  • OpenSL (Android 2.3'te sınırlı destek)

Ancak birçok API yalnızca Java'dır (JNI aracılığıyla da kullanılabilir).

NDK 5 sürümü, sunduğu C ++ geliştiricileri için ilk kullanılabilir:

  • RTTI
  • İstisnalar destekliyor
  • STLport
  • Çok iş parçacıklı programlar için gdb desteği

En acı operasyon android cihazlarda hata ayıklamadır. Bu yüzden önce masaüstü platformunda, sonraki iOS platformunda (Simülatörde) ve Sonunda (Android) hata ayıklamak için kendi çoklu platform çerçevemi (OS X, Windows, Linux, iOS ve Android) geliştiriyorum.

Android Emulator (simülatör değil) düşük performansa sahiptir ve OpenGL ES 2.x'e öykünemez. Geliştirilmesi için gerçek cihazlar öneririm.

Birçok yararlı bilgiyi bulabilirsiniz:


"giriş kodu" bağlantısı şimdi bozuldu.
Josh1billion

1
sabit: Ellismarkov'u IOPixel olarak değiştir
Ellis

9

Android NDK'yi iki SDL + OpenGL oyununu Android'e taşımak için başarıyla kullandım ve şaşırtıcı derecede kolay buldum. GL bağlamını oluşturan ve C ++ kodunun geri çağırması için giriş, ses ve görüntü yükleme gibi yardımcı sınıflar sağlayan 200 satırlık bir Java sarmalayıcısı var. NDK'deki "San Angeles" örnek programı mükemmel bir başlangıç ​​noktasıdır.

Bu arada, C / C ++ programlarını bir Java satırı olmadan oluşturmak mümkün, ancak zaman zaman JVM'yi geri çağırarak bazı OS seviyesi yöntemlere erişmeyi uygun buluyorum.

Oyununuz zaten Linux'ta derlenirse, kendinizi evinizde hissedeceksiniz. Mevcut projemdeki 100'den fazla dosyadan sadece #ifdef ANDROID_NDKdördünün bir yönergesi var (görüntü ve sesle ilgili sınıflar).

Aslında, oyunu tanımlamak için harcanan zamanın çoğu, farkında olmadığım bilinen bir öykünücü hatası yüzündendi.


Geçmişte, daha önce android emülatördeki opengl oyunumu derlemek / derlemek / dağıtmak için basit bir boru hattı almaya çalışırken (sinir bozucu) sorunlar yaşadım. Beni bir kaynağa veya kullanabileceğim bir şeye yönlendirir misiniz? (Bu yardımcı programlar size açık kaynak kodlu olup olmadığını bilmiyorum, ama yaparsanız, onları görmekle ilgileneceğim.) Teşekkürler
brainydexter 4:11,

1
@brainydexter: Eminim sana çok yardımcı olacak değilim, ama benim boru hattı aşağıdaki gibidir yüzden, autotools hoşlanan bir komut adamım: sağlamak ANDROID_NDK_ROOTbunun içinde olduğuna göre ayarlanır $PATH(birlikte [sdk_location]/toolsve [sdl_location]/platform-tools); proje dizinine gitmek; kullanarak NDK kodunu derleyin ndk-build; Java kodunu derleyin ve kullanarak paketi oluşturun ant compile; kullanarak öykünücüye veya bağlı cihaza yükleyin ant install. Motoru açmaya gelince, henüz karar vermedim, ancak zaten blogda
sam hocevar

Bağlantı için teşekkürler! Blogunuza göz kulak olacağım.
brainydexter

4

Android, hedef kitlenizi çok iyi örtmesi gereken 1.5 sürümünden bu yana Android NDK ile yerel uygulamaları desteklemektedir . Uygulamanızın yerel tarafını JNI aracılığıyla yükleyen ve ileriye doğru giden, örneğin giriş ve arama yapan basit bir Android Java uygulamasına ihtiyacınız var.

NDK'nin birkaç sürümü var, ancak en yeni NDK'yi kullanabilir ve desteklemek istediğiniz hedef API'yi seçebilirsiniz. 2.3 Android sürümünden bu yana, yerel tarafta daha fazlasını yapabilir ve daha az Java koduna ihtiyacınız olabilir, ancak 2.3 için cihaz desteği şu anda çok sınırlı.

Yerel Android C / C ++ geliştirme, en azından tam ekran oyunlar için çalışan bir çözümdür ve mevcut C / C ++ OpenGL ES uygulamalarını taşımak için gereken çaba oldukça küçüktür.

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.