2012-04-20 29 views
13

Trò chơi của tôi sử dụng quá nhiều pin. Tôi không biết chính xác nó sử dụng bao nhiêu so với các trò chơi so sánh, nhưng nó sử dụng quá nhiều. Người chơi phàn nàn rằng nó sử dụng rất nhiều, và một số người trong số họ lưu ý rằng nó làm cho thiết bị của họ "chạy nóng". Tôi chỉ mới bắt đầu điều tra điều này và muốn hỏi một số câu hỏi lý thuyết và thực tế để thu hẹp không gian tìm kiếm. Đây là chủ yếu về phiên bản iOS của trò chơi của tôi, nhưng có lẽ nhiều vấn đề tương tự ảnh hưởng đến phiên bản Android. Xin lỗi vì đã hỏi nhiều câu hỏi phụ, nhưng tất cả chúng đều có liên quan đến nhau nên tôi nghĩ tốt nhất là nên giữ chúng lại với nhau.cách đo và cải thiện việc sử dụng pin trong trò chơi iPhone/iPad (Android cũng)

Ghi chú bên: Trò chơi của tôi không thực hiện truy cập mạng (được gọi ở một số nơi dưới dạng pin lớn) và không tiêu tốn nhiều pin trong nền; đó là chạy nền trước đó là vấn đề.

(1) Tôi biết có API để đọc mức pin, vì vậy tôi có thể thực hiện một số thử nghiệm tự động. Câu hỏi của tôi ở đây là: Khoảng bao lâu (hoặc có lẽ: về lượng pin cạn kiệt) tôi có cần để điều đó chạy để có được một bài đọc đáng tin cậy không? Ví dụ, nếu nó chạy trong 10 phút là đáng tin cậy? Nếu nó tiết kiệm 10% pin, điều đó có đáng tin cậy không? Hoặc là nó tốt hơn để chạy cho nhiều hơn như một giờ (hoặc, nói, xem phải mất bao lâu để hết 50% pin)? Những gì tôi hỏi ở đây là mức độ nhạy cảm/đáng tin cậy của đồng hồ đo pin như thế nào, vì vậy tôi biết mỗi lần chạy thử nghiệm cần bao lâu.

(2) Tôi đang cố gắng hiểu nguyên nhân có thể xảy ra khi sử dụng pin cao. Dưới đây tôi liệt kê một số yếu tố có thể xảy ra. Xin hãy giúp tôi hiểu xem ai là người có nhiều khả năng nhất:

(2a) Như với nhiều trò chơi, trò chơi của tôi cần vẽ toàn màn hình trên mỗi khung hình. Nó chạy ở tốc độ khoảng 30 khung hình/giây. Tôi biết rằng Apple nói với "chỉ làm mới màn hình nhiều như bạn cần", nhưng tôi khá nhiều cần phải vẽ mỗi khung. Trên thực tế, tôi có thể đặt một số công việc vào chỉ vẽ các phần của màn hình đã thay đổi, nhưng trong trường hợp của tôi vẫn sẽ là phần lớn màn hình. Và trong mọi trường hợp, ngay cả khi tôi có thể bản địa hóa bản vẽ thành một phần của màn hình, tôi vẫn đang tạo một bộ đệm hoán đổi OpenGL gọi 30 lần mỗi giây, vì vậy tôi có làm việc chăm chỉ để vẽ ít hơn một chút ?

(2b) Khi tôi vẽ các phần tử màn hình, có một số điểm toán học trôi nổi nhất định (ví dụ: trong tính toán tọa độ UV kết cấu) và một số phép toán chính xác đôi (ít hơn) tiếp tục. Tôi không biết đắt tiền như thế nào, pin-khôn ngoan, so với các hoạt động số nguyên tương tự. Tôi có lẽ có thể cache rất nhiều các giá trị này để không phải tính toán nhiều lần, nếu đó là khả năng thắng.

(2c) Tôi thực hiện một số chuyển đổi kết cấu nhất định khi hiển thị cảnh. Trước đây tôi đã chỉ lo lắng về điều này làm cho trò chơi quá chậm (nó không), nhưng bây giờ tôi cũng tự hỏi liệu việc giảm chuyển đổi kết cấu sẽ giảm sử dụng pin hay không.

(2d) Tôi không chắc liệu điều này có thực tế với tôi hay không: nhưng tôi đã đọc về shaders và OpenCL, và tôi muốn hiểu liệu tôi có phải dỡ bỏ một số xử lý CPU cho GPU hay không có khả năng tiết kiệm pin (ngoài việc chạy nhanh hơn cho các hoạt động kiểu vectơ). Hay nó có lẽ sẽ sử dụng nhiều pin hơn trên GPU chứ không phải trên CPU?

Tôi nhận ra rằng tôi có thể thu hẹp yếu tố nào đang phát bằng cách vô hiệu hóa một số phần nhất định của trò chơi và thực hiện kiểm tra pin lặp lại (do đó một phần (1) câu hỏi). Nó chỉ là rằng vô hiệu hóa là không tầm thường và có đủ thủ phạm tiềm năng mà tôi nghĩ rằng tôi muốn hỏi lời khuyên chung đầu tiên.

+0

Tôi biết bạn đã nói nó chủ yếu là phiên bản ios, nhưng phiên bản Android không có quảng cáo? Ngay cả khi bạn không sử dụng mạng một cách rõ ràng, có điều gì có thể sử dụng nó trong nền không? – Michael

+2

Ngoài ra, nếu bạn đồng ý đọc các tài liệu nghiên cứu [this] (http://research.microsoft.com/en-us/people/mzh/eurosys-2012.pdf) vừa xuất hiện từ một hội nghị gần đây. Đó là tất cả Android, nhưng có lẽ điều này sẽ cung cấp cho bạn một số ý tưởng làm thế nào những người khác đã thực hiện các phép đo điện. – Michael

+0

Michael, cảm ơn bạn đã tham khảo. Tôi đã đọc qua bài báo và tôi sẽ xem xét kỹ hơn. Nó không xuất hiện rằng công cụ eprof có sẵn để tải về tại thời điểm này. (?) Nhưng có lẽ tôi có thể thu thập đủ thông tin chi tiết từ bài báo để chỉ cho tôi đúng hướng. Để trả lời cho câu hỏi khác của bạn, không, tôi không hiển thị quảng cáo. –

Trả lời

1

Hãy thử đọc bài viết này: Android Documents on optimization

gì hoạt động tốt đối với tôi, đang giảm dần việc sử dụng cho thu gom rác thải
ví dụkhi lập trình cho máy tính để bàn, bạn (hoặc tôi) được sử dụng để xác định các biến bên trong vòng lặp khi chúng không cần thiết bên ngoài vòng lặp, điều này gây ra việc sử dụng bộ sưu tập rác lớn (và tôi không nói về nguyên thủy vars, nhưng đối tượng lớn.

cố gắng tránh những việc như thế.

+0

Cảm ơn, nhưng tôi thực sự sử dụng Marmalade để mã của tôi ở chế độ gốc (ít nhất là tất cả mã tôi có quyền kiểm soát) nên không có bộ sưu tập rác. Và nó không phải là một vấn đề với Marmalade, vì các ứng dụng Marmalade khác của tôi không có vấn đề này. –

1

Một mẹo nhỏ mà thực sự giúp tôi có được sử dụng Pin (và sự ấm áp của thiết bị!) ngã xuống là để tăng tốc FPS trong tùy chỉnh của tôi OpenGL Engine.

Đặc biệt trong khi cảnh tĩnh (ví dụ: trò chơi theo lượt hoặc người dùng nhấn tạm dừng) hãy điều chỉnh FPS xuống Hoặc tăng tốc nếu người dùng không phản hồi sau 10 giây, như màn hình er trên máy tính để bàn. Trong thế giới thực, người dùng thường bị phân tâm khi sử dụng thiết bị di động. Đừng để ứng dụng của bạn tiêu hao pin trong khi người dùng tìm hiểu xem anh ấy đang ở ga tàu điện ngầm nào;)

Cũng trên iPhone, đôi khi 60FPS là mặc định, điều chỉnh thủ công đến 30 FPS này hầu như không thể nhìn thấy và giữ an toàn cho bạn của các chu kỳ gpu (và do đó rất nhiều pin!).

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