2011-02-13 29 views
9

Tôi đang trong quá trình viết trò chơi Android và có vẻ như tôi đang gặp sự cố về hiệu suất khi vẽ lên Canvas. Trò chơi của tôi có nhiều cấp độ và mỗi cấp độ (rõ ràng) có một số đối tượng khác nhau trong đó.Hiệu suất drawBitmap của Android cho nhiều ảnh bitmap?

Điều kỳ lạ ở một cấp, trong đó có 45 hình ảnh, chạy hoàn hảo (gần 60 khung hình/giây). Tuy nhiên, một cấp độ khác, trong đó có 81 hình ảnh, hầu như không chạy ở tất cả (11 khung hình/giây); nó là khá nhiều unplayable. Điều này có vẻ kỳ quặc với bất cứ ai ngoài tôi?

Tất cả hình ảnh tôi sử dụng là của .png và sự khác biệt duy nhất giữa các cấp nói trên là số lượng hình ảnh.

Điều gì đang xảy ra ở đây? Canvas có thể đơn giản là không vẽ nhiều hình ảnh này cho mỗi vòng lặp trò chơi không? Các bạn khuyên tôi nên cải thiện hiệu suất này như thế nào?

Xin cảm ơn trước.

Trả lời

1

Tôi nghĩ rằng this lecture sẽ giúp bạn. Đến 45 phút. Có một biểu đồ so sánh phương thức Canvas và phương pháp OpenGl. Tôi nghĩ đó là câu trả lời.

3

Có vẻ lạ với tôi. Tôi cũng đang phát triển một trò chơi, rất nhiều cấp độ, tôi có thể dễ dàng có một đối tượng trò chơi 100 trên màn hình, đã không nhìn thấy một vấn đề tương tự.

Được sử dụng đúng cách, drawbitmap phải rất nhanh; nó là ít hơn một lệnh sao chép. Tôi thậm chí không vẽ vòng tròn nguyên bản; Tôi có Bitmap của vòng kết nối được hiển thị trước.

Tuy nhiên, hiệu suất của Bitmap trong Android rất nhạy cảm với cách bạn thực hiện. Tạo bitmap có thể rất tốn kém, vì Android có thể tự động định tỷ lệ pngs là CPU chuyên sâu. Tất cả các công cụ này cần phải được thực hiện chính xác một lần, bên ngoài vòng lặp kết xuất của bạn.

Tôi nghi ngờ rằng bạn đang tìm kiếm địa điểm sai. Nếu bạn tạo và sử dụng cùng một loại hình ảnh theo cùng một cách, sau đó tăng gấp đôi số lượng hình ảnh trên màn hình sẽ không làm giảm hiệu suất theo hệ số trên 4. Hầu hết nó phải là tuyến tính (hệ số 2).

Nghi ngờ đầu tiên của tôi là hầu hết thời gian CPU của bạn sẽ được sử dụng để phát hiện xung đột. Không giống như vẽ bitmap, điều này thường tăng lên như hình vuông của số lượng các đối tượng tương tác, bởi vì mọi đối tượng đều phải được kiểm tra va chạm với mọi đối tượng khác. Bạn đã tăng gấp đôi số lượng đối tượng trò chơi nhưng hiệu suất của bạn giảm xuống còn một phần tư, tức là theo bình phương của số lượng đối tượng. Nếu đây là trường hợp, đừng tuyệt vọng; có nhiều cách để phát hiện va chạm không phát triển như hình vuông của số lượng đối tượng.

Đồng thời, tôi sẽ làm thử nghiệm cơ bản. Điều gì sẽ xảy ra nếu bạn không thực sự vẽ một nửa đối tượng? Trò chơi có chạy nhanh hơn nhiều không? Nếu không, nó không có gì để làm với bản vẽ.

0

tôi gặp phải một vấn đề tương tự với hiệu suất - tức là, cấp 1 chạy tuyệt vời và cấp 2 không

Turned nó không phải là vẽ đó là một lỗi (ít nhất là không cụ thể). Đó là một cái gì đó khác cụ thể cho logic cấp đã gây ra một nút cổ chai.

Điểm là ... Traceview là người bạn tốt nhất của bạn.

Phương pháp lược tả cho thấy nơi CPU đã dành thời gian của nó và lý do tại sao sự cố trong tốc độ khung hình đã xảy ra.(ngẫu nhiên, chi phí hiển thị cũng cao hơn ở Cấp 2 nhưng không phải là nút cổ chai)

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