2012-09-03 30 views
5

Điều này có vẻ vô hại, nhưng khi thực hiện 1000 lần ở 30 khung hình/giây, nó sẽ tăng lên. Tôi có 3 kích thước vòng tròn mà tôi vẽ, mỗi vòng có màu tô riêng (RGBA). Tôi có thể vẽ chúng nhanh hơn dưới dạng hình ảnh một lần hay không và sử dụng drawImage() với URL dữ liệu hoặc để làm arc() cho mỗi hình ảnh?Canvas arc() vs drawImage()

Thông tin thêm:

  • Sử dụng một khung duy nhất cho tất cả các vòng tròn
  • Bối cảnh và vải được lưu trữ
  • gọi đầy đủ cho hồ quang vào lúc này trông giống như

    this.scene.context .arc (newLocation, this.y + = this.speed/80, this.distance/2, 0, Math.PI * 2, false);

+0

Nếu bạn đã có mã của bạn, bạn có thể kiểm tra phiên bản nhanh hơn tại [jsperf] (http://jsperf.com/) – jbalsas

+0

Nếu bạn kết thúc bằng cách sử dụng phương thức arc(), bạn có thể tối ưu hóa dòng đó. ví dụ như thiết lập bối cảnh như là một biến địa phương nếu trong một chức năng, hoặc chỉ là một biến để "này" và "cảnh" không cần phải được tìm kiếm là tốt và làm các phép tính một lần. Ví dụ: var TWOPI = Math.PI * 2 – Richard

Trả lời

6

enter image description here

Theo my tests, drawImage() sẽ là nhanh hơn đáng kể trong hầu hết các trường hợp vì sử dụng arc().

Chức năng drawImage() có thể lấy phần tử <img> hoặc <canvas> làm tham số và trong Firefox, sử dụng thẻ <img> nhanh hơn, mặc dù các trình duyệt khác hiển thị ngược lại.

gì nó boils xuống: Ngay cả đối với hình dạng đơn giản, sử dụng drawImage()