Bir Android oyun kaç tane konu kullanmalı?


28

En azından, bir OpenGL Android oyunu bir UI iş parçacığına ve tarafından oluşturulan bir Renderer iş parçacığına sahiptir GLSurfaceView. Renderer.onDrawFrame()En yüksek FPS'yi elde etmek için minimum miktarda çalışma yapmalısınız. Fizik, AI, vb. Her kareyi çalıştırmak zorunda değildir, bu yüzden bunları başka bir başlığa koyabiliriz. Şimdi biz var:

  1. Renderer thread - Animasyonları güncelle ve polys çiz
  2. Oyun Konu - Mantık ve periyodik fizik, AI, vb güncellemeleri
  3. UI thread - Yalnızca Android UI etkileşimi

UI iş parçacığını engellemek istemediğiniz için, oyun mantığı için bir iş parçacığı daha çalıştırıyorum. Belki bu gerekli değil mi? Hiç işleyici iş parçacığında oyun mantığı çalıştırmak için bir neden var mı?

Yanıtlar:


18

Google’ın Chris Pruett, Replica Island blogunda bu konu hakkında konuşuyor . EglSwapBuffers (), GLSurfaceView iş parçacığında engelleyici bir çağrı olduğundan, oyun mantık kodunu başka bir iş parçacığında çalıştırmak, takas arabelleği çağrısı engellerken çalışmasına izin verir. Oyununuz karmaşıksa ve saniyede 60 kare elde etmek istiyorsanız bu önemlidir.

Replica Island kaynak kodunu indirebilir ve nasıl yaptıklarını görebilirsiniz. Oyunum için benzer bir şey uyguladım (konuştuğunuz üç konu ile) ve harika çalışıyor.


2

Android standart Java Konularını desteklemektedir. İşlemleri arka plana koymak için standart İplikleri ve java.util.concurrent paketindeki araçları kullanabilirsiniz. Tek sınırlama, kullanıcı arabirimini doğrudan arka plan işleminden güncelleyememenizdir.

Kullanıcı arabirimini bir arka plan görevinden güncellemeniz gerekiyorsa, bazı Android'e özgü sınıfları kullanmanız gerekir. Bunun için android.os.Handler sınıfını veya AsyncTasks sınıfını kullanabilirsiniz.

Daha fazla ayrıntı için lütfen aşağıdaki bağlantıya göz atın ...

http://mindstick.com/Articles/7a9205de-bae7-48ba-81b5-2b2ec161d672/?Thread%20in%20Android

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.