เกม Android ควรใช้เธรดกี่เธรด


28

อย่างน้อยที่สุดเกม OpenGL Android มีด้าย UI และด้าย Renderer GLSurfaceViewที่สร้างขึ้นโดย Renderer.onDrawFrame()ควรทำงานขั้นต่ำเพื่อรับ FPS ที่ยิ่งใหญ่ที่สุด ฟิสิกส์, AI, ฯลฯ ไม่จำเป็นต้องวิ่งทุกเฟรมดังนั้นเราสามารถใส่มันเข้าไปในเธรดอื่นได้ ตอนนี้เรามี:

  1. เธรด Renderer - อัปเดตแอนิเมชันและวาดโพลี
  2. เธรดเกม - อัปเดตลอจิกและฟิสิกส์, AI, ฯลฯ
  3. เธรด UI - การโต้ตอบกับ Android UI เท่านั้น

เนื่องจากคุณไม่ต้องการบล็อกเธรด UI เลยฉันจึงรันอีกหนึ่งเธรดสำหรับตรรกะของเกม บางทีนั่นอาจไม่จำเป็นเลย มีเหตุผลในการรันตรรกะของเกมในเธรด renderer หรือไม่?

คำตอบ:


18

Chris Pruett ของ Google พูดถึงปัญหานี้ในบล็อก Replica Island ของเขา เนื่องจาก eglSwapBuffers () เป็นการบล็อกการโทรในเธรด GLSurfaceView การมีรหัสตรรกะของเกมในเธรดอื่นทำให้สามารถเรียกใช้ในขณะที่การสลับการแลกเปลี่ยนบัฟเฟอร์กำลังบล็อก นี่เป็นสิ่งสำคัญหากเกมของคุณซับซ้อนและคุณต้องการบรรลุ 60 เฟรมต่อวินาที

คุณสามารถดาวน์โหลดซอร์สโค้ดสำหรับ Replica Island และดูว่าพวกเขาทำได้อย่างไร ฉันใช้สิ่งที่คล้ายกับเกมของฉัน (ด้วยสามกระทู้ที่คุณพูดถึง) และใช้งานได้ดี


2

Android รองรับ Java Threads มาตรฐาน คุณสามารถใช้เธรดมาตรฐานและเครื่องมือจากแพคเกจ java.util.concurrent เพื่อใส่การกระทำลงในพื้นหลัง ข้อ จำกัด เพียงอย่างเดียวคือคุณไม่สามารถอัปเดต UI จากกระบวนการพื้นหลังโดยตรง

หากคุณต้องการอัปเดต UI จากงานพื้นหลังคุณต้องใช้คลาสเฉพาะของ Android คุณสามารถใช้คลาส android.os.Handler สำหรับ AsyncTasks นี้หรือคลาส

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ลิงค์ต่อไปนี้ ....

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.