2013-06-06 18 views
6

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

+0

Puoi pubblicare del codice? – Tom

+0

Strettamente correlato: [Come faccio a ottenere riferimenti di vecchi elementi generati in HTML Canvas?] (Http://stackoverflow.com/q/13973747/710446) – apsillers

+0

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/) –

risposta

9

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.

+3

@OP È inoltre possibile disegnare lo sfondo e gli overlay su elementi canvas separati e unirli nuovamente alla fine del ciclo di animazione. – rlemon

+2

@rlemon non c'è bisogno di unirli: con il posizionamento CSS puoi semplicemente averne uno sopra l'altro – Alnitak

+0

buona chiamata sul layering. – rlemon

8

È necessario cancellare la tela all'inizio di ogni Draw Frame

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

Questo cancellerà anche i miei altri dati di background .. Devo solo rimuovere l'oggetto auto che sto disegnando ripetutamente – Anish

+2

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