HTML5-Tutorium: Canvas: MiniPong 04: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) |
||
| Zeile 109: | Zeile 109: | ||
==Funktionen, die teilweise wiederverwendet werden können== | ==Funktionen, die teilweise wiederverwendet werden können== | ||
{{TBD}} | {{TBD}} | ||
sowie die Methoden <code> | sowie die Methoden <code>f_init</code> (einschließlich des Befehls <code>window.onload = f_init;</code>) | ||
<source lang="javascript"> | <source lang="javascript"> | ||
Version vom 12. Oktober 2012, 14:49 Uhr
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:
| Korrektheit: 3 (zu größeren Teilen überprüft) |
Umfang: 3 (einige wichtige Fakten fehlen) |
Quellenangaben: 5 (vollständig vorhanden) |
Quellenarten: 5 (ausgezeichnet) |
Konformität: 5 (ausgezeichnet) |
HTML-Tutorium: MiniPong
MiniPong: | Teil 1 | Teil 2 | Teil 3 | Teil 4 | Teil 5
Musterlösung: Minipong 3
(SVN-Repository)
Ziel
Im dritten Teil des Tutoriums wird beschrieben, wie man MiniPong mit Hilfe einer einzigen JavaScript-Datei erstellt. Wolfgang Kowarschick bezeichnet so eine Datei als „Moloch-Datei“ (Moloch = Monstrum, Ungeheuer, alles verschlingende Bestie).
Neues Projekt anlegen
Legen Sie ein neues Projekt MiniPong02 an
und speichern Sie dieses Projekt auf die bekannte Weise in Ihrem
SVN-Repository.
Dateien erstellen
Kopieren Sie die Dateien index.html und css/Main.css von Teil 2 des Tutoriums,
passen Sie den Projekttitel in der Datei index.html an
und erstellen Sie die Dateien js/CONSTANT.js js/Main.js neu.
index.html
Fügen Sie in den HTML-Rumpf (body) folgenden Code vor das canvas-Element
ein:
<p id="d_score"> </p>
Der Text dieses Elements wird von JavaScript aus geändert, um den jeweiligen Punktestand anzuzeigen.
ist ein Leerzeichen und sorgt dafür, dass sich Eclipse nicht über ein leeres p-Element beschwert.
Fügen Sie in den HTML-Rumpf (body) folgendes Formular hinter das canvas-Element
ein:
<form>
<input id="d_start_stop" type="button"/>
</form>
Dieser Button fungiert – je nach aktuellen Status des Spiels – als Start- oder Stopp-Button. Die Beschriftung sowie die Zuordnung der zugehörigen Aktion wird jeweils mittels JavaScript an den aktuellen Zustand der Anwendung angepasst.
CONSTANT.js
Fügen Sie alle Variablen der beiden Dateien CONSTANT.js von Teil 1
und Teil 2 des Tutoriums in die Datei CONSTANT.js ds dritten Teils ein.
Achtung: Definieren Sie keine Variable doppelt.
Sie werde später noch weitere Konstanten in diese Datei einfügen,
wie z.B. Konstanten, die die Startposition von Ball und Schläger definieren,
oder eine Konstate PADDLE_FRICTION, die die Reibung des Schlägers festlegt.
(Beachten Sie, dass in den Use Cases Folgendes gefordert wurde:
Wird der Schläger im Moment der Kollision bewegt, so wird der Ball abhängig von der Bewegungsrichtung und Geschwindigkeit des Schlägers abgelenkt.)
main.js
Fügen Sie die Variablen v_ball, v_paddle, v_context, v_interval und v_score
der beiden Dateien main.js von Teil 1
und Teil 2 des Tutoriums in die Datei main.js ds dritten Teils ein.
Achtung: Definieren Sie keine Variable doppelt.
Das Ball-Objekt v_ball
Erweitern Sie das Ball-Objekt v_ball um eine Initialisierungsmethode, deren Aufgabe es ist, den Ball
am oberen Bühnenrand zu positionieren und eine Startgeschwindigkeit festzulegen:
init: function()
{ this.x = CANVAS_WIDTH/2;
this.y = this.r + BALL_PADDING;
this.vx = (Math.random()<0.5?1:-1)*( 50 + Math.random()*100);
this.vy = 150 + Math.random()* 50;
}
Beachten Sie, dass der Ball BALL_PADDING Pixel vom oberen Rand entfernt positioniert wird.
Den Wert dieser Konstanten müssen Sie in CONSTANT.js festlegen.
Legen Sie im Ball-Objekt für alle Attribute sinnvolle Initialwerte fest.
Diejenigen Werte, die später von der init-Methode festgelegt werden,
können einfach mit Null vorbelegt werden.
Das Schläger-Objekt v_paddle
Erweitern Sie das Schläger-Objekt v_paddle um eine Initialisierungsmethode, deren Aufgabe es ist, den Schläger
am unteren Bühnenrand zu positionieren und die Startgeschwindigkeit des Schlägers (in x-Richtung) auf 0 zu setzen:
init: function()
{ this.x = (CANVAS_WIDTH - this.width) / 2;
this.y = CANVAS_HEIGHT - this.height - PADDLE_PADDING;
this.vx = 0;
},
Beachten Sie, dass der Schläger PADDLE_PADDING Pixel vom unteren Rand entfernt positioniert wird.
Den Wert dieser Konstanten müssen Sie in CONSTANT.js festlegen.
Legen Sie im Schläger-Objekt für alle Attribute sinnvolle Initialwerte fest.
Diejenigen Werte, die später von der init-Methode festgelegt werden,
können einfach mit Null vorbelegt werden.
Definieren Sie für das Schläger-Objekt ein weiteres Attribut friction und
initialisieren Sie dieses mit der Konstanten PADDLE_FRICTION.
Funktionen, die teilweise wiederverwendet werden können
TO BE DONE
sowie die Methoden f_init (einschließlich des Befehls window.onload = f_init;)
Neue Funktionen
Anwendung testen und sichern
Testen Sie Ihre Anwendung in gewohnter Weise.
Vergessen Sie nicht, sie im SVN-Repository zu sichern.
Erweiterung
Erweitern Sie die Anwendung so, dass Sie zwei Schläger unabhängig voneinander links und rechts am Bühnenrand bewegen können, so dass zwei Spieler gegeneinader spielen können. Jeder Spieler hat seinen eigenen Score. Der erste Spieler, der 10 Punkte erreicht hat, gewinnt.
Sie können die erzielten Punkte natürlich auch auf der Bühne selbst anzeigen (vgl. Bilder im [[Wikipedia:Pong Wikipedia-Artikel zu Pong]).
Beachten Sie wieder das Programmierprinzip „Don't repeat yourself“ (Dry).
Quellen
- Braun (2011): Herbert Braun; Webanimationen mit Canvas; in: c't Webdesign; Band: 2011; Seite(n): 44–48; Verlag: Heise Zeitschriften Verlag; Adresse: Hannover; 2011; Quellengüte: 5 (Artikel)
- Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)
- Musterlösungen, Musterlösungen (SVN)
