Ich experimentiere mit Canvas, platziere Token verschiedener Farben auf einem Gitter und versuche, sie zu entfernen.Warum verlässt Canvas einen gespenstischen Ring?
Ich versuche gerade, das Token zu entfernen, indem ich einen Kreis mit den exakt gleichen Abmessungen weiß über das Token zeichne. Dies hinterlässt einen "gespenstischen Ring" (Einzelpixelumriss), wo der ursprüngliche Kreis war, der mit aufeinanderfolgenden Anwendungen des weißen Kreises verschwindet.
Der Kreis in 2, wird -1 ursprünglich gezeichnet, und schon gar nicht überstrichen. Der Kreis in 3, -1 wurde einmal übermalt, der Kreis in 4, -1 wurde zweimal übermalt, und so weiter auf 7, -1.
Dieses Verhalten tritt in Chrome und Firefox 3.6
Mein Code folgt.
function placeToken(e) {
var click = getClick(e);
var gridCord = getGridCord(click);
var canvas = e.currentTarget;
var ctx = canvas.getContext(CONTEXT_NAME);
ctx.fillStyle = color;
ctx.strokeStyle = color; //tried with and without this line, no effect
x = (gridCord.x * spacing) + (spacing/2);
y = (gridCord.y * spacing) + (spacing/2);
ctx.beginPath();
ctx.arc(x, y, (spacing - tokenEdge)/2, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
ctx.stroke(); //tried with and without this line. Same result
};
Warum verlässt Leinwand diesen Geisterring und wie kann ich ihn loswerden?
es ist sehr gut von Flash-Entwicklern bekannt, dass Leinwand spukt – Jason
Kurz gesagt, Antialiasing. Die Pixel am Rand dieses Kreises werden mit weniger als 100% Deckkraft gemalt. Dies ist nicht auf Canvas beschränkt. Sie müssen nur darüber streichen. –