Erstellen eines Pong-Spiels mit EaselJS in HTML5
() translation by (you can also view the original English article)
In diesem Tutorial erstellen wir mithilfe der EaselJS-Bibliothek einen Klon des klassischen Spiels Pong in HTML5. Das Spiel wird mehrere Bildschirme, Soundeffekte und einen (sehr einfachen) KI-Gegner haben.
Schritt 1: Kurze Übersicht
Mit vorgefertigten Grafiken werden wir ein unterhaltsames Pong-Spiel in HTML5 mithilfe der EaselJS-Bibliothek codieren, die eine Flash-ähnliche Oberfläche für die HTML5-Zeichenfläche bietet. Eine Einführung in EaselJS finden Sie in diesem Activetuts+ Artikel.
Der Spieler kann ein Paddel mit der Maus steuern und gegen den Computer-Controller-Gegner spielen, um Punkte zu erhalten.
Schritt 2: Schnittstelle
Es wird eine einfache Oberfläche mit einem neofuturistischen Stil verwendet. Dies umfasst mehrere Formen, Schaltflächen, Bitmaps und mehr.
Die für dieses Tutorial erforderlichen Grafiken finden Sie im angehängten Download.
Schritt 3: Holen Sie sich EaselJS
Die EaselJS-Bibliothek wird zum Erstellen unseres Spiels verwendet. Lesen Sie das Tutorial Erste Schritte, wenn Sie neu in dieser Bibliothek sind.
Sie können die neueste Version von EaselJS von der offiziellen Website herunterladen. Dies kann jedoch mit dem Code hier nicht kompatibel sein. Ich empfehle daher, die Version der Bibliothek zu verwenden, die im Quelldownload enthalten ist.
Schritt 4: HTML-Struktur
Bereiten wir unser HTML-Dokument vor. Wir beginnen mit den Grundlagen, nur einem Überblick über die Barebones:
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Pong</title> |
6 |
</head>
|
7 |
<body>
|
8 |
</body>
|
9 |
</html>
|
Schritt 5: Mobile Highlight ausblenden
Wir müssen auch ein wenig CSS hinzufügen, um die Standardhervorhebung zu entfernen, die angewendet wird, wenn Sie in 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>Pong</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, damit unsere App funktioniert.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Pong</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>/
|
Neben EaselJS verwenden wir auch TweenJS (für die Bearbeitung von Bildschirmübergängen und der Spieleschleife) und SoundJS (für die Soundeffekte).
Main.js
ist die Datei, in der wir unseren eigenen JS-Code speichern.
Schritt 7: Hauptfunktion aufrufen
In den nächsten Zeilen rufen wir unsere Main()
-Funktion auf. Dies ist die Funktion, mit der unsere Anwendung gestartet wird. Es wird später im Tutorial in Main.js
erstellt.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Pong</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: Canvas Tag
In dieser Zeile wird eine HTML5-Zeichenfläche erstellt. Wir weisen ihm eine ID zu, damit wir später darauf verweisen und auch seine Breite und Höhe festlegen können.
1 |
|
2 |
<!DOCTYPE html>
|
3 |
<html>
|
4 |
<head>
|
5 |
<title>Pong</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="Pong" width="480" height="320"></canvas> |
17 |
</body>
|
18 |
</html>
|
Schritt 9: Erstellen Sie Main.js
Beginnen wir mit der Erstellung unseres Spiels!
Öffnen Sie Ihren bevorzugten JavaScript-Editor (jeder Texteditor funktioniert, aber Sie haben keine Syntaxhervorhebung) und bereiten Sie das Schreiben des Codes vor. Denken Sie daran, die Datei als Main.js
in Ihrem Projektordner zu speichern.
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 AS3-Stufe.
1 |
|
2 |
/* Define Canvas */
|
3 |
|
4 |
var canvas; |
5 |
var stage; |
Schritt 11: Hintergrund
Diese Variable speichert das Titelhintergrundbild.
1 |
|
2 |
/* Background */
|
3 |
|
4 |
var bgImg = new Image(); |
5 |
var bg; |
Schritt 12: Titelansicht
Dies ist die Titelansicht, der erste interaktive Bildschirm, der in unserem Spiel angezeigt wird. Diese Variablen speichern ihre Komponenten.
1 |
|
2 |
/* Title View */
|
3 |
|
4 |
var mainImg = new Image(); |
5 |
var main; |
6 |
var startBImg = new Image(); |
7 |
var startB; |
8 |
var creditsBImg = new Image(); |
9 |
var creditsB; |
10 |
|
11 |
var TitleView = new Container(); |
Schritt 13: Credits
Diese Ansicht zeigt die Credits, das Jahr und das Copyright des Spiels. Diese Variablen werden zum Speichern verwendet.
1 |
|
2 |
/* Credits */
|
3 |
|
4 |
var creditsViewImg = new Image(); |
5 |
var credits; |
Schritt 14: Spielansicht
Die nächsten Variablen speichern die einzelnen Grafiken, die in der Spielansicht angezeigt werden:
1 |
|
2 |
/* Game View */
|
3 |
|
4 |
var playerImg = new Image(); |
5 |
var player; |
6 |
var ballImg = new Image(); |
7 |
var ball; |
8 |
var cpuImg = new Image(); |
9 |
var cpu; |
10 |
var winImg = new Image(); |
11 |
var win; |
12 |
var loseImg = new Image(); |
13 |
var lose; |
Schritt 15: Punktzahl
Die Bewertungswerte werden von den nächsten Variablen verarbeitet:
1 |
|
2 |
/* Score */
|
3 |
|
4 |
var playerScore; |
5 |
var cpuScore; |
Schritt 16: Variablen
Dies sind die Variablen, die wir verwenden werden. Lesen Sie die Kommentare im Code, um zu verstehen, wofür sie bestimmt sind:
1 |
|
2 |
var xSpeed = 5; //Horizontal speed of the ball |
3 |
var ySpeed = 5; //Vertical speed of the ball |
4 |
var gfxLoaded = 0; //used as a preloader, counts the already loaded items |
5 |
var tkr = new Object; //used as an event listener to the Ticker |
Schritt 17: Erstellen Sie Soundeffekte
Wir werden Soundeffekte verwenden, um das Spielgefühl zu verbessern. Die Sounds in diesem Beispiel wurden mit dem hervorragenden kostenlosen Werkzeug as3sfxr erstellt und mit Audacity in MP3 konvertiert.
Die erforderlichen Sounds finden Sie alle im Quellen-Download. Wenn Sie Ihre eigenen erstellen möchten, benötigen Sie vier:
-
hit.mp3
: wird gespielt, wenn der Ball ein Paddel trifft -
playerScore.mp3
: wird gespielt, wenn der Spieler ein Tor erzielt -
enemyScore.mp3
: wird gespielt, wenn der Feind ein Tor erzielt -
wall.mp3
: wird gespielt, wenn der Ball die obere oder untere Grenze erreicht
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 werden die notwendigen Funktionen aufgerufen, um das Spiel zu starten.
1 |
|
2 |
function Main() |
3 |
{
|
4 |
//code...
|
5 |
}
|
Schritt 19: Canvas verknüpfen
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. Fügen Sie dies zu Main()
hinzu.
1 |
|
2 |
/* Link Canvas */
|
3 |
|
4 |
canvas = document.getElementById('Pong'); |
5 |
stage = new Stage(canvas); |
Schritt 20: Mausereignisse aktivieren
Mausereignisse sind in EaselJS standardmäßig deaktiviert, um die Leistung zu verbessern. Da wir diese im Spiel brauchen, fügen wir die folgende Zeile hinzu. Fügen Sie dies zu Main()
hinzu.
1 |
|
2 |
stage.mouseEventsEnabled = true; |
Schritt 21: Sounds laden
Wir werden SoundJS verwenden, um unserem Spiel Sounds hinzuzufügen. Schreiben Sie den folgenden Code, um die Sounds zu importieren, die wir verwenden werden. Fügen Sie dies zu Main()
hinzu.
1 |
|
2 |
/* Sound */
|
3 |
|
4 |
SoundJS.addBatch([ |
5 |
{name:'hit', src:'hit.mp3', instances:1}, |
6 |
{name:'playerScore', src:'playerScore.mp3', instances:1}, |
7 |
{name:'enemyScore', src:'enemyScore.mp3', instances:1}, |
8 |
{name:'wall', src:'wall.mp3', instances:1}]); |
Schritt 22: Laden Sie Grafiken
Dieser Code wird verwendet, um die Grafiken mithilfe einer Funktion vorzuladen, die wir später schreiben werden. Es setzt die zuvor erstellten Bildobjekte so, dass sie auf die relevanten Quell-PNG-Dateien in unserem Dokumentordner verweisen.
Jedem wird ein Name gegeben, damit wir erkennen können, welches Bild später geladen wird, und zuletzt wird die Funktion aufgerufen, die die geladenen Bilder verarbeitet.
Fügen Sie dies zu Main()
hinzu.
1 |
|
2 |
/* Load GFX */
|
3 |
|
4 |
bgImg.src = 'bg.png'; |
5 |
bgImg.name = 'bg'; |
6 |
bgImg.onload = loadGfx; |
7 |
|
8 |
mainImg.src = 'main.png'; |
9 |
mainImg.name = 'main'; |
10 |
mainImg.onload = loadGfx; |
11 |
|
12 |
startBImg.src = 'startB.png'; |
13 |
startBImg.name = 'startB'; |
14 |
startBImg.onload = loadGfx; |
15 |
|
16 |
creditsBImg.src = 'creditsB.png'; |
17 |
creditsBImg.name = 'creditsB'; |
18 |
creditsBImg.onload = loadGfx; |
19 |
|
20 |
creditsViewImg.src = 'credits.png'; |
21 |
creditsViewImg.name = 'credits'; |
22 |
creditsViewImg.onload = loadGfx; |
23 |
|
24 |
playerImg.src = 'paddle.png'; |
25 |
playerImg.name = 'player'; |
26 |
playerImg.onload = loadGfx; |
27 |
|
28 |
ballImg.src = 'ball.png'; |
29 |
ballImg.name = 'ball'; |
30 |
ballImg.onload = loadGfx; |
31 |
|
32 |
cpuImg.src = 'paddle.png'; |
33 |
cpuImg.name = 'cpu'; |
34 |
cpuImg.onload = loadGfx; |
35 |
|
36 |
winImg.src = 'win.png'; |
37 |
winImg.name = 'win'; |
38 |
winImg.onload = loadGfx; |
39 |
|
40 |
loseImg.src = 'lose.png'; |
41 |
loseImg.name = 'lose'; |
42 |
loseImg.onload = loadGfx; |
Schritt 23: Ticker einstellen
Die Ticker-Klasse bietet eine zentralisierte Tick- oder Heartbeat-Übertragung in einem festgelegten Intervall. Dies kann verwendet werden, um die Spielschleife auszulösen.
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. Fügen Sie dies zu Main()
hinzu.
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 Sie fortfahren.
1 |
|
2 |
function loadGfx(e) |
3 |
{
|
4 |
if(e.target.name = 'bg'){bg = new Bitmap(bgImg);} |
5 |
if(e.target.name = 'main'){main = new Bitmap(mainImg);} |
6 |
if(e.target.name = 'startB'){startB = new Bitmap(startBImg);} |
7 |
if(e.target.name = 'creditsB'){creditsB = new Bitmap(creditsBImg);} |
8 |
if(e.target.name = 'credits'){credits = new Bitmap(creditsViewImg);} |
9 |
if(e.target.name = 'player'){player = new Bitmap(playerImg);} |
10 |
if(e.target.name = 'ball'){ball = new Bitmap(ballImg);} |
11 |
if(e.target.name = 'cpu'){cpu = new Bitmap(cpuImg);} |
12 |
if(e.target.name = 'win'){win = new Bitmap(winImg);} |
13 |
if(e.target.name = 'lose'){lose = new Bitmap(loseImg);} |
14 |
|
15 |
gfxLoaded++; |
16 |
|
17 |
if(gfxLoaded == 10) // remember to change this if you add more images |
18 |
{
|
19 |
addTitleView(); |
20 |
}
|
21 |
}
|
Schritt 25: Titelansicht hinzufügen
Wenn alle Grafiken geladen sind, wird die Titelansicht durch die folgende Funktion zur Bühne hinzugefügt:
1 |
|
2 |
function addTitleView() |
3 |
{
|
4 |
startB.x = 240 - 31.5; |
5 |
startB.y = 160; |
6 |
startB.name = 'startB'; |
7 |
|
8 |
creditsB.x = 241 - 42; |
9 |
creditsB.y = 200; |
10 |
|
11 |
TitleView.addChild(main, startB, creditsB); |
12 |
stage.addChild(bg, TitleView); |
13 |
stage.update(); |
Schritt 26: Start-Taste Listener
Diese Funktion fügt den TitleView-Schaltflächen die erforderlichen Listener hinzu (sie ist Teil von addTitleView()
):
1 |
|
2 |
startB.onPress = addGameView; |
3 |
creditsB.onPress = showCredits; |
4 |
}
|
Schritt 27: Credits anzeigen
Der Bildschirm "Credits" wird angezeigt, wenn der Benutzer auf die Schaltfläche "Credits" klickt. Dem vollständigen Bild wird ein Maus-Listener hinzugefügt, um es zu entfernen.
1 |
|
2 |
function showCredits() |
3 |
{
|
4 |
// Show Credits
|
5 |
|
6 |
credits.x = 480; |
7 |
|
8 |
stage.addChild(credits); |
9 |
stage.update(); |
10 |
Tween.get(credits).to({x:0}, 300); |
11 |
credits.onPress = hideCredits; |
12 |
}
|
Schritt 28: Credits ausblenden
Wenn Sie auf den Bildschirm "Credits" klicken, wird dieser zurückgeschaltet und von der Bühne entfernt.
1 |
|
2 |
// Hide Credits
|
3 |
|
4 |
function hideCredits(e) |
5 |
{
|
6 |
Tween.get(credits).to({x:480}, 300).call(rmvCredits); |
7 |
}
|
8 |
|
9 |
// Remove Credits
|
10 |
|
11 |
function rmvCredits() |
12 |
{
|
13 |
stage.removeChild(credits); |
14 |
}
|
Lassen Sie uns hier anhalten, um zu testen, was wir bisher getan haben. Klicken Sie hier für eine Meilenstein-Demo.
Beachten Sie, dass einige Zeilen auskommentiert wurden, da einige Funktionen noch nicht erstellt wurden.
Denken Sie daran, dass der Meilenstein in den Quelldateien enthalten ist. Wenn Ihre Datei diese also aus irgendeinem Grund nicht nachahmt, vergleichen Sie Ihre Quelle mit meiner, um festzustellen, was dies verursachen könnte.
Schritt 29: Spielansicht anzeigen
In den folgenden Zeilen wird die TitleView von der Bühne entfernt und die GameView-Elemente zur Bühne hinzugefügt. Dem Hintergrund wird ein Maus-Listener hinzugefügt, um das Spiel zu starten, wenn Sie darauf klicken.
1 |
|
2 |
function addGameView() |
3 |
{
|
4 |
// Destroy Menu & Credits screen
|
5 |
|
6 |
stage.removeChild(TitleView); |
7 |
TitleView = null; |
8 |
credits = null; |
9 |
|
10 |
// Add Game View
|
11 |
|
12 |
player.x = 2; |
13 |
player.y = 160 - 37.5; |
14 |
cpu.x = 480 - 25; |
15 |
cpu.y = 160 - 37.5; |
16 |
ball.x = 240 - 15; |
17 |
ball.y = 160 - 15; |
18 |
|
19 |
// Score
|
20 |
|
21 |
playerScore = new Text('0', 'bold 20px Arial', '#A3FF24'); |
22 |
playerScore.maxWidth = 1000; //fix for Chrome 17 |
23 |
playerScore.x = 211; |
24 |
playerScore.y = 20; |
25 |
|
26 |
cpuScore = new Text('0', 'bold 20px Arial', '#A3FF24'); |
27 |
cpuScore.maxWidth = 1000; //fix for Chrome 17 |
28 |
cpuScore.x = 262; |
29 |
cpuScore.y = 20; |
30 |
|
31 |
stage.addChild(playerScore, cpuScore, player, cpu, ball); |
32 |
stage.update(); |
33 |
|
34 |
// Start Listener
|
35 |
|
36 |
bg.onPress = startGame; |
37 |
}
|
Schritt 30: Spielerbewegung
Der Spieler bewegt sich zusammen mit der vertikalen Position der Maus:
1 |
|
2 |
function movePaddle(e) |
3 |
{
|
4 |
// Mouse Movement
|
5 |
|
6 |
player.y = e.stageY; |
7 |
}
|
Schritt 31: Spiel starten
Dieser Code wird ausgeführt, wenn der Spieler auf den Spielhintergrund klickt. Er fügt den Maus-Listener hinzu, der die Funktion im vorherigen Schritt auslöst, und fügt einen Ticker hinzu, um die Spielschleife zu steuern.
Achten Sie auf die Art und Weise, wie der Ticker erstellt wird: Dies entspricht einem Timer-Ereignis in AS3.
1 |
|
2 |
function startGame(e) |
3 |
{
|
4 |
bg.onPress = null; |
5 |
stage.onMouseMove = movePaddle; |
6 |
|
7 |
Ticker.addListener(tkr, false); |
8 |
tkr.tick = update; |
9 |
}
|
Schritt 32: Zurücksetzen
Wenn ein Punkt erzielt wird (vom Spieler oder vom Computer), kehren die Paddel und der Ball in ihre ursprüngliche Position zurück und das Spiel wird unterbrochen:
1 |
|
2 |
function reset() |
3 |
{
|
4 |
ball.x = 240 - 15; |
5 |
ball.y = 160 - 15; |
6 |
player.y = 160 - 37.5; |
7 |
cpu.y = 160 - 37.5; |
8 |
|
9 |
stage.onMouseMove = null; //stop listening to the mouse |
10 |
Ticker.removeListener(tkr); //pause the game |
11 |
bg.onPress = startGame; |
12 |
}
|
Schritt 33: Ballbewegung
Wenn das Spiel nicht unterbrochen wird, wird der Ball in jedem Frame mit den zuvor erstellten Variablen bewegt.
1 |
|
2 |
function update() |
3 |
{
|
4 |
// Ball Movement
|
5 |
|
6 |
ball.x = ball.x + xSpeed; |
7 |
ball.y = ball.y + ySpeed; |
Schritt 34: CPU-Bewegung
Dieser Code steuert die Bewegung des Computers. Das Paddel wird so bewegt, dass es dem Ball folgt und dennoch eine gewisse Fehlerquote aufweist.
1 |
|
2 |
if(cpu.y < ball.y) { |
3 |
cpu.y = cpu.y + 2.5; |
4 |
}
|
5 |
else if(cpu.y > ball.y) { |
6 |
cpu.y = cpu.y - 2.5; |
7 |
}
|
Schritt 35: Wandkollisionen
Hier prüfen wir, ob sich der Ball am oberen oder unteren Rand der Leinwand befindet. In diesem Fall wird die vertikale Geschwindigkeit umgekehrt und ein Ton abgespielt.
1 |
|
2 |
if((ball.y) < 0) { ySpeed = -ySpeed; SoundJS.play('wall');};//Up |
3 |
if((ball.y + (30)) > 320) { ySpeed = -ySpeed; SoundJS.play('wall');};//down |
Schritt 36: Ergebnisse
Nun die linke und rechte Seite. Dieser Code ändert auch die Punktzahl, ruft die Rücksetzfunktion auf und spielt je nach der Seite, auf der der Ball berührt wurde, einen anderen Klang.
1 |
|
2 |
/* CPU Score */
|
3 |
|
4 |
if((ball.x) < 0) |
5 |
{
|
6 |
xSpeed = -xSpeed; |
7 |
cpuScore.text = parseInt(cpuScore.text + 1); |
8 |
reset(); |
9 |
SoundJS.play('enemyScore'); |
10 |
}
|
11 |
|
12 |
/* Player Score */
|
13 |
|
14 |
if((ball.x + (30)) > 480) |
15 |
{
|
16 |
xSpeed = -xSpeed; |
17 |
playerScore.text = parseInt(playerScore.text + 1); |
18 |
reset(); |
19 |
SoundJS.play('playerScore'); |
20 |
}
|
Schritt 37: Ball-Paddel-Kollisionen
Der folgende Code überprüft, ob der Ball mit einem Paddel kollidiert, indem er die Position des Paddels mit den Koordinaten des Balls vergleicht. Wenn sich die Begrenzungsrahmen der beiden kreuzen, kommt es zu einer Kollision, sodass wir die x-Geschwindigkeit des Balls umkehren und einen Ton abspielen.
1 |
|
2 |
/* Cpu collision */
|
3 |
|
4 |
if(ball.x + 30 > cpu.x && ball.x + 30 < cpu.x + 22 && ball.y >= cpu.y && ball.y < cpu.y + 75) |
5 |
{
|
6 |
xSpeed *= -1; |
7 |
SoundJS.play('hit'); |
8 |
}
|
9 |
|
10 |
/* Player collision */
|
11 |
|
12 |
if(ball.x <= player.x + 22 && ball.x > player.x && ball.y >= player.y && ball.y < player.y + 75) |
13 |
{
|
14 |
xSpeed *= -1; |
15 |
SoundJS.play('hit'); |
16 |
}
|
Schritt 38: Auf Win/Game Over prüfen
Sie können die Endbedingung in den nächsten Zeilen ändern - sie ist standardmäßig auf 10 Punkte festgelegt.
1 |
|
2 |
/* Check for Win */
|
3 |
|
4 |
if(playerScore.text == '10') |
5 |
{
|
6 |
alert('win'); |
7 |
}
|
8 |
|
9 |
/* Check for Game Over */
|
10 |
|
11 |
if(cpuScore.text == '10') |
12 |
{
|
13 |
alert('lose'); |
14 |
}
|
Schritt 39: Alarm
Diese Funktion stoppt das Spiel und zeigt eine Warnung an, deren Inhalt vom Spielergebnis abhängt.
1 |
|
2 |
function alert(e) |
3 |
{
|
4 |
Ticker.removeListener(tkr); |
5 |
stage.onMouseMove = null; |
6 |
bg.onPress = null |
7 |
|
8 |
if(e == 'win') |
9 |
{
|
10 |
win.x = 140; |
11 |
win.y = -90; |
12 |
|
13 |
stage.addChild(win); |
14 |
Tween.get(win).to({y: 115}, 300); |
15 |
}
|
16 |
else
|
17 |
{
|
18 |
lose.x = 140; |
19 |
lose.y = -90; |
20 |
|
21 |
stage.addChild(lose); |
22 |
Tween.get(lose).to({y: 115}, 300); |
23 |
}
|
24 |
}
|
Schritt 40: Testen
Speichern Sie Ihre Arbeit (falls nicht) und öffnen Sie die HTML-Datei im Browser, damit Ihr Spiel funktioniert!
Schlussfolgerung
Versuchen Sie, die Variablen des Spiels zu ändern, um Ihre eigene Version des Spiels zu erstellen!
Ich hoffe dir hat dieses Tutorial gefallen, danke fürs Lesen!