Ich würde es wahrscheinlich mit Leinwand machen und einen Kreis vor dem Füllen abschneiden. Überprüfen Sie die Geige: http://jsfiddle.net/NgCVA/
Als Demonstration habe ich ein Bild (Ihre Spielfigur) auf der Seite platziert und dann positioniert absolut ein Canvas-Element darüber:
<img src="http://zef.me/wp-content/uploads/2009/10/funny-dog-costume.jpg"/>
<canvas width="330" height="396"></canvas>
Dann werden Sie füllen, dass gesamte Leinwand mit schwarzer in einer Animationsschleife wiederholt, während einen größeren und größeren Kreis Clipping:
var canvas = document.getElementsByTagName('canvas')[0],
ctx = canvas.getContext('2d'),
cx = canvas.width/2,
cy = canvas.height/2,
r = 10,
R_MAX = 400;
ctx.fillstyle = '#000';
function draw() {
r += 1;
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
// Draw clipping area
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(canvas.width, 0);
ctx.lineTo(canvas.width, canvas.height);
ctx.lineTo(0, canvas.height);
ctx.closePath();
ctx.moveTo(cx + r, cy);
ctx.arc(cx, cy, r, 0, Math.PI*2, true);
ctx.closePath();
ctx.clip();
// Fill everything not clipped
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.restore();
if(r < R_MAX) setTimeout(draw, 10);
}
draw();
beachten Sie, dass diese sehr einfache Animation ist und Sie wollen wahrscheinlich etwas elegantere (zB Ihre eigene Animation Schleife tun , einfach ng, was auch immer). Der wichtige Teil ist die Technik zum Beschneiden und Füllen der Leinwand.
Das ist wirklich toll, danke! Ich habe allerdings ein paar Fragen. | 1. Ich beabsichtige, diesen Effekt zu nutzen, um die Position des Avatars des Spielers und dann die Umgebung zu offenbaren. Ich möchte, dass dies an den Koordinaten des Spielers (hermes.currentX, hermes.currentY) beginnt. Wie kann ich das machen? | 2. Die Enthüllung scheint einen weißen Hintergrund oder eine leere Leinwand zu zeichnen. Ich möchte meine Spielkarte behalten, während die Enthüllung geschieht. Wie kann ich das machen? – user422318
3. Wie würde ich das umgekehrt machen? Angenommen, ich habe meine Spielwelt gezeichnet und das Spiel endet. Das Schwarz sollte von den Ecken kommen und der Kreis wird kleiner werden, bis nichts mehr als schwarz ist. – user422318
1) 'cx', 'cy' sind die Koordinaten des Mittelpunkts des Kreises. Verwenden Sie beliebige Werte. 2) Verwenden Sie mehrere Leinwände. Die Karte auf einer, die Sprites auf der anderen, die Spotlight-Sache auf der anderen. Wenn zusammenhängende Elemente, die neu gezeichnet werden, auf einer gemeinsamen Leinwand angezeigt werden, verringert sich die Menge an Dingen, die in jedem Bild gezeichnet werden müssen (z. B. muss die Karte nicht neu gezeichnet werden, wenn sie sich nicht bewegt, sondern die Sprites neu zeichnen). 3) "r" ist der aktuelle Radius des Kreises. Beachte, dass es um 10 Sterne ist und ich füge eins hinzu. Versuche mit 400 zu beginnen und subtrahiere stattdessen. – Prestaul