Ich begann gerade mit dem HTML5 Canvas zu spielen und ich hoffte, ein paar Spiele damit zu machen. Sobald jedoch begann ich machte die Maus zu koordiniert, geschliffen es zu einem fast zum Stillstand:Redrapping HTML5 Leinwand unglaublich langsam
http://jsfiddle.net/mnpenner/zHpgV/
Alles, was ich tat, war, machen 38 Linien und einen Text, soll es in der Lage sein, damit umzugehen, nicht wahr?
Mache ich etwas falsch? Ich würde gerne mindestens 30 FPS rendern können, aber für so etwas würde ich erwarten, dass es 1000 Mal malen kann.
Oder verwende ich gerade das falsche Werkzeug für den Job? Ist WebGL für die Aufgabe bereit? Warum sollte man so viel langsamer sein als der andere?
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>
Ich wusste nicht, dass Wege das bearbeitete! Ich denke, ein "Pfad" -Objekt wäre intuitiver gewesen. Sinn macht, warum es jetzt so langsam war, danke! – mpen
Es gibt nun ein Pfadobjekt in der HTML5-Canvas-Spezifikation und Sie können einen Pfad erstellen und 'drawPath' in Zukunft aufrufen. Aber kein Browser hat es bereits implementiert und es kann Monate dauern, bis Sie es nutzen können. Kaufen Sie eines Tages! –