Ho un oggetto poligonale (ad esempio un'auto) disegnato all'interno di un canvas HTML5 con l'aiuto dei metodi moveTo
e lineTo
. Voglio disegnare ripetutamente quell'oggetto in diverse posizioni nell'area di disegno (simulando un oggetto in movimento). Il mio problema è che l'oggetto disegnato precedente non viene cancellato. Invece, più immagini sono disegnate sulla tela. Come posso risolvere questo problema?HTML5 Rimuovi oggetto disegno precedente su tela
risposta
Le tele sono solo array di pixel, non sanno nulla delle forme che avete disegnato.
Ci sono trucchi di animazione che venivano utilizzati nei display bitmap (ad esempio "xor drawing") che possono essere utilizzati per rimuovere la vecchia forma prima di disegnare quella nuova, ma su macchine moderne è generalmente molto più semplice (e perfettamente veloce) per cancellare semplicemente la tela e ricominciare da capo per ogni fotogramma.
Dato i commenti ad altre risposte, suggerirei di utilizzare solo due tele: una per lo sfondo statico e una per l'auto. Se l'immagine di sfondo è statica, potrebbe anche essere un elemento <img>
anziché una tela.
Se l'immagine della vettura è statica, è possibile disegnarla anche una sola volta, quindi utilizzare il posizionamento CSS per impostare la sua posizione rispetto allo sfondo per ciascun fotogramma.
@OP È inoltre possibile disegnare lo sfondo e gli overlay su elementi canvas separati e unirli nuovamente alla fine del ciclo di animazione. – rlemon
@rlemon non c'è bisogno di unirli: con il posizionamento CSS puoi semplicemente averne uno sopra l'altro – Alnitak
buona chiamata sul layering. – rlemon
È necessario cancellare la tela all'inizio di ogni Draw Frame
context.clearRect(0, 0, canvas.width, canvas.height);
Questo cancellerà anche i miei altri dati di background .. Devo solo rimuovere l'oggetto auto che sto disegnando ripetutamente – Anish
Sì, lo farai devi ridisegnare lo sfondo e l'auto nella sua nuova posizione. In alternativa, se lo sfondo non si sposta, puoi semplicemente sovrapporre un'immagine direttamente sotto la tela. In questo modo non dovrai ridisegnare lo sfondo ogni volta, basta ridisegnare l'auto in movimento. – markE
- 1. HTML5 Disegno su tela righe multicolore
- 2. Disegno Linee tratteggiate su tela HTML5?
- 3. Disegna video su tela HTML5
- 4. Html5 disegno su telaImmagine allungato
- 5. Scorrimento orizzontale su tela. HTML5
- 6. Effetti di disegno professionale su tela
- 7. Disegno SVG su tela Kivy
- 8. Disegno di Nove patch su tela (Android)
- 9. Scorrimento personalizzato su tela HTML5
- 10. Disegno di curve di direzione della freccia in tela HTML5
- 11. Disegno di testo con tratto esterno con tela HTML5
- 12. HTML5, JavaScript e disegno di più rettangoli in una tela
- 13. L'efficienza del disegno su tela per android
- 14. Disegno su tela e salvataggio immagine
- 15. rettangolo di disegno su tela Android
- 16. Disegno su tela e display Retina: fattibile?
- 17. Disegno Android su superficie e tela
- 18. Disegno 2 cerchi su una tela
- 19. Android: disegno di una tela su ImageView
- 20. Sovrapposizione immagine su tela HTML5 su immagine
- 21. javascript + html5 canvas: disegno anziché trascinamento/scorrimento su dispositivi mobili?
- 22. disegnare oggetto/immagine su tela
- 23. Come disegnare poligoni su una tela HTML5?
- 24. È possibile deformare un'immagine su tela html5?
- 25. Nice Trascina su una tela HTML5
- 26. Il disegno su tela HTML5 è più lento in Cocoa WebView rispetto a Safari
- 27. Come caricare l'immagine nella tela HTML5
- 28. Rimuovi flash caricamento nero su video HTML5
- 29. Tela all'interno di html5
- 30. Rilevamento di collisione perfetta per pixel su tela HTML5
Puoi pubblicare del codice? – Tom
Strettamente correlato: [Come faccio a ottenere riferimenti di vecchi elementi generati in HTML Canvas?] (Http://stackoverflow.com/q/13973747/710446) – apsillers
Ho fatto un violino per rispondere a questa domanda SO: http: // StackOverflow .com/q/16728162/2252829. In fiddle ho due tele, una per oggetti statici e un'altra per dinamica. Potrebbe essere utile. [jsFiddle link] (http://jsfiddle.net/gfcarv/N22Na/) –