Phát triển trò chơi Android trong c ++


26

Vì vậy, là nhà phát triển chủ yếu của c / c ++, tôi luôn nghĩ rằng tùy chọn duy nhất để phát triển trò chơi di động đối với tôi là sử dụng iOS, cho phép c / c ++ (và giảm thiểu mục tiêu C).

Tôi đã nghe từ một người bạn, mặc dù Android có bộ công cụ phát triển riêng cho phép mã c ++ hoạt động trên Android.

Có ai đã sử dụng cái này chưa, và nếu vậy, làm thế nào để bạn tìm thấy nó? Ý tôi là, nó sẽ "chỉ hoạt động" như iOS, hay có nhiều cân nhắc cần được quan tâm hơn do có nhiều loại thiết bị Android có sẵn?

Câu trả lời:


26

API Android là Java. Từ năm 2010, Google cung cấp NDK (SDK) cho các nhà phát triển C / C ++.

NDK cung cấp hai cách:

  • đối với thiết bị Android 1.5, bạn có thể tải thư viện elf và sử dụng nó từ ứng dụng java thông qua cầu nối JNI
  • đối với các thiết bị Android 2.3, bạn có thể sử dụng NativeActivity để bỏ qua mã Hoạt động Java cho Ứng dụng toàn màn hình.

NDK cung cấp một vài API C / C ++:

  • một libc giả gọi là bionics: nhiều chức năng không có sẵn
  • một thư viện pthread
  • OpenGL ES 1.x (> Android 1.5) và OpenGL ES 2.x (Android 2.0)
  • OpenSL (hỗ trợ hạn chế trên Android 2.3)

Nhưng nhiều API chỉ là Java (cũng có sẵn thông qua JNI).

Phiên bản NDK 5 là phiên bản đầu tiên có thể sử dụng cho các nhà phát triển C ++ vì nó cung cấp:

  • RTTI
  • Hỗ trợ ngoại lệ
  • STLport
  • gdb hỗ trợ cho các chương trình đa luồng

Hoạt động đau đớn nhất là gỡ lỗi trên các thiết bị Android. Vì vậy, tôi phát triển khung đa nền tảng của riêng mình (OS X, Windows, Linux, iOS và Android) để gỡ lỗi đầu tiên trên nền tảng máy tính để bàn, nền tảng iOS tiếp theo (trên Trình mô phỏng) và Lần cuối (Android).

Trình giả lập Android (không phải trình giả lập) có hiệu suất kém và không thể mô phỏng OpenGL ES 2.x. Tôi đề nghị các thiết bị thực sự để phát triển.

Bạn có thể tìm thấy nhiều thông tin hữu ích:


Liên kết "mã đầu vào" hiện bị hỏng.
Josh1billion

1
đã sửa: thay đổi Ellismarkov thành IOPixel
Ellis

9

Tôi đã sử dụng thành công NDK của Android để chuyển hai trò chơi SDL + OpenGL sang Android và thấy nó dễ dàng đến mức đáng ngạc nhiên. Tôi có một trình bao bọc Java 200 dòng tạo bối cảnh GL và cung cấp các lớp tiện ích như đầu vào, âm thanh và tải hình ảnh cho mã C ++ để gọi lại. Chương trình mẫu "San-Angeles" trong NDK là một điểm khởi đầu tuyệt vời.

Nhân tiện, có thể xây dựng các chương trình C / C ++ mà không cần một dòng Java, nhưng tôi thấy việc truy cập một số phương thức ở cấp độ hệ điều hành bằng cách thỉnh thoảng gọi lại JVM.

Tôi nghĩ rằng nếu trò chơi của bạn đã biên dịch trên Linux, bạn sẽ cảm thấy như ở nhà. Trong số hơn 100 tệp trong dự án hiện tại của tôi, chỉ có 4 tệp có #ifdef ANDROID_NDKchỉ thị (các lớp liên quan đến hình ảnh và âm thanh).

Trong thực tế, phần lớn thời gian dành cho việc chuyển trò chơi là do một lỗi giả lập đã biết mà tôi không biết.


Trước đây, tôi đã có những vấn đề (bực bội) khi cố gắng có được hệ thống biên dịch / xây dựng / triển khai trò chơi opengl đơn giản của mình trên trình giả lập Android. Bạn có thể chỉ cho tôi một tài nguyên hoặc một cái gì đó mà tôi có thể sử dụng? (Tôi không biết nếu bạn có các lớp tiện ích đó, nhưng nếu bạn làm như vậy, tôi sẽ thích xem chúng.) Cảm ơn
brainydexter

1
@brainydexter: Tôi là một anh chàng chỉ huy thích tự động, vì vậy tôi không chắc chắn tôi sẽ rất hữu ích cho bạn, nhưng đường dẫn của tôi như sau: đảm bảo ANDROID_NDK_ROOTđược đặt, rằng nó nằm trong $PATH(cùng với [sdk_location]/tools[sdl_location]/platform-tools); vào thư mục dự án; biên dịch mã NDK bằng cách sử dụng ndk-build; biên dịch mã Java và xây dựng gói bằng cách sử dụng ant compile; tải lên trình giả lập hoặc thiết bị được kết nối bằng cách sử dụng ant install. Về việc mở công cụ, tôi chưa quyết định, nhưng tôi đã xuất bản mã trên blog
sam hocevar

Cảm ơn các liên kết! Tôi sẽ để mắt đến blog của bạn.
Brainydexter

4

Android đã hỗ trợ các ứng dụng gốc kể từ phiên bản 1.5 thông qua Android NDK , sẽ hỗ trợ rất tốt cho đối tượng mục tiêu của bạn. Bạn vẫn cần một ứng dụng Java Android đơn giản, tải phần gốc của ứng dụng thông qua JNI và chuyển tiếp, ví dụ như nhập và kết xuất các cuộc gọi.

Đã có một số phiên bản của NDK, nhưng bạn có thể sử dụng NDK mới nhất và chọn API mục tiêu bạn muốn hỗ trợ. Vì phiên bản Android 2.3, bạn có thể làm được nhiều hơn ở phía bản địa và cần ít mã Java hơn, nhưng hiện tại hỗ trợ thiết bị cho 2.3 rất hạn chế.

Phát triển Android C / C ++ bản địa là một giải pháp hoạt động ít nhất là cho các trò chơi toàn màn hình và nỗ lực cần thiết để chuyển các ứng dụng OpenGL ES C / C ++ hiện có là khá nhỏ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.