2013-06-06 42 views
6

Tôi có đối tượng đa giác (nói một ô tô) được vẽ bên trong canvas HTML5 với sự trợ giúp của phương thức moveTolineTo. Tôi muốn vẽ liên tục đối tượng đó ở các vị trí khác nhau trong canvas (mô phỏng một đối tượng chuyển động). Vấn đề của tôi là đối tượng được vẽ trước đó không bị xóa. Thay vào đó, nhiều hình ảnh được vẽ trên canvas. Làm cách nào để khắc phục sự cố này?HTML5 Xóa đối tượng được vẽ trước đó trong canvas

+0

Bạn có thể đăng một số mã không? – Tom

+0

Liên quan chặt chẽ: [Làm thế nào để tôi có thể tham khảo các thành phần được tạo cũ trong HTML Canvas?] (Http://stackoverflow.com/q/13973747/710446) – apsillers

+0

Tôi đã thực hiện một câu trả lời để trả lời câu hỏi SO này: http: // stackoverflow .com/q/16728162/2252829. Trong fiddle tôi có hai canvases, một cho các đối tượng tĩnh và một cho năng động. Có thể hữu ích. [liên kết jsFiddle] (http://jsfiddle.net/gfcarv/N22Na/) –

Trả lời

9

Canvases chỉ là mảng các pixel, họ không biết gì về các hình dạng bạn vừa vẽ.

Có các thủ thuật hoạt hình được sử dụng trên màn hình bitmap (ví dụ "xor drawing") có thể được sử dụng để xóa hình cũ trước khi bạn vẽ hình mới, nhưng trên các máy hiện đại, nó đơn giản hơn rất nhiều (và hoàn hảo) nhanh) để chỉ xóa canvas và bắt đầu lại cho mỗi khung hình.

Đưa ra nhận xét của bạn cho các câu trả lời khác, tôi khuyên bạn chỉ nên sử dụng hai Canvas - một cho nền tĩnh và một cho ô tô. Nếu hình nền tĩnh thì thậm chí có thể là phần tử <img> thay vì Canvas.

Nếu hình ảnh ô tô tĩnh, bạn cũng có thể vẽ một lần, sau đó sử dụng định vị CSS để đặt vị trí của nó tương ứng với nền cho mỗi khung hình.

+3

@OP Bạn cũng có thể vẽ nền và lớp phủ trên các phần tử canvas riêng biệt và hợp nhất chúng sao lưu ở cuối vòng lặp hoạt ảnh của bạn. – rlemon

+2

@rlemon không cần phải hợp nhất chúng - với định vị CSS, bạn chỉ có thể có một cái trên đầu trang của một số khác – Alnitak

+0

cuộc gọi tốt trên lớp. – rlemon

8

Bạn phải xóa vải vào đầu mỗi vẽ khung

context.clearRect(0, 0, canvas.width, canvas.height); 
+0

Điều này cũng sẽ xóa dữ liệu nền khác của tôi .. Tôi chỉ cần xóa đối tượng ô tô mà tôi đang vẽ lặp lại – Anish

+2

Có, bạn sẽ phải vẽ lại nền cũng như ô tô ở vị trí mới. Ngoài ra, nếu nền của bạn không di chuyển, bạn có thể chỉ cần lớp một hình ảnh ngay bên dưới canvas của bạn. Bằng cách đó bạn sẽ không phải vẽ lại nền mỗi lần - chỉ cần vẽ lại chiếc xe đang di chuyển. – markE

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