<?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_7</id>
	<title>MMProg:WiSe2015:Praktikum:Aufgabe 7 - 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_7"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_7&amp;action=history"/>
	<updated>2026-07-18T02:06:06Z</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_7&amp;diff=38266&amp;oldid=prev</id>
		<title>Lawrence am 15. Oktober 2015 um 10:30 Uhr</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_7&amp;diff=38266&amp;oldid=prev"/>
		<updated>2015-10-15T10:30:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de-x-formal&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 15. Oktober 2015, 10:30 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l126&quot;&gt;Zeile 126:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 126:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Links===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Links===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nutzen Sie die folgenden Links für weitere Information über Timer&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;SVG &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;und Canvas&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nutzen Sie die folgenden Links für weitere Information über Timer &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;und &lt;/ins&gt;SVG:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lawrence</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_7&amp;diff=38245&amp;oldid=prev</id>
		<title>Lawrence: Die Seite wurde neu angelegt: „=Praktikumsaufgabe 7=  ==Rendering und Animation==  ===Ziel===  Ziel dieser Aufgabe ist es ein einfaches Spiel mithilfe von Timern, DOM und SVG im Browser zu r…“</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:WiSe2015:Praktikum:Aufgabe_7&amp;diff=38245&amp;oldid=prev"/>
		<updated>2015-10-01T21:13:18Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=Praktikumsaufgabe 7=  ==Rendering und Animation==  ===Ziel===  Ziel dieser Aufgabe ist es ein einfaches Spiel mithilfe von Timern, DOM und SVG im Browser zu r…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Praktikumsaufgabe 7=&lt;br /&gt;
&lt;br /&gt;
==Rendering und Animation==&lt;br /&gt;
&lt;br /&gt;
===Ziel===&lt;br /&gt;
&lt;br /&gt;
Ziel dieser Aufgabe ist es ein einfaches Spiel mithilfe von Timern, DOM und SVG im Browser zu rendern.&lt;br /&gt;
&lt;br /&gt;
Das Spiel besteht darin herunterfallenden Hindernissen auszuweichen. Der Spieler wird mit den Cursortasten gesteuert.&lt;br /&gt;
&lt;br /&gt;
===Projekt vorbereiten===&lt;br /&gt;
&lt;br /&gt;
Erzeugen Sie einen neuen Ordner &amp;quot;aufgabe7&amp;quot; innerhalb Ihres Verzeichnis für die Praktikumsaufgaben.&lt;br /&gt;
Speichern Sie alle Dateien aus dem Vorlagenordner &amp;quot;aufgabe7/vorlage&amp;quot; in diesem Ordner ab.&lt;br /&gt;
&lt;br /&gt;
Die Vorlage enthält ein voll funktionierendes Spiel, welches aus den folgenden Komponenten besteht:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;model/Player.js&amp;#039;&amp;#039;&amp;#039; - Modell eines Spielers&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;model/Enemy.js&amp;#039;&amp;#039;&amp;#039; - Modell eines Gegners&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;model/EnemyFactory.js&amp;#039;&amp;#039;&amp;#039; - Erzeugt in regelmäßigen Abständen zufällige Gegner&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;model/Level.js&amp;#039;&amp;#039;&amp;#039; - Modell eines physikalischen Levels; bewegt die Spielobjekte und überprüft Kollisionen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;controller/GameController.js&amp;#039;&amp;#039;&amp;#039; - Verarbeitet Benutzereingaben und gibt Änderungen der Modelle an die Views weiter&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;index.js&amp;#039;&amp;#039;&amp;#039; - Startet das Spiel, erzeugt und orchestriert die einzelnen Komponenten&lt;br /&gt;
&lt;br /&gt;
Die Datei &amp;quot;index.js&amp;quot; wartet zunächst auf Eingaben durch den Benutzer um daraufhin das Spiel zu starten.&lt;br /&gt;
Dabei wird im ersten Schritt eine physikalische Welt erzeugt und ein Spieler dieser hinzugefügt.&lt;br /&gt;
Des Weiteren wird eine EnemyFactory erstellt, welche Gegner erzeugt, die auch der physikalischen Welt hinzugefügt werden.&lt;br /&gt;
&lt;br /&gt;
Damit die Spielobjekte im Browser gerendert werden können wird außerdem ein View-Objekt erzeugt.&lt;br /&gt;
Ebenso wie der physikalischen Welt werden die Spieler- und Gegner-Objekte auch der View hinzugefügt.&lt;br /&gt;
Welche View-Technologie verwendet wird um das Spiel darzustellen kann der Benutzer vor dem Spielstart entscheiden.&lt;br /&gt;
&lt;br /&gt;
===Funktionsweise von Views===&lt;br /&gt;
&lt;br /&gt;
Unabhängig davon welche Technologie zum Rendern verwendet wird, folgen die Views immer der gleichen Logik und Struktur.&lt;br /&gt;
Es gibt eine Konstruktorfunktion (&amp;lt;code&amp;gt;DOMView&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;SVGView&amp;lt;/code&amp;gt;) welche ein View-Objekt erzeugt.&lt;br /&gt;
Diese Konstruktorfunktion erwartet ein DOM-Element, in dem die Ansicht eingebaut werden soll, und eine Höhe und Breite.&lt;br /&gt;
&lt;br /&gt;
Sobald ein View-Objekt erzeugt wird, soll es sich automatisch um das regelmäßige Rendern der Spiels kümmern.&lt;br /&gt;
Dazu muss ein solches Objekt die zwei Funktionen &amp;lt;code&amp;gt;addObjectView()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;destroy()&amp;lt;/code&amp;gt; implementieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;addObjectView(object, color)&amp;lt;/code&amp;gt; erzeugt für ein gegebenes Objekt (z.B. Spieler) eine entsprechende View-Repräsentation.&lt;br /&gt;
Das Objekt wird als &amp;#039;&amp;#039;&amp;#039;Rechteck&amp;#039;&amp;#039;&amp;#039; an seiner x- und y-Position mit seiner Breite und Höhe und der gegegebenen Farbe dargestellt.&lt;br /&gt;
Verändert sich die Position des Objekts im Laufe des Spiels, so muss die View dies in regelmäßigen Abständen abbilden.&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie einen geeigneten Timer, wie zum Beispiel &amp;lt;code&amp;gt;requestAnimationFrame()&amp;lt;/code&amp;gt;, um den Render-Vorgang wiederholt auszuführen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var renderRepeatedly = function() {&lt;br /&gt;
  console.log(&amp;#039;rendering&amp;#039;);&lt;br /&gt;
  window.requestAnimationFrame(renderRepeatedly);&lt;br /&gt;
}&lt;br /&gt;
renderRepeatedly();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um beim Render-Durchgang festzustellen welches View-Objekt welche Positions- und Formänderungen abbilden muss,&lt;br /&gt;
muss die Verknüpfung von dem zu rendernden Objekt und dem View-Objekt in einer Liste gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Beispielhafte Implementierung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var childViews = [];&lt;br /&gt;
this.addObjectView = function(object, color) {&lt;br /&gt;
  var div = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
  // ... style and add div element&lt;br /&gt;
  childViews.push({&lt;br /&gt;
    object: object,&lt;br /&gt;
    div: div&lt;br /&gt;
  });&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;destroy()&amp;lt;/code&amp;gt; muss dafür Sorge tragen, dass eine View korrekt entfernt wird, inklusive aller verwendeten Timer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Views implementieren===&lt;br /&gt;
&lt;br /&gt;
Im Folgenden gilt es die zwei unterschiedlichen Views zu implementieren, die das Spiel dann darstellen sollen.&lt;br /&gt;
Für jede View-Technologie ist im Vorlagen-Ordner bereits eine Datei angelegt mit einer minimalen Code-Vorgabe.&lt;br /&gt;
&lt;br /&gt;
====DOM-View====&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie im ersten Schritt eine DOM-View, welche das Spiel mithilfe von DOM-Elementen darstellt.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tipp:&amp;#039;&amp;#039;&amp;#039; Rechtecke können Sie einfach mit absolut positionierten &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;-Elementen darstellen.&lt;br /&gt;
&lt;br /&gt;
Beispielcode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var viewElement = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
viewElement.style.position = &amp;#039;absolute&amp;#039;;&lt;br /&gt;
viewElement.style.backgroundColor = &amp;#039;green&amp;#039;;&lt;br /&gt;
viewElement.style.width = &amp;#039;40px&amp;#039;;&lt;br /&gt;
viewElement.style.height = &amp;#039;40px&amp;#039;;&lt;br /&gt;
viewElement.style.left = &amp;#039;5px&amp;#039;;&lt;br /&gt;
viewElement.style.top = &amp;#039;5px&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SVG-View====&lt;br /&gt;
&lt;br /&gt;
Implementieren Sie anschließend eine SVG-View, welche das Spiel mithilfe von SVG-Elementen darstellt.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig:&amp;#039;&amp;#039;&amp;#039; Wenn Sie SVG-Elemente mit der DOM-API erzeugen wollen müssen die Funktion &amp;lt;code&amp;gt;createElementNS()&amp;lt;/code&amp;gt; verwenden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var svg = document.createElementNS(&amp;#039;http://www.w3.org/2000/svg&amp;#039;, &amp;#039;svg&amp;#039;);&lt;br /&gt;
svg.setAttribute(&amp;#039;version&amp;#039;, &amp;#039;1.1&amp;#039;);&lt;br /&gt;
svg.setAttribute(&amp;#039;width&amp;#039;, &amp;#039;500&amp;#039;);&lt;br /&gt;
svg.setAttribute(&amp;#039;height&amp;#039;, &amp;#039;500&amp;#039;);&lt;br /&gt;
svg.setAttribute(&amp;#039;x&amp;#039;, &amp;#039;10&amp;#039;);&lt;br /&gt;
svg.setAttribute(&amp;#039;y&amp;#039;, &amp;#039;10&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
var rect = document.createElementNS(&amp;#039;http://www.w3.org/2000/svg&amp;#039;, &amp;#039;svg&amp;#039;);&lt;br /&gt;
svg.appendChild(rect);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Optional: Darstellung anpassen===&lt;br /&gt;
&lt;br /&gt;
Ändern Sie die Views so ab, dass Spieler und Gegner nicht mehr als Rechtecke sondern als Bilder dargestellt werden.&lt;br /&gt;
Der Spieler kann zum Beispiel als Raumschiff und die Gegner als entgegenkommende Meteoriten dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Anmerkung:&amp;#039;&amp;#039;&amp;#039; Falls Sie Bilder aus dem Internet nutzen möchten achten Sie biite auf die entsprechenden Bildrechte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
&lt;br /&gt;
Nutzen Sie die folgenden Links für weitere Information über Timer, SVG und Canvas:&lt;br /&gt;
&lt;br /&gt;
* https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout&lt;br /&gt;
* https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval&lt;br /&gt;
* https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame&lt;br /&gt;
* https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial&lt;/div&gt;</summary>
		<author><name>Lawrence</name></author>
	</entry>
</feed>