2012-04-12 11 views
1

Ich habe ein HTML5-basiertes Spiel, in dem ich den Charakter des Spielers in einer bestimmten Art und Weise zeigen möchte.Wie mache ich eine Enthüllung vor schwarzem Hintergrund?

Das Ende der James Bond Gewehrlauf-Sequenz ist eine Art von was ich spreche: http://www.youtube.com/watch?v=YNajzHjjYXQ Um 0:17, gibt es einen Kreis, der die nächste Szene mit einem schwarzen Hintergrund offenbart. In den nächsten Sekunden wird der Kreis erweitert, um den ganzen Bildschirm abzudecken und dann ist das ganze Schwarz weg. Wie kann ich das in HTML5 und Javascript machen?

Antwort

3

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.

+0

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

+0

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

+0

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

Verwandte Themen