Erstellung eines einfaches Space-Shooter-Spiel in HTML5 mit EaselJS
() translation by (you can also view the original English article)
Letztes Jahr habe ich Ihnen gezeigt, wie man mit Flash und AS3 ein Shoot-Em-Up-Spiel erstellt. Angesichts der zunehmenden Beliebtheit (und Funktionen) von HTML5 werfen wir einen Blick darauf, wie Sie dasselbe mit HTML5, JavaScript und EaselJS tun können.
Vorschau des endgültigen Bildes
Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten werden:
Schritt 1: Kurze Übersicht
Mit vorgefertigten Sprites werden wir ein unterhaltsames Space Shooter-Spiel in HTML5 mithilfe der EaselJS-Bibliothek codieren.
Der Spieler kann ein Raumschiff steuern und mehrere Feinde erschießen, während er im Weltraum unterwegs ist.
Schritt 2: Interface
Es wird eine einfache und futuristische Oberfläche verwendet, die Bitmaps und mehr umfasst. Ich habe in der Demo dieses Tutorials eine großartige Sprite-Bibliothek verwendet. Diese sind Teil der kostenlosen Sinistar Clone Graphics.
Die für dieses Tutorial erforderlichen Schnittstellenressourcen finden Sie im angehängten Download.
Schritt 3: Bekommen Sie EaselJS
Die EaselJS-Bibliothek wird zum Erstellen unseres Spiels verwendet. Lesen Sie unbedingt das Tutorial Erste Schritte, wenn Sie neu in dieser Bibliothek sind.
Sie können EaselJS von der offiziellen Website herunterladen.
Schritt 4: HTML-Struktur
Lassen Sie uns unser HTML-Dokument vorbereiten. Es ist eine einfache HTML-Struktur, um mit dem Schreiben unserer App zu beginnen. Speichern Sie dies als Shooter.html
.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Shooter</title> |
6 |
</head>
|
7 |
<body>
|
8 |
</body>
|
9 |
</html>
|
Schritt 5: Mobile Hightlight ausblenden
Fügen wir auch ein wenig CSS hinzu. In dieser Zeile wird die Standardhervorhebung entfernt, wenn Sie mit einem mobilen Browser auf ein Element tippen. Ohne dies würde das mobile Erlebnis drastisch abnehmen.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Shooter</title> |
6 |
|
7 |
<style>*{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}</style> |
8 |
|
9 |
</head>
|
10 |
<body>
|
11 |
</body>
|
12 |
</html>
|
Schritt 6: JavaScript-Bibliotheken
Der folgende Code fügt die erforderlichen JavaScript-Bibliotheken hinzu, die für die Funktion unserer App erforderlich sind.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Shooter</title> |
6 |
|
7 |
<style>*{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}</style> |
8 |
|
9 |
<script src="easel.js"></script> |
10 |
<script src="Tween.js"></script> |
11 |
<script src="sound.js"></script> |
12 |
<script src="Main.js"></script> |
13 |
</head>
|
14 |
<body>
|
15 |
</body>
|
16 |
</html>
|
Main.js
ist die Datei, in der wir alle unsere eigenen Funktionen für das Spiel speichern. Erstellen Sie es jetzt und speichern Sie es im selben Ordner wie Shooter.html
. Sie müssen auch die aufgelisteten EaselJS-Bibliotheken herunterladen.
Schritt 7: Hauptfunktion aufrufen
In den nächsten Zeilen nennen wir unsere Hauptfunktion; Dies ist die Funktion, mit der unsere Anwendung gestartet wird. Sie wird später in unserem JavaScript-Code erstellt.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Shooter</title> |
6 |
|
7 |
<style>*{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}</style> |
8 |
|
9 |
<script src="easel.js"></script> |
10 |
<script src="Tween.js"></script> |
11 |
<script src="sound.js"></script> |
12 |
<script src="Main.js"></script> |
13 |
|
14 |
</head>
|
15 |
<body onload="Main();"> |
16 |
</body>
|
17 |
</html>
|
Schritt 8: Leinwandelement
Die Leinwand wird in dieser Zeile hinzugefügt. Wir weisen eine ID zu, um später darauf zu verweisen, und legen auch deren Breite und Höhe fest.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Shooter</title> |
6 |
|
7 |
<style>*{-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}</style> |
8 |
|
9 |
<script src="easel.js"></script> |
10 |
<script src="Tween.js"></script> |
11 |
<script src="sound.js"></script> |
12 |
<script src="Main.js"></script> |
13 |
|
14 |
</head>
|
15 |
<body onload="Main();"> |
16 |
<canvas id="Shooter" width="320" height="480"></canvas> |
17 |
</body>
|
18 |
</html>
|
Schritt 9: Starten des JavaScript
Beginnen wir mit der Erstellung unseres Spiels!
Öffnen Sie Ihren bevorzugten JavaScript-Editor (jeder Texteditor funktioniert, aber Sie haben keine Syntaxhervorhebung) und bereiten Sie sich darauf vor, Ihr fantastisches Spiel zu schreiben. Öffnen Sie die zuvor erstellte Datei Main.js
.
Schritt 10: Leinwand definieren
Zunächst definieren wir alle grafischen und logischen Variablen.
Die nächsten Variablen repräsentieren das HTML-Canvas-Element und die Stufe, die damit verknüpft wird. (Die stage-Variable verhält sich ähnlich wie die Stage in einem AS3 Flash-Projekt.)
1 |
|
2 |
/* Define Canvas */
|
3 |
|
4 |
var canvas; |
5 |
var stage; |
Schritt 11: Hintergrund
Die nächsten Variablen speichern die Hintergrundbilder. Zwei gekachelte Bilder werden verwendet, um einen unendlich scrollenden Hintergrund zu erstellen.
1 |
|
2 |
/* Background */
|
3 |
|
4 |
var bgImg = new Image(); |
5 |
var bg; |
6 |
var bg2Img = new Image(); |
7 |
var bg2; |
Schritt 12: Versenden
Dies ist das Schiff, das als Spielercharakter oder Held verwendet wird.
1 |
|
2 |
/* Ship */
|
3 |
|
4 |
var sImg = new Image(); |
5 |
var ship; |
Schritt 13: Feind
Mehrere Feinde werden auf der Bühne sein; Sie werden dies als Quellgrafik verwenden.
1 |
|
2 |
/* Enemy */
|
3 |
|
4 |
var eImg = new Image(); |
Schritt 14: Boss
Ein Boss wird im Spiel anwesend sein, größer und mit mehr Gesundheit als die anderen Feinde. Diese Variablen werden verwendet, um es zu instanziieren.
1 |
|
2 |
/* Boss */
|
3 |
|
4 |
var bImg = new Image(); |
5 |
var boss; |
Schritt 15: Leben
Das "Leben"-Icon. Zu Beginn werden drei Leben gegeben, und Sie verlieren eines, wenn Sie von einem Feind getroffen werden.
1 |
|
2 |
/* Lives */
|
3 |
|
4 |
var lImg = new Image(); |
Schritt 16: Kugeln
Dies ist Ihre Waffe: Feuern Sie Kugeln auf die Feinde ab, um sie zu töten. Diese Variable speichert das Quellbild.
1 |
|
2 |
/* Bullets */
|
3 |
|
4 |
var bltImg = new Image(); |
Schritt 17: Warnungsgrafiken
Im Spiel werden zwei Warnungen verwendet, eine für den Fall, dass Sie gewinnen, und eine für den Fall, dass Sie verlieren. Wir werden später in diesem Tutorial sehen, wie Sie einen Gewinn oder eine Niederlage feststellen können.
1 |
|
2 |
/* Alert */
|
3 |
|
4 |
var winImg = new Image(); |
5 |
var loseImg = new Image(); |
6 |
var win; |
7 |
var lose; |
Schritt 16: Variablen
Dies sind die Variablen, die wir verwenden werden. Lesen Sie die Kommentare im Code, um mehr darüber zu erfahren. Einige ihrer Namen sind selbsterklärend und haben daher keine Kommentare.
1 |
|
2 |
var lives = new Container(); //stores the lives gfx |
3 |
var bullets = new Container(); //stores the bullets gfx |
4 |
var enemies = new Container(); //stores the enemies gfx |
5 |
var bossHealth = 20; |
6 |
var score; |
7 |
var gfxLoaded = 0; //used as a preloader, counts the already loaded items |
8 |
var centerX = 160; |
9 |
var centerY = 240; |
10 |
var tkr = new Object(); //used as a Ticker listener |
11 |
var timerSource; //references a setInterval method |
Schritt 17: Sounds
Wir werden Soundeffekte verwenden, um das Spielgefühl zu verbessern. Sie finden die in diesem Beispiel verwendeten Sounds auf Soungle.com mit den Schlüsselwörtern space, Explosion und Laser.
Schritt 18: Hauptfunktion
Die Funktion Main()
wird als erste ausgeführt, wenn die Webseite geladen wird, da im Attribut onload
des HTML-Dokuments darauf verwiesen wird (siehe Schritt 7).
Es ruft die notwendigen Funktionen auf, um das Spiel zu starten. Wir werden diese Funktionen in den nächsten Schritten erstellen - alles von Schritt 19 bis Schritt 23 sollte in diese Funktion gehören.
1 |
|
2 |
function Main() |
3 |
{
|
4 |
//code...
|
5 |
}
|
Schritt 19: Canvas verlinken
Dieser Code ruft die HTML-Canvas-ID ab und verknüpft sie mit der EaselJS Stage-Klasse. Dadurch verhält sich die Stage-Variable wie die Stage-Klasse in AS3.
1 |
|
2 |
/* Link Canvas */
|
3 |
|
4 |
canvas = document.getElementById('Shooter'); |
5 |
stage = new Stage(canvas); |
Schritt 20: Mausereignisse aktivieren
Mausereignisse sind in EaselJS standardmäßig deaktiviert, um die Leistung zu verbessern. Wenn wir diese im Spiel brauchen, fügen wir die folgende Zeile hinzu.
1 |
|
2 |
stage.mouseEventsEnabled = true; |
Schritt 21: Sounds laden
Wir werden SoundJS verwenden, um unserem Spiel Sounds hinzuzufügen. Die addBatch
-Methode von SoundJS verwendet für jeden Aufruf ein Array mit drei Parametern:
-
name
: Der Instanzname, den der Sound haben soll - dieser wird verwendet, um den Sound später abzuspielen. -
src
: Die URL der Audiodatei. -
instances
: Die Anzahl der Instanzen, die gleichzeitig abgespielt werden können.
1 |
|
2 |
/* Sound */
|
3 |
|
4 |
SoundJS.addBatch([ |
5 |
{name:'boss', src:'boss.mp3', instances:1}, |
6 |
{name:'explo', src:'explo.mp3', instances:10}, |
7 |
{name:'shot', src:'shot.mp3', instances:10}]); |
Schritt 22: Laden Sie Grafiken
Dieser Code wird verwendet, um die Grafiken mithilfe einer Funktion vorzuladen, die wir später schreiben werden. Es zeigt jedes zuvor erstellte Bildobjekt auf die Quell-PNG-Datei in unserem Dokumentordner. Es wird ein Name vergeben, um zu erkennen, welches Bild geladen wird, und zuletzt wird die Funktion aufgerufen, die die geladenen Bilder verarbeitet.
1 |
|
2 |
/* Load GFX */
|
3 |
|
4 |
bgImg.src = 'bg.png'; |
5 |
bgImg.name = 'bg'; |
6 |
bgImg.onload = loadGfx; |
7 |
|
8 |
bg2Img.src = 'bg2.png'; |
9 |
bg2Img.name = 'bg2'; |
10 |
bg2Img.onload = loadGfx; |
11 |
|
12 |
sImg.src = 'ship.png'; |
13 |
sImg.name = 'ship'; |
14 |
sImg.onload = loadGfx; |
15 |
|
16 |
eImg.src = 'enemy1.png'; |
17 |
eImg.name = 'enemy'; |
18 |
eImg.onload = loadGfx; |
19 |
|
20 |
bImg.src = 'boss.png'; |
21 |
bImg.name = 'boss'; |
22 |
bImg.onload = loadGfx; |
23 |
|
24 |
lImg.src = 'live.png'; |
25 |
lImg.name = 'live'; |
26 |
lImg.onload = loadGfx; |
27 |
|
28 |
bltImg.src = 'bullet.png'; |
29 |
bltImg.name = 'bullet'; |
30 |
bltImg.onload = loadGfx; |
31 |
|
32 |
winImg.src = 'win.png'; |
33 |
winImg.name = 'win'; |
34 |
winImg.onload = loadGfx; |
35 |
|
36 |
loseImg.src = 'lose.png'; |
37 |
loseImg.name = 'lose'; |
38 |
loseImg.onload = loadGfx; |
Schritt 23: Ticker einstellen
Die Ticker-Klasse bietet ein zentrales "tick", das in einem festgelegten Intervall gesendet wird. Wir können die Funktion tick()
verwenden, um bestimmten Code regelmäßig auszuführen.
Der folgende Code setzt die Bildrate auf 30 und definiert die Bühne als Listener für die Ticks.
Die TweenJS-Klasse hört sich dieses Häkchen an, um die Animationen auszuführen.
1 |
|
2 |
/* Ticker */
|
3 |
|
4 |
Ticker.setFPS(30); |
5 |
Ticker.addListener(stage); |
Schritt 24: Vorladefunktion
Jedes Mal, wenn eine Grafik geladen wird, wird diese Funktion ausgeführt. Jedes Bild wird einem Bitmap-Objekt zugewiesen und überprüft, ob alle Elemente geladen sind, bevor addGameView
aufgerufen wird.
1 |
|
2 |
function loadGfx(e) |
3 |
{
|
4 |
if(e.target.name = 'bg'){bg = new Bitmap(bgImg);} |
5 |
if(e.target.name = 'bg2'){bg2 = new Bitmap(bg2Img);} |
6 |
if(e.target.name = 'ship'){ship = new Bitmap(sImg);} |
7 |
|
8 |
gfxLoaded++; |
9 |
|
10 |
if(gfxLoaded == 9) |
11 |
{
|
12 |
addGameView(); |
13 |
}
|
14 |
}
|
Schritt 25: Spielansicht hinzufügen
Wenn alle Grafiken geladen sind, wird die Funktion addGameView
aufgerufen. Diese Funktion fügt der Bühne das Schiff, den Lebenszähler, die Punktzahl und die Hintergründe hinzu.
1 |
|
2 |
function addGameView() |
3 |
{
|
4 |
ship.x = centerX - 18.5; |
5 |
ship.y = 480 + 34; |
6 |
|
7 |
/* Add Lives */
|
8 |
|
9 |
for(var i = 0; i < 3; i++) |
10 |
{
|
11 |
var l = new Bitmap(lImg); |
12 |
|
13 |
l.x = 248 + (25 * i); |
14 |
l.y = 463; |
15 |
|
16 |
lives.addChild(l); |
17 |
stage.update(); |
18 |
}
|
19 |
|
20 |
/* Score Text */
|
21 |
|
22 |
score = new Text('0', 'bold 14px Courier New', '#FFFFFF'); |
23 |
score.maxWidth = 1000; //fix for Chrome 17 |
24 |
score.x = 2; |
25 |
score.y = 476; |
26 |
|
27 |
/* Second Background */
|
28 |
|
29 |
bg2.y = -480; |
30 |
|
31 |
/* Add gfx to stage and Tween Ship */
|
32 |
|
33 |
stage.addChild(bg, bg2, ship, enemies, bullets, lives, score); |
34 |
Tween.get(ship).to({y:425}, 1000).call(startGame); |
35 |
}
|
Schritt 26: Schiff bewegen
Das Schiff des Spielers wird mausgesteuert und wir verwenden diese Funktion, um Folgendes zu handhaben:
1 |
|
2 |
function moveShip(e) |
3 |
{
|
4 |
ship.x = e.stageX - 18.5; |
5 |
}
|
e.stageX
bezieht sich auf die x-Koordinate der Maus, und diese Funktion wird aufgerufen, wenn sich die Maus bewegt.
Schritt 27: Shoot
Unser Schiff wird in der Lage sein, Kugeln abzuschießen, um sich selbst zu zerstören und vor Feinden zu schützen. Diese Funktion wird jedes Mal ausgeführt, wenn der Benutzer auf die Bühne klickt, und platziert eine Kugel vor dem Schiff, die später von der Funktion update()
verschoben wird. Es wird auch ein Schießgeräusch abgespielt.
1 |
|
2 |
function shoot() |
3 |
{
|
4 |
var b = new Bitmap(bltImg); |
5 |
|
6 |
b.x = ship.x + 13; |
7 |
b.y = ship.y - 20; |
8 |
|
9 |
bullets.addChild(b); |
10 |
stage.update(); |
11 |
|
12 |
SoundJS.play('shot'); |
13 |
}
|
Schritt 28: Feindfunktion hinzufügen
Es wäre kein Schütze ohne etwas zu schießen. Hier wird mit setInterval()
alle 1000 Millisekunden ein Feind erstellt (diesen Wert können Sie im nächsten Schritt ändern), der später von der Funktion update()
verschoben wird.
1 |
|
2 |
function addEnemy() |
3 |
{
|
4 |
var e = new Bitmap(eImg); |
5 |
|
6 |
e.x = Math.floor(Math.random() * (320 - 50)) |
7 |
e.y = -50 |
8 |
|
9 |
enemies.addChild(e); |
10 |
stage.update(); |
11 |
}
|
Schritt 29: Spiel starten
Diese Zeilen fügen der Bühne und dem Timer die erforderlichen Zuhörer hinzu. Dies umfasst Mausereignisse, zeitgesteuerte Ereignisse (über setInterval
) und Ticker-Ereignisse, die das Spiel in jedem Frame aktualisieren.
1 |
|
2 |
function startGame() |
3 |
{
|
4 |
stage.onMouseMove = moveShip; |
5 |
bg.onPress = shoot; |
6 |
bg2.onPress = shoot; |
7 |
|
8 |
Ticker.addListener(tkr, false); |
9 |
tkr.tick = update; |
10 |
|
11 |
timerSource = setInterval('addEnemy()', 1000); |
12 |
}
|
Schritt 30: Hintergrund verschieben
Der Hintergrund wird in jedem Frame verschoben, um die Raumfahrt zu simulieren. Wenn das untere Hintergrund-Sprite die Stufengrenze erreicht, wird es wieder nach oben verschoben, wodurch eine Endlosschleife entsteht.
1 |
|
2 |
function update() |
3 |
{
|
4 |
/* Move Background */
|
5 |
|
6 |
bg.y += 5; |
7 |
bg2.y += 5; |
8 |
|
9 |
if(bg.y >= 480) |
10 |
{
|
11 |
bg.y = -480; |
12 |
}
|
13 |
else if(bg2.y >= 480) |
14 |
{
|
15 |
bg2.y = -480; |
16 |
}
|
Schritt 31: Kugeln verschieben
In den nächsten Codezeilen wird geprüft, ob sich Aufzählungszeichen in der Phase befinden. In diesem Fall werden die Kugeln nach oben bewegt.
1 |
|
2 |
/* Move Bullets */
|
3 |
|
4 |
for(var i = 0; i < bullets.children.length; i++) |
5 |
{
|
6 |
bullets.children[i].y -= 10; |
7 |
}
|
Schritt 32: Entfernen Sie Offstage Bullets
Fügen wir einige Linien hinzu, um die Position des Geschosses zu ermitteln, und verwenden Sie diese, um ein Geschoss zu zerstören, wenn es nicht mehr sichtbar ist.
1 |
|
2 |
/* Move Bullets */
|
3 |
|
4 |
for(var i = 0; i < bullets.children.length; i++) |
5 |
{
|
6 |
bullets.children[i].y -= 10; |
7 |
|
8 |
/* Remove Offstage Bullets */
|
9 |
|
10 |
if(bullets.children[i].y < - 20) |
11 |
{
|
12 |
bullets.removeChildAt(i); |
13 |
}
|
14 |
}
|
Schritt 33: Zeigen Sie Boss
Wir werden dem Spiel einen großen schlechten Boss hinzufügen. Wenn der Benutzer eine bestimmte Punktzahl erreicht, erscheint der Chef:
1 |
|
2 |
/* Show Boss */
|
3 |
|
4 |
if(parseInt(score.text) >= 500 && boss == null) |
5 |
{
|
6 |
boss = new Bitmap(bImg); |
7 |
|
8 |
SoundJS.play('boss'); |
9 |
|
10 |
boss.x = centerX - 90; |
11 |
boss.y = -183; |
12 |
|
13 |
stage.addChild(boss); |
14 |
Tween.get(boss).to({y:40}, 2000) //tween the boss onto the play area |
15 |
}
|
Schritt 34: Gegner bewegen
Die Feinde werden ebenso wie die Kugeln in jedem Bild bewegt. Dieser Code findet alle Feinde auf der Bühne mithilfe des enemies
containers und bewegt sie jeweils 5 Pixel nach unten.
1 |
|
2 |
/* Move Enemies */
|
3 |
|
4 |
for(var j = 0; j < enemies.children.length; j++) |
5 |
{
|
6 |
enemies.children[j].y += 5; |
Schritt 35: Entfernen Sie Gegner außerhalb der Bühne
Wir überprüfen auch die Positionen der Feinde, um sie zu zerstören, wenn sie nicht mehr sichtbar sind.
1 |
|
2 |
/* Move Enemies */
|
3 |
|
4 |
for(var j = 0; j < enemies.children.length; j++) |
5 |
{
|
6 |
enemies.children[j].y += 5; |
7 |
|
8 |
/* Remove Offstage Enemies */
|
9 |
|
10 |
if(enemies.children[j].y > 480 + 50) |
11 |
{
|
12 |
enemies.removeChildAt(j); |
13 |
}
|
Schritt 36: Bullet - Enemy Collision
Die Kugeln im Container werden auf Kollision mit den Feinden getestet; In diesem Fall werden beide von der Bühne entfernt, ein Ton abgespielt und die Partitur aktualisiert.
1 |
|
2 |
for(var k = 0; k < bullets.children.length; k++) |
3 |
{
|
4 |
/* Bullet - Enemy Collision */
|
5 |
|
6 |
if(bullets.children[k].x >= enemies.children[j].x && bullets.children[k].x + 11 < enemies.children[j].x + 49 && bullets.children[k].y < enemies.children[j].y + 40) |
7 |
{
|
8 |
bullets.removeChildAt(k); |
9 |
enemies.removeChildAt(j); |
10 |
stage.update(); |
11 |
SoundJS.play('explo'); |
12 |
score.text = parseFloat(score.text + 50); |
13 |
}
|
Schritt 37: Bullet-Boss-Kollision
Der folgende Code behandelt die Bosskollisionen. Er verwendet dieselbe Methode wie die Kollisionsschleife zwischen Kugel und Feind. Hier verwenden wir die Variable bossHealth
, um zu bestimmen, wann der Boss besiegt wird.
1 |
|
2 |
/* Bullet - Boss Collision */
|
3 |
|
4 |
if(boss != null && bullets.children[k].x >= boss.x && bullets.children[k].x + 11 < boss.x + 183 && bullets.children[k].y < boss.y + 162) |
5 |
{
|
6 |
bullets.removeChildAt(k); |
7 |
bossHealth--; |
8 |
stage.update(); |
9 |
SoundJS.play('explo'); |
10 |
score.text = parseInt(score.text + 50); |
11 |
}
|
12 |
}
|
Schritt 38: Schiff - Feindliche Kollision
Hier prüfen wir, ob ein Feind mit dem Schiff des Spielers kollidiert. Wenn dies der Fall ist, wird ein Ton abgespielt, ein Leben entfernt und das Schiff animiert.
1 |
|
2 |
/* Ship - Enemy Collision */
|
3 |
|
4 |
if(enemies.hitTest(ship.x, ship.y) || enemies.hitTest(ship.x + 37, ship.y)) |
5 |
{
|
6 |
enemies.removeChildAt(j); |
7 |
lives.removeChildAt(lives.length); |
8 |
ship.y = 480 + 34; |
9 |
Tween.get(ship).to({y:425}, 500) |
10 |
SoundJS.play('explo'); |
11 |
}
|
12 |
}
|
Schritt 39: Überprüfen Sie auf Gewinn oder Verlust
Der Spieler gewinnt, wenn der Boss seine ganze Gesundheit verliert und verliert, wenn sein ganzes Leben verloren geht. Die nächsten Zeilen erkennen diese Situationen und rufen eine Warnfunktion mit dem richtigen Parameter auf.
1 |
|
2 |
/* Check for win */
|
3 |
|
4 |
if(boss != null && bossHealth <= 0) |
5 |
{
|
6 |
alert('win'); |
7 |
}
|
8 |
|
9 |
/* Check for lose */
|
10 |
|
11 |
if(lives.children.length <= 0) |
12 |
{
|
13 |
alert('lose'); |
14 |
}
|
15 |
}
|
Schritt 40: Alarm
Der Alarm zeigt dem Spieler Informationen über den Status des Spiels an. Es wird angezeigt, wenn ein Spielereignis erreicht ist. Es entfernt die Spielelisten und zeigt die entsprechende Nachricht an.
1 |
|
2 |
function alert(e) |
3 |
{
|
4 |
/* Remove Listeners */
|
5 |
|
6 |
stage.onMouseMove = null; |
7 |
bg.onPress = null; |
8 |
bg2.onPress = null; |
9 |
|
10 |
Ticker.removeListener(tkr); |
11 |
tkr = null; |
12 |
|
13 |
timerSource = null; |
14 |
|
15 |
/* Display Correct Message */
|
16 |
|
17 |
if(e == 'win') |
18 |
{
|
19 |
win = new Bitmap(winImg); |
20 |
win.x = centerX - 64; |
21 |
win.y = centerY - 23; |
22 |
stage.addChild(win); |
23 |
stage.removeChild(enemies, boss); |
24 |
}
|
25 |
else
|
26 |
{
|
27 |
lose = new Bitmap(loseImg); |
28 |
lose.x = centerX - 64; |
29 |
lose.y = centerY - 23; |
30 |
stage.addChild(lose); |
31 |
stage.removeChild(enemies, ship); |
32 |
}
|
33 |
|
34 |
bg.onPress = function(){window.location.reload();}; |
35 |
bg2.onPress = function(){window.location.reload();}; |
36 |
stage.update(); |
37 |
}
|
Schritt 41: Testen



Speichern Sie Ihre Arbeit (falls nicht) und öffnen Sie die HTML-Datei im Browser, damit Ihr HTML5-Spiel funktioniert!
Abschluss
Sie haben gelernt, wie Sie ein Space Shooter-Spiel mit all seinen Grundfunktionen erstellen. Versuchen Sie, es mit dem zu erweitern, was Sie bereits wissen. Ein guter Anfang wäre, die Feinde oder den Boss auf den Spieler zurückschießen zu lassen.
Ich hoffe dir hat dieses Tutorial gefallen, danke fürs Lesen!