<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/index.php?action=history&amp;feed=atom&amp;title=MMProg%3AWiSe2015%3APraktikum%3AAufgabe_9</id>
	<title>MMProg:WiSe2015:Praktikum:Aufgabe 9 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/index.php?action=history&amp;feed=atom&amp;title=MMProg%3AWiSe2015%3APraktikum%3AAufgabe_9"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_9&amp;action=history"/>
	<updated>2026-07-20T02:26:39Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in GlossarWiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_9&amp;diff=38270&amp;oldid=prev</id>
		<title>Lawrence: 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…“</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_9&amp;diff=38270&amp;oldid=prev"/>
		<updated>2015-10-22T19:44:56Z</updated>

		<summary type="html">&lt;p&gt;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…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Praktikumsaufgabe 9=&lt;br /&gt;
&lt;br /&gt;
==Physics==&lt;br /&gt;
&lt;br /&gt;
===Ziel===&lt;br /&gt;
&lt;br /&gt;
Ziel dieser Aufgabe ist es einfache physikalische Berechnungen innerhalb vom Model einer MVC-Anwendung zu implementieren.&lt;br /&gt;
Orientieren Sie sich für die Berechnungen an dem in der Vorlesung behandelten&lt;br /&gt;
[http://glossar.hs-augsburg.de/JavaScript-Tutorium:Physics Tutorium] für Physics in JavaScript.&lt;br /&gt;
&lt;br /&gt;
===Vorbereitung===&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie einen neuen Ordner namens &amp;quot;aufgabe9&amp;quot; innerhalb Ihres Verzeichnis für die Praktikumsaufgaben.&lt;br /&gt;
Speichern Sie alle Dateien aus dem Vorlagenordner &amp;quot;aufgabe9/vorlage&amp;quot; in diesem Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Die Vorlage enthält eine nach MVC modellierte Anwendung, welche Elemente nach einfach physikalischen Gesetzen bewegen soll.&lt;br /&gt;
Den gesamten Code für die Berechnungen im Model sowie für die Spielersteuerung im Controller müssen Sie selbst implementieren.&lt;br /&gt;
Suchen Sie in &amp;quot;index.js&amp;quot;, &amp;quot;World.js&amp;quot;, &amp;quot;GameController.js&amp;quot; und &amp;quot;PlayerKeyboardController.js&amp;quot; nach den &amp;quot;TODO&amp;quot;-Kommentaren.&lt;br /&gt;
&lt;br /&gt;
===Geschwindigkeit===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie die physikalische Welt so, dass alle Elemente bei jeder Neuberechnung ihre x- und y-Position um 0.5 verändern.&lt;br /&gt;
Dies führt dazu, dass sich das grüne Objekt mit einer konstanten Geschwindigkeit nach rechts unten bewegt.&lt;br /&gt;
&lt;br /&gt;
Verändern Sie die Berechnung nun so, dass alle Elemente ihre Position immer um ihre jeweilige Geschwindigkeit verändern.&lt;br /&gt;
Weisen Sie dem Element &amp;quot;player&amp;quot; in der Datei &amp;quot;index.js&amp;quot; eine x-Geschwindigkeit (vx) und y-Geschwindigkeit (vy) von 0.5 zu.&lt;br /&gt;
Dies führt zu dem gleichen Ergebnis mit dem Unterschied, dass das Element definiert welche Geschwindigkeit es hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Keyboard-Steuerung===&lt;br /&gt;
&lt;br /&gt;
Entfernen Sie die Zuweisung einer festen Geschwindigkeit für das Element &amp;quot;player&amp;quot; wieder aus der Datei &amp;quot;index.js.&amp;quot;&lt;br /&gt;
Erweitern Sie den &amp;lt;code&amp;gt;PlayerKeyboardController&amp;lt;/code&amp;gt; so, dass &amp;quot;player&amp;quot; bei bestimmten Events folgende Geschwindigkeiten zugewiesen werden:&lt;br /&gt;
&lt;br /&gt;
* Beim Runterdrücken der linken Cursortaste eine &amp;quot;vx&amp;quot; von 1.0&lt;br /&gt;
* Beim Runterdrücken der rechten Cursortaste eine &amp;quot;vx&amp;quot; von 1.0&lt;br /&gt;
* Beim Loslassen der linken oder rechten Cursortaste eine &amp;quot;vx&amp;quot; 0.0&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass der Spieler / das grüne Rechteckt nun mithilfe der Cursortasten gesteuert werden kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Beschleunigung===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie die physikalische Welt so, dass alle Elemente ihre Geschwindigkeit immer um ihre Beschleunigung verändern.&lt;br /&gt;
Weisen Sie dann dem Element &amp;quot;player&amp;quot; in der Datei &amp;quot;index.js&amp;quot; eine vertikale Beschleunigung von 0.05 zu.&lt;br /&gt;
Dies führt dazu, dass das Spielerobjekt konstant nach unten beschleunigt und bald daraufhin das Spielfeld verlässt.&lt;br /&gt;
&lt;br /&gt;
Entfernen Sie die Zuweisung einer festen Beschleunigung für das Element &amp;quot;player&amp;quot; wieder aus der Datei &amp;quot;index.js.&amp;quot;&lt;br /&gt;
Erweitern Sie die Welt so, dass alle Elemente ihre Geschwindigkeit zusätzlich um die globale Beschleunigung verändern.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tipp:&amp;#039;&amp;#039;&amp;#039; Die globale Beschleunigung wird innerhalb der Welt in den Eigenschaften &amp;quot;_ax&amp;quot; und &amp;quot;_ay&amp;quot; gespeichert.&lt;br /&gt;
Dies führt zu dem gleichen Ergebnis mit dem Unterschied, dass nun die Welt eine Erdanziehungskraft aufweist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Begrenzungen===&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie die Funktion &amp;quot;_keepElementsInsideWorld&amp;quot; so, dass Elemente die Begrenzungen der Welt nicht verlassen können.&lt;br /&gt;
Stellen Sie dazu im ersten Schritt fest ob eine horizontale oder vertikale Überschreitung der Begrenzung vorliegt.&lt;br /&gt;
Ist dies der Fall setzen Sie die entsprechenden Geschwindigkeits- und Beschleunigungsanteile auf null zurück.&lt;br /&gt;
Stellen Sie im zweiten Schritt sicher, dass die x- bzw. y-Position bei entsprechender Überschreitung auch korrigiert wird.&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass der Spieler am unteren Boden belibt und die Welt weder nach links noch rechts verlassen kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Springen===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie den &amp;lt;code&amp;gt;PlayerKeyboardController&amp;lt;/code&amp;gt; so, dass der Spieler durch Druck auf die Leertase eine vy von -7.5 erhält.&lt;br /&gt;
Dies soll aber nur dann geschehen, wenn die vertikale Geschwindigkeit des Spielers nicht bereits unter 0 ist.&lt;br /&gt;
&lt;br /&gt;
Die Erweiterung führt dazu, dass man den Spieler nun mithilfe der Tastatursteuerung springen lassen kann.&lt;br /&gt;
Bei mehrfachem Drücken der Leertaste kann der Spieler immer höher springen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Plattform===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie die Welt zunächst so, dass alle Elemente mit Eigenschaft &amp;quot;isImmovable&amp;quot; auf &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; ihre Position nie verändern.&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie ein Element namens &amp;quot;platform&amp;quot; in der Datei &amp;quot;index.js&amp;quot; mit Koordinaten (200, 200) und Dimensionen (200, 20).&lt;br /&gt;
Weisen Sie dem Element außerdem nach seiner initialen Erstellung für die Eigenschaft &amp;quot;isImmovable&amp;quot; den Wert &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zu.&lt;br /&gt;
Fügen Sie es dann sowohl der Welt hinzu mittels &amp;lt;code&amp;gt;addElement()&amp;lt;/code&amp;gt; als der SVG-View durch von Aufruf von &amp;lt;code&amp;gt;addObjectView()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass ein weiteres Objekt in der Welt erscheint welches sich allerdings nicht Objekt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Kollisionserkennung===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie nun die Welt so, dass sie alle Elemente in effizienter Weise darauf überprüft, ob sie miteinander kollidieren.&lt;br /&gt;
Findet eine Kollision statt wird die Kollisionstiefe mithilfe der Funktion &amp;lt;code&amp;gt;_getCollisionDepth()&amp;lt;/code&amp;gt; festgestellt.&lt;br /&gt;
Auf Basis der zurückgelieferten x- und y-Anteile der Kollisionstiefe wird zunächst die Kollisionsachse ermittelt werden.&lt;br /&gt;
Handelt es sich um die y-Achse werden die x-Geschwindigkeiten der Elemente umgekehrt, bei der x-Achse die y-Geschwindigkeiten.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tipp:&amp;#039;&amp;#039;&amp;#039; Lagern Sie den Code für die Reaktion auf eine Kollision in eine Funktion aus, z.B. mit dem Namen &amp;lt;code&amp;gt;_solveCollision()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass der Spieler auf die Platform springen kann und dort automatisch auf und ab springt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Kollisionsverarbeitung===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie die Kollisionauflösung der Welt so, dass sie folgendes Verhalten für zwei Elemente aufweist (genannt a und b):&lt;br /&gt;
&lt;br /&gt;
* falls y die Kollisionsachse ist, wird vx von a und b umgekehrt&lt;br /&gt;
* falls x die Kollisionsachse ist und&lt;br /&gt;
  * a unbweglich ist und b.vy &amp;gt; 0 ist wird b.y um die Kollisionstiefe verringert und b.vy auf 0 gesetzt&lt;br /&gt;
  * b unbweglich ist und a.vy &amp;gt; 0 ist wird a.y um die Kollisionstiefe verringert und a.vy auf 0 gesetzt&lt;br /&gt;
  * keine der beiden oberen Fälle eintritt werden die vy von a und b umgekehrt&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass der Spieler oben auf der Platform stehen bleibt und von unten wieder von der Platform abprallt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Events===&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie nun die Kollisionserkennung so, dass bei jeder Kollision ein Ereignis namens &amp;quot;collision&amp;quot; erzeugt wird.&lt;br /&gt;
Erweitern Sie den &amp;lt;code&amp;gt;GameController&amp;lt;/code&amp;gt; so dass bei jeder Platformkollision die y-Position der Platform um .25 erhöht wird.&lt;br /&gt;
&lt;br /&gt;
Dies führt dazu, dass wenn der Spieler auf der Platform steht diese sich konstant langsam nach unten bewegt.&lt;/div&gt;</summary>
		<author><name>Lawrence</name></author>
	</entry>
</feed>