2011-10-01 37 views
10

Tôi đã làm việc trên một môi trường thời gian chạy động cơ trò chơi trong C++ cho các trò chơi trong tương lai của tôi và đã bắt đầu xem xét android làm nền tảng. Tôi nhận thấy rằng nó đã bị ràng buộc chặt chẽ với Java và sử dụng rất nhiều máy ảo Java.Lập trình cho Android trong môi trường 100% C++?

Nhưng có thể duy trì môi trường thời gian chạy C++ đầy đủ trong NDK của Android không? Tôi không có gì chống lại Java và chuẩn bị sẵn sàng để sử dụng nó nếu tôi có, nhưng hiệu suất là một trong những mối quan tâm chính của tôi (tôi có ý định cho các trò chơi của tôi để được tài nguyên chuyên sâu), đặc biệt là trên điện thoại.

Và nếu môi trường C++ đầy đủ có thể, chính xác tôi sẽ triển khai nó như thế nào trong Eclipse Indigo CDT? Tôi có thể tạo một trò chơi được biên dịch cho Android trước thời hạn để có hiệu suất tối đa không? Và sẽ có bất kỳ plugin bổ sung nào tôi cần cài đặt trong Eclipse không? Tôi có thể sử dụng MinGW để biên dịch các trò chơi của mình hay tôi cần sử dụng một trình biên dịch khác? Nếu tôi phải sử dụng Java theo cách này hay cách khác, có cần phải biên dịch mã C++ hay không? Đây là tất cả các câu hỏi tôi muốn trả lời để có được một môi trường phát triển mạnh mẽ trong IDE Eclipse.

Xin lưu ý rằng tôi vẫn còn khá mới đối với phát triển Android và lập trình đa nền tảng nói chung. Mục tiêu của tôi là tạo ra một công cụ trò chơi sẽ tận dụng tối đa phần cứng mới, đặc biệt là trên điện thoại!

Cảm ơn lời khuyên nào mà các bạn có thể đưa ra!

+1

Android có trình biên dịch Java JIT đặc biệt và một phần lớn môi trường Android là trong Java. Không thực sự có lý do để thích C++ với Java cho tốc độ trên Android, phần lớn tác động hiệu năng truyền thống không có ở đó. – dtech

+0

Được rồi, đó là một điều lớn mà tôi đã tự hỏi, cảm ơn. Tôi đã thực sự chỉ tìm thấy lớp NativeActivity (http://developer.android.com/reference/android/app/NativeActivity.html), trông thực sự hứa hẹn, đặc biệt là vì có vẻ như họ đang nhắm vào trò chơi C++. Tôi vẫn cần SDK Android và trình biên dịch JIT để làm việc này? – AutoBotAM

+0

JIT là một phần của Dalvik (VM của Android) và Dalvik có mặt trong mọi tiến trình trên hệ thống cho dù bạn sử dụng NativeActivity hay không - nó được sử dụng để giao tiếp với phần còn lại của hệ thống. – adamp

Trả lời

9

NativeActivity, được thêm vào Android 2.3 (API 9) có thể là những gì bạn đang tìm kiếm bằng cách viết trò chơi Android chỉ sử dụng C++. http://developer.android.com/reference/android/app/NativeActivity.html

Tuy nhiên vì bạn nói bạn mới làm quen với điều này, bạn có thể muốn bắt đầu với một trong những công cụ trò chơi Android hiện có thay vì viết ngay lập tức. Thiết bị di động có một bộ ràng buộc rất khác so với các nền tảng khác. Một chiếc điện thoại không phải là rất hữu ích nếu pin chết giữa buổi chiều, do đó, bắt đầu một dự án với mục tiêu được nêu ra là "tài nguyên chuyên sâu" đã nhận được một khởi đầu xấu. Rất ít người sẽ muốn chơi trò chơi của bạn trong 20 phút ở đây và ở đó nếu điều đó có nghĩa là họ sẽ không thể thực hiện cuộc gọi điện thoại vào buổi tối.

Nếu ý của bạn là chụp ảnh đồ họa cao cấp, hãy nhớ rằng các thiết bị có nhiều khả năng trong khu vực này và chỉ nhắm mục tiêu đến giới hạn cao đối tượng của bạn. Các GPU khác nhau có các chiến lược và đặc điểm hiệu suất rất khác nhau và tất cả đều có trường hợp chúng tỏa sáng hoặc tụt lại phía sau. Các trò chơi di động thành công nhất không phải là những trò chơi có bộ đệm cao nhất hoặc bóng tối phức tạp nhất, chúng là những trò chơi đạt được tốc độ khung hình ổn định và có phong cách riêng biệt.

Hãy xem một số công cụ trò chơi hiện có dành cho Android và dùng thử. Viết một vài trò chơi nhỏ để đưa họ đến một ổ đĩa thử nghiệm và xem họ làm ở đâu và không liên kết với những gì bạn đang cố gắng làm. Nếu bạn thấy mình cảm thấy bị giới hạn với những gì có sẵn, hãy học những gì bạn đã học và cố gắng viết động cơ của riêng bạn phù hợp với các loại trò chơi bạn muốn thực hiện.

Dưới đây là một số liên kết để giúp bạn bắt đầu. Những công cụ này cung cấp một số trò chơi rất phổ biến trên Android Market và nhiều nhà phát triển đã thấy chúng hữu ích:

http://www.andengine.org/ andengine được viết bằng Java và là nguồn mở.

http://unity3d.com/ Unity dựa trên C# và Mono.

http://www.madewithmarmalade.com/ Marmalade, trước đây Airplay SDK dựa trên C++.

+0

Đây là một phản ứng rất tốt. Và bạn là chính xác, tôi đang nhắm vào đồ họa cao cấp. Tôi cho rằng tôi muốn tận dụng lợi thế của tài nguyên càng nhiều càng tốt mà không làm tê liệt tuổi thọ pin/tốc độ khung hình và tôi hy vọng trò chơi của tôi sẽ có khả năng thích nghi với khả năng đồ họa của điện thoại (nghĩa là điều chỉnh số lượng, chất lượng đổ bóng , và vân vân).Gần đây tôi đã nghiên cứu kiến ​​trúc về công cụ trò chơi, nhưng bạn nói đúng là tôi nên sử dụng và phân tích các công cụ hiện có ở đó trước khi quyết định cách tôi sẽ tạo môi trường thời gian chạy cuối cùng của mình. Cảm ơn bạn rất nhiều adamp! – AutoBotAM

2

Câu trả lời bạn muốn chú ý đến là @ adamp's. Bỏ qua câu trả lời của anh ta vì nguy hiểm của chính bạn.

Để giải quyết một vài điểm khác trong câu hỏi của bạn, mặc dù:

Liệu tôi có thể tạo ra một thực thi trò chơi được biên soạn dành cho Android trước thời hạn cho hiệu suất tối đa?

Không, trong chừng mực Android không sử dụng "tệp thực thi trò chơi đã biên dịch". Mã C/C++ của bạn sẽ được biên dịch thành một tệp được chia sẻ trên Linux (.so) và được đóng gói cùng với các thứ khác (như tệp kê khai của bạn) trong tệp APK. Biên dịch .so sẽ đi trước thời hạn.

Tôi có thể sử dụng MinGW để biên dịch trò chơi của mình không Tôi có cần sử dụng trình biên dịch khác không?

Tôi nhận được ấn tượng rõ ràng là bạn sẽ vuốt mắt để cố gắng phát triển NDK trong Cygwin trên Windows. Tôi chân thành khuyến khích bạn làm phát triển NDK của bạn trên OS X hoặc Linux. Ít nhất thiết lập một VirtualBox với Ubuntu hoặc một cái gì đó trong nó để làm biên dịch NDK của bạn.

Bất kể, NDK đi kèm với trình biên dịch GCC của riêng nó. AFAIK, MinGW không phải là một trình biên dịch chéo, và hầu hết các thiết bị Android không chạy trên các CPU x86.

Nếu tôi phải sử dụng Java theo cách này hay cách khác, có cần phải biên dịch mã C++ không?

Có. Bây giờ, đối với Honeycomb, bạn có tùy chọn sử dụng Renderscript cho công việc OpenGL - số tiền đó đến một môi trường C99 có mã mà bạn sẽ không cần phải biên dịch với NDK.

+0

Được rồi, tôi sẽ cài đặt VirtualBox với Ubuntu tại một số thời điểm nếu tôi cần. Tôi ước mình có một chiếc máy tính OS X tốt dưới 600 đô la, vì tôi thực sự muốn phát triển trên iOS. Tôi cho rằng bây giờ có thể chờ đợi. – AutoBotAM

0

Tôi đã thử một loạt chúng, và một trong những điều tốt nhất tôi thấy rằng việc biên dịch chéo ngay lập tức với một loạt các thiết bị khác và cho phép bạn lập trình các tính năng của bạn trong kết hợp HTML5/C++ (sweeeeet) là MoSync (http://www.mosync.com/) và một chút ít được biết đến thân thiện hơn là MotoDev của Motorola (http://developer.motorola.com/tools/motodevstudio/?utm_campaign=mhp01092012&utm_source=mhp&utm_medium=mws)

Tôi đã nhận thấy một số hình ảnh và hướng dẫn về máy ảo mà bạn có thể sử dụng để tránh gây rắc rối.

Các vấn đề liên quan