2010-10-16 38 views
10

Tôi đã tự hỏi liệu canvas có ranh giới giới hạn hay không.Hiệu quả về bản vẽ canvas android

Ý tôi là nếu tôi sử dụng các chức năng như drawline(), drawbitmap(), drawcircle(), Android có thực sự vẽ thứ gì đó trên canvas và lãng phí một số chu kỳ CPU không ??

vì sau khi tất cả các chức năng vẽ, in ảnh thực tế trên màn hình được quyết định theo kích thước màn hình. Và nếu tôi vẽ một thứ gì đó ngoài kích thước màn hình, nó sẽ không xuất hiện.

Tôi muốn làm một số chi tiết nhỏ trên vải của mình bằng cách gọi rất nhiều chức năng vẽ và làm cho bề mặt của tôi "bling bling". Nếu nó vượt quá giới hạn, tôi không muốn sử dụng chúng, nếu chúng làm cho bản vẽ của tôi chậm lại.

Tôi đang làm việc trên một trò chơi nhỏ bằng cấu trúc của surfaceview, Cảm ơn bạn đã tư vấn.

cho Ví dụ:

Tôi có một robot đi bộ từ một < -> b NGOÀI màn hình.

phải mất 20 chức năng vẽ để vẽ hình ảnh robot đi bộ trên canvas. Nếu tôi cuộn màn hình, sau đó tôi có thể thấy rô bốt.

Vì vậy, nếu chức năng vẽ bên ngoài màn hình thực sự mất nhiều thời gian như vẽ trên màn hình. Tôi phải phát hiện rằng chỉ khi vị trí của robot có thể được nhìn thấy bởi người sử dụng, sau đó tôi vẽ. nếu không, tôi không.

nếu chức năng vẽ không lãng phí nhiều chu kỳ CPU, thì tôi chỉ có thể vẽ mọi lúc ngay cả khi màn hình hiện tại không thể nhìn thấy rô bốt.

Trả lời

5

Canvas của bạn được hỗ trợ bởi bitmap (2D) hoặc OpenGL (3D mà tôi không có kinh nghiệm). Tất cả bản vẽ trên canvas của bạn được cắt thành hình chữ nhật cắt, bạn có thể phát triển, thu nhỏ, giao nhau với hình chữ nhật hoặc đường dẫn mới, v.v. Vì vậy, bạn thực sự muốn quản lý các hình chữ nhật cắt của mình trước khi vẽ vào khung hình của bạn, đặc biệt nếu nó được hỗ trợ bởi một bitmap lớn. Nếu bạn bấm vào một vùng bằng kích thước màn hình, bạn sẽ lưu các chu kỳ CPU. Nếu trò chơi của bạn là trò chơi kiểu cuộn, bạn có thể quay vào một khu vực lớn hơn kích thước màn hình và xoay xung quanh, thỉnh thoảng vẽ màn hình để cập nhật khu vực sắp tới trên màn hình. nếu trò chơi của bạn có cuộn vô hạn theo mọi hướng thì bạn sẽ muốn có nhiều khung hình nhỏ hơn mà bạn có thể vẽ vào tất cả xung quanh canvas chính của mình và lật chúng từ trái sang phải, từ trên xuống dưới tùy theo hướng của trò chơi cuộn của bạn . Một bitmap lớn với một canvas có thể có kích thước bộ nhớ quá lớn đối với một thiết bị nhỏ.

13

Một thứ khác có thể tăng tốc độ vẽ canvas khi canvas của bạn bao phủ toàn bộ màn hình là sử dụng chủ đề không có nền. Chủ đề mặc định có ít nhất nền màu có thể vẽ và kết quả là thời gian vẽ chậm hơn khi bạn đặt chế độ xem trên đầu trang, ngay cả khi chế độ xem của bạn lấp đầy toàn bộ màn hình.

sử dụng một chủ đề như:

<style name="Theme.NoBackground" parent="android:Theme"> 
     <item name="android:windowBackground">@null</item> 
    </style> 
</resources> 

Romain Guy có một mô tả tuyệt vời của hiện tượng này tại http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

Làm thế nào để bạn làm điều này nếu có đơn thuần là một trận hòa tùy chỉnh (tức là không có tập tin xml đính kèm) ? –

+1

điều này thật tuyệt vời, vì vậy một cải tiến lớn – pt123

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