Ho appena iniziato a giocare con la tela HTML5 e speravo di creare un paio di giochi con esso. Tuttavia, non appena ho iniziato a rendere le coordinate del mouse ad esso, macinato a un quasi battuta d'arresto:Ridisegnare la tela HTML5 incredibilmente lenta
http://jsfiddle.net/mnpenner/zHpgV/
Tutto quello che ho fatto è stato rendere 38 linee e del testo, dovrebbe essere in grado di gestire questo, no?
Sto facendo qualcosa di sbagliato? Mi piacerebbe essere in grado di renderizzare almeno 30 FPS, ma per qualcosa di simile mi aspetterei che sia in grado di disegnare migliaia di volte.
Oppure sto usando lo strumento sbagliato per il lavoro? WebGL è pronto per l'attività? Perché uno dovrebbe essere molto più lento dell'altro?
String.prototype.format = function() {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function(m, n) {
return args[n];
});
};
var $canvas = $('#canvas');
var c = $canvas[0].getContext('2d');
var scale = 20;
var xMult = $canvas.width()/scale;
var yMult = $canvas.height()/scale;
var mouseX = 0;
var mouseY = 0;
c.scale(xMult, yMult);
c.lineWidth = 1/scale;
c.font = '1pt Calibri';
function render() {
c.fillStyle = '#dcb25c';
c.fillRect(0, 0, scale, scale);
c.fillStyle = '#544423';
c.lineCap = 'square';
for (var i = 0; i <= 19; ++i) {
var j = 0.5 + i;
c.moveTo(j, 0.5);
c.lineTo(j, 19.5);
c.stroke();
c.moveTo(0.5, j);
c.lineTo(19.5, j);
c.stroke();
}
c.fillStyle = '#ffffff';
c.fillText('{0}, {1}'.format(mouseX, mouseY), 0.5, 1.5);
}
render();
$canvas.mousemove(function(e) {
mouseX = e.clientX;
mouseY = e.clientY;
render();
});
<canvas id="canvas" width="570" height="570"></canvas>
Non sapevo che i percorsi funzionassero! Penso che avere un oggetto 'path' sarebbe stato più intuitivo. Ha senso perché ora era così lento, grazie! – mpen
Ora c'è un oggetto percorso nella specifica Canvas HTML5 e sarà possibile creare un Path e chiamare 'drawPath' in futuro. Ma nessun browser l'ha ancora implementato e potrebbero passare mesi prima che tu possa farne uso. Compra un giorno! –