MMProg:WiSe2015:Praktikum:Aufgabe 9

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Version vom 22. Oktober 2015, 19:44 Uhr von Lawrence (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „=Praktikumsaufgabe 9= ==Physics== ===Ziel=== Ziel dieser Aufgabe ist es einfache physikalische Berechnungen innerhalb vom Model einer MVC-Anwendung zu imple…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Praktikumsaufgabe 9

Physics

Ziel

Ziel dieser Aufgabe ist es einfache physikalische Berechnungen innerhalb vom Model einer MVC-Anwendung zu implementieren. Orientieren Sie sich für die Berechnungen an dem in der Vorlesung behandelten Tutorium für Physics in JavaScript.

Vorbereitung

Erzeugen Sie einen neuen Ordner namens "aufgabe9" innerhalb Ihres Verzeichnis für die Praktikumsaufgaben. Speichern Sie alle Dateien aus dem Vorlagenordner "aufgabe9/vorlage" in diesem Ordner ab.

Die Vorlage enthält eine nach MVC modellierte Anwendung, welche Elemente nach einfach physikalischen Gesetzen bewegen soll. Den gesamten Code für die Berechnungen im Model sowie für die Spielersteuerung im Controller müssen Sie selbst implementieren. Suchen Sie in "index.js", "World.js", "GameController.js" und "PlayerKeyboardController.js" nach den "TODO"-Kommentaren.

Geschwindigkeit

Erweitern Sie die physikalische Welt so, dass alle Elemente bei jeder Neuberechnung ihre x- und y-Position um 0.5 verändern. Dies führt dazu, dass sich das grüne Objekt mit einer konstanten Geschwindigkeit nach rechts unten bewegt.

Verändern Sie die Berechnung nun so, dass alle Elemente ihre Position immer um ihre jeweilige Geschwindigkeit verändern. Weisen Sie dem Element "player" in der Datei "index.js" eine x-Geschwindigkeit (vx) und y-Geschwindigkeit (vy) von 0.5 zu. Dies führt zu dem gleichen Ergebnis mit dem Unterschied, dass das Element definiert welche Geschwindigkeit es hat.


Keyboard-Steuerung

Entfernen Sie die Zuweisung einer festen Geschwindigkeit für das Element "player" wieder aus der Datei "index.js." Erweitern Sie den PlayerKeyboardController so, dass "player" bei bestimmten Events folgende Geschwindigkeiten zugewiesen werden:

  • Beim Runterdrücken der linken Cursortaste eine "vx" von 1.0
  • Beim Runterdrücken der rechten Cursortaste eine "vx" von 1.0
  • Beim Loslassen der linken oder rechten Cursortaste eine "vx" 0.0

Dies führt dazu, dass der Spieler / das grüne Rechteckt nun mithilfe der Cursortasten gesteuert werden kann.


Beschleunigung

Erweitern Sie die physikalische Welt so, dass alle Elemente ihre Geschwindigkeit immer um ihre Beschleunigung verändern. Weisen Sie dann dem Element "player" in der Datei "index.js" eine vertikale Beschleunigung von 0.05 zu. Dies führt dazu, dass das Spielerobjekt konstant nach unten beschleunigt und bald daraufhin das Spielfeld verlässt.

Entfernen Sie die Zuweisung einer festen Beschleunigung für das Element "player" wieder aus der Datei "index.js." Erweitern Sie die Welt so, dass alle Elemente ihre Geschwindigkeit zusätzlich um die globale Beschleunigung verändern.

Tipp: Die globale Beschleunigung wird innerhalb der Welt in den Eigenschaften "_ax" und "_ay" gespeichert. Dies führt zu dem gleichen Ergebnis mit dem Unterschied, dass nun die Welt eine Erdanziehungskraft aufweist.


Begrenzungen

Implementieren Sie die Funktion "_keepElementsInsideWorld" so, dass Elemente die Begrenzungen der Welt nicht verlassen können. Stellen Sie dazu im ersten Schritt fest ob eine horizontale oder vertikale Überschreitung der Begrenzung vorliegt. Ist dies der Fall setzen Sie die entsprechenden Geschwindigkeits- und Beschleunigungsanteile auf null zurück. Stellen Sie im zweiten Schritt sicher, dass die x- bzw. y-Position bei entsprechender Überschreitung auch korrigiert wird.

Dies führt dazu, dass der Spieler am unteren Boden belibt und die Welt weder nach links noch rechts verlassen kann.


Springen

Erweitern Sie den PlayerKeyboardController so, dass der Spieler durch Druck auf die Leertase eine vy von -7.5 erhält. Dies soll aber nur dann geschehen, wenn die vertikale Geschwindigkeit des Spielers nicht bereits unter 0 ist.

Die Erweiterung führt dazu, dass man den Spieler nun mithilfe der Tastatursteuerung springen lassen kann. Bei mehrfachem Drücken der Leertaste kann der Spieler immer höher springen.


Plattform

Erweitern Sie die Welt zunächst so, dass alle Elemente mit Eigenschaft "isImmovable" auf true ihre Position nie verändern.

Erzeugen Sie ein Element namens "platform" in der Datei "index.js" mit Koordinaten (200, 200) und Dimensionen (200, 20). Weisen Sie dem Element außerdem nach seiner initialen Erstellung für die Eigenschaft "isImmovable" den Wert true zu. Fügen Sie es dann sowohl der Welt hinzu mittels addElement() als der SVG-View durch von Aufruf von addObjectView().

Dies führt dazu, dass ein weiteres Objekt in der Welt erscheint welches sich allerdings nicht Objekt.


Kollisionserkennung

Erweitern Sie nun die Welt so, dass sie alle Elemente in effizienter Weise darauf überprüft, ob sie miteinander kollidieren. Findet eine Kollision statt wird die Kollisionstiefe mithilfe der Funktion _getCollisionDepth() festgestellt. Auf Basis der zurückgelieferten x- und y-Anteile der Kollisionstiefe wird zunächst die Kollisionsachse ermittelt werden. Handelt es sich um die y-Achse werden die x-Geschwindigkeiten der Elemente umgekehrt, bei der x-Achse die y-Geschwindigkeiten.

Tipp: Lagern Sie den Code für die Reaktion auf eine Kollision in eine Funktion aus, z.B. mit dem Namen _solveCollision().

Dies führt dazu, dass der Spieler auf die Platform springen kann und dort automatisch auf und ab springt.


Kollisionsverarbeitung

Erweitern Sie die Kollisionauflösung der Welt so, dass sie folgendes Verhalten für zwei Elemente aufweist (genannt a und b):

  • falls y die Kollisionsachse ist, wird vx von a und b umgekehrt
  • falls x die Kollisionsachse ist und
 * a unbweglich ist und b.vy > 0 ist wird b.y um die Kollisionstiefe verringert und b.vy auf 0 gesetzt
 * b unbweglich ist und a.vy > 0 ist wird a.y um die Kollisionstiefe verringert und a.vy auf 0 gesetzt
 * keine der beiden oberen Fälle eintritt werden die vy von a und b umgekehrt

Dies führt dazu, dass der Spieler oben auf der Platform stehen bleibt und von unten wieder von der Platform abprallt.


Events

Erweitern Sie nun die Kollisionserkennung so, dass bei jeder Kollision ein Ereignis namens "collision" erzeugt wird. Erweitern Sie den GameController so dass bei jeder Platformkollision die y-Position der Platform um .25 erhöht wird.

Dies führt dazu, dass wenn der Spieler auf der Platform steht diese sich konstant langsam nach unten bewegt.