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 moveTo
và lineTo
. 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
Trả lời
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.
@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
@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
cuộc gọi tốt trên lớp. – rlemon
Bạn phải xóa vải vào đầu mỗi vẽ khung
context.clearRect(0, 0, canvas.width, canvas.height);
Đ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
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
- 1. "Xóa" trong html5 canvas
- 2. Vẽ mũi tên trên Canvas HTML5 giữa hai đối tượng
- 3. Xóa các đường kẻ được vẽ trước đây trên canvas HTML5
- 4. Sự kiện đối tượng canvas HTML5
- 5. vẽ đối tượng/hình ảnh trên canvas
- 6. HTML5 Canvas: tốt hơn để vẽ lại các đối tượng hoặc sử dụng bitmap?
- 7. Cách vẽ đa giác trên canvas HTML5?
- 8. HTML5 Canvas set z-index
- 9. HTML5 Canvas: Biểu tượng độ
- 10. HTML5 cách vẽ hình ảnh pixel trong suốt trong canvas
- 11. Tìm hiểu đối tượng nào đã được nhấp vào một html5 Canvas
- 12. Vẽ các đường cong đầu mũi tên trong HTML5 Canvas
- 13. HTML5, JavaScript và vẽ nhiều hình chữ nhật trong canvas
- 14. Xác định đối tượng nào trên màn hình được nhấp trong html5 canvas javascript?
- 15. HTML5 Canvas Creative Alpha-Blending
- 16. Animated GIF trong HTML5 canvas
- 17. Có thể đặt hình nền trong canvas HTML5 và có thể thực hiện một số chức năng vẽ như Hoàn tác, Xóa, Xóa, Lưu hình nền đó không?
- 18. Canvas HTML5: Nhận sự kiện khi vẽ xong
- 19. Vẽ văn bản bằng nét ngoài với canvas của HTML5
- 20. Vẽ các đường nét đứt trên Canvas HTML5?
- 21. vẽ lại canvas html5 mà không nhấp nháy
- 22. Canvas HTML5, tỷ lệ hình ảnh sau khi vẽ nó
- 23. Đường lởm chởm được vẽ bởi người dùng trong ứng dụng canvas HTML5?
- 24. Đường kẻ mịn được vẽ trong canvas
- 25. Chèn từ trong HTML5 Canvas
- 26. HTML5 lưu canvas vào tệp
- 27. Làm thế nào để xóa Tkinter Canvas?
- 28. Tách trong canvas HTML5?
- 29. HTML5 Canvas - Strokes khác nhau
- 30. Nhận mục/đối tượng trong đó phần tử bị xóa
Bạn có thể đăng một số mã không? – Tom
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
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/) –