<?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%3A_Praktikum%3A_WiSe_2018%2F19%3A_GameLoop01</id>
	<title>MMProg: Praktikum: WiSe 2018/19: GameLoop01 - 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%3A_Praktikum%3A_WiSe_2018%2F19%3A_GameLoop01"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;action=history"/>
	<updated>2026-08-06T10:04:39Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in GlossarWiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=51263&amp;oldid=prev</id>
		<title>Kowa am 1. März 2023 um 12:50 Uhr</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=51263&amp;oldid=prev"/>
		<updated>2023-03-01T12:50:15Z</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 1. März 2023, 12:50 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-l14&quot;&gt;Zeile 14:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 14:&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;* Klick auf die Pfeilspitze vor diesem Pfad → Klick auf die Pfeilspitze vor &amp;lt;code&amp;gt;game_loop&amp;lt;/code&amp;gt; → Klick &amp;#039;&amp;#039;&amp;#039;auf&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;WK_GameLoop02&amp;lt;/code&amp;gt;&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;* Klick auf die Pfeilspitze vor diesem Pfad → Klick auf die Pfeilspitze vor &amp;lt;code&amp;gt;game_loop&amp;lt;/code&amp;gt; → Klick &amp;#039;&amp;#039;&amp;#039;auf&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;WK_GameLoop02&amp;lt;/code&amp;gt;&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;div&gt;* &amp;lt;code&amp;gt;Checkout&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;WK_GameLoop01&amp;lt;/code&amp;gt; dient nur didaktischen Zwecken und wird für diese Praktikumsaufgabe nicht benötigt.)&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;* &amp;lt;code&amp;gt;Checkout&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;WK_GameLoop01&amp;lt;/code&amp;gt; dient nur didaktischen Zwecken und wird für diese Praktikumsaufgabe nicht benötigt.)&lt;/div&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;* Speichern Sie das Projekt irgendwo auf Ihrem Rechner. &#039;&#039;&#039;Achtung: Speichern Sie das Projekt nicht innerhalb eines anderen &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projektes &lt;/del&gt;(insbesondere nicht in Ihrem neuen Projekt) oder innerhalb eines Ordners, der bereits unter SVN-Kontrolle steht. Speichern meine Projekte in einem ganz anderen Ordner, der {{zB}} &amp;lt;code&amp;gt;KowaBeispiele&amp;lt;/code&amp;gt; heißen könnte.&#039;&#039;&#039;&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;* Speichern Sie das Projekt irgendwo auf Ihrem Rechner. &#039;&#039;&#039;Achtung: Speichern Sie das Projekt nicht innerhalb eines anderen &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projekts &lt;/ins&gt;(insbesondere nicht in Ihrem neuen Projekt) oder innerhalb eines Ordners, der bereits unter SVN-Kontrolle steht. Speichern meine Projekte in einem ganz anderen Ordner, der {{zB}} &amp;lt;code&amp;gt;KowaBeispiele&amp;lt;/code&amp;gt; heißen könnte.&#039;&#039;&#039;&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;div&gt;* Öffnen Sie das Projekt und geben Sie im WebStorm-Terminal &amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; (oder kurz &amp;lt;code&amp;gt;npm i&amp;lt;/code&amp;gt;) ein, um alle benötigten Node.js-Module zu installieren.&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;* Öffnen Sie das Projekt und geben Sie im WebStorm-Terminal &amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; (oder kurz &amp;lt;code&amp;gt;npm i&amp;lt;/code&amp;gt;) ein, um alle benötigten Node.js-Module zu installieren.&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;Machen Sie sich mit den Projekten vertraut. Die Web-Anwendung &amp;lt;code&amp;gt;src/js/app&amp;lt;/code&amp;gt; des zweiten &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projektes &lt;/del&gt;dient als Ausgangsbasis für diese Praktikumsaufgabe.     &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;Machen Sie sich mit den Projekten vertraut. Die Web-Anwendung &amp;lt;code&amp;gt;src/js/app&amp;lt;/code&amp;gt; des zweiten &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projekts &lt;/ins&gt;dient als Ausgangsbasis für diese Praktikumsaufgabe.     &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;Im ersten Beispiel finden Sie diverse Game-Loop-Varianten. Schrittweise werden potentielle&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;Im ersten Beispiel finden Sie diverse Game-Loop-Varianten. Schrittweise werden potentielle&lt;/div&gt;&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-l24&quot;&gt;Zeile 24:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 24:&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;Im zweiten Beispiel wurde eine einfache Game-Loop-Klasse realisiert, die sie für dieses Praktikum&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;Im zweiten Beispiel wurde eine einfache Game-Loop-Klasse realisiert, die sie für dieses Praktikum&lt;/div&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 können und sollten. Diese Klasse basiert auf den Ergebnissen des ersten &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projektes&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 können und sollten. Diese Klasse basiert auf den Ergebnissen des ersten &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projekts&lt;/ins&gt;,&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;div&gt;stellt aber – im Gegensatz zu einigen Web-Anwendungen des ersten Projekt – bislang keine Informationen  &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;stellt aber – im Gegensatz zu einigen Web-Anwendungen des ersten Projekt – bislang keine Informationen  &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;div&gt;über die aktuelle Frame-Rate bereit. Dies ist aber für diese Praktikumsaufgabe nicht von Interesse.&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;über die aktuelle Frame-Rate bereit. Dies ist aber für diese Praktikumsaufgabe nicht von Interesse.&lt;/div&gt;&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-l36&quot;&gt;Zeile 36:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 36:&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;Erstellen Sie ein neues Projekt &amp;lt;code&amp;gt;praktikum01&amp;lt;/code&amp;gt; und kopieren Sie die Ordner &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;web&amp;lt;/code&amp;gt; (samt Inhalt)&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;Erstellen Sie ein neues Projekt &amp;lt;code&amp;gt;praktikum01&amp;lt;/code&amp;gt; und kopieren Sie die Ordner &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;web&amp;lt;/code&amp;gt; (samt Inhalt)&lt;/div&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;sowie alle Dateien, die Sie im Wurzelverzeichnis des &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projektes &lt;/del&gt;&amp;lt;code&amp;gt;WK_GameLoop02_Empty&amp;lt;/code&amp;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;sowie alle Dateien, die Sie im Wurzelverzeichnis des &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Projekts &lt;/ins&gt;&amp;lt;code&amp;gt;WK_GameLoop02_Empty&amp;lt;/code&amp;gt;&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;div&gt;finden, mittels &amp;lt;code&amp;gt;Ctrl-/Apfel-C&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Ctrl-/Apfel-V&amp;lt;/code&amp;gt; in Ihr eigenes Projekt. (Die Frage, ob WebStorm seinen eigenen File Watcher zum&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;finden, mittels &amp;lt;code&amp;gt;Ctrl-/Apfel-C&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Ctrl-/Apfel-V&amp;lt;/code&amp;gt; in Ihr eigenes Projekt. (Die Frage, ob WebStorm seinen eigenen File Watcher zum&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;div&gt;Übersetzen von ES6-Code in ES5-Code verwenden soll, beantworten Sie bitte mit „No“. Das erledigt Webpack für Sie.)&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;Übersetzen von ES6-Code in ES5-Code verwenden soll, beantworten Sie bitte mit „No“. Das erledigt Webpack für Sie.)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kowa</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=45141&amp;oldid=prev</id>
		<title>Kowa am 16. September 2018 um 14:48 Uhr</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=45141&amp;oldid=prev"/>
		<updated>2018-09-16T14:48:02Z</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 16. September 2018, 14:48 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-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&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;{{MMProg:Praktikum:WiSe 2018/19:Menü}}&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;{{MMProg:Praktikum:WiSe 2018/19:Menü}}&lt;/div&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&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;&amp;#039;&amp;#039;&amp;#039;Musterlösung&amp;#039;&amp;#039;&amp;#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/ball/WK_Ball01/ SVN-Repository]&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;&amp;#039;&amp;#039;&amp;#039;Musterlösung&amp;#039;&amp;#039;&amp;#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/ball/WK_Ball01/ SVN-Repository]&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;/table&gt;</summary>
		<author><name>Kowa</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=45135&amp;oldid=prev</id>
		<title>Kowa: Die Seite wurde neu angelegt: „{{MMProg:Praktikum:WiSe 2018/19:Menü}}  &#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/ball/WK_Ball01/ SVN-Repository]  ==Vorberei…“</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=MMProg:_Praktikum:_WiSe_2018/19:_GameLoop01&amp;diff=45135&amp;oldid=prev"/>
		<updated>2018-09-16T14:41:04Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „{{MMProg:Praktikum:WiSe 2018/19:Menü}}  &amp;#039;&amp;#039;&amp;#039;Musterlösung&amp;#039;&amp;#039;&amp;#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/ball/WK_Ball01/ SVN-Repository]  ==Vorberei…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{MMProg:Praktikum:WiSe 2018/19:Menü}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Musterlösung&amp;#039;&amp;#039;&amp;#039;: [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/ball/WK_Ball01/ SVN-Repository]&lt;br /&gt;
&lt;br /&gt;
==Vorbereitung==&lt;br /&gt;
&lt;br /&gt;
Im SVN-Repository finden Sie zwei WebStorm-Projekte zum Thema GameLoop:&lt;br /&gt;
* [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/game_loop/WK_GameLoop01/ WK_GameLoop01]&lt;br /&gt;
* [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/game_loop/WK_GameLoop02/ WK_GameLoop02]&lt;br /&gt;
&lt;br /&gt;
Sie können diese Projekte folgendermaßen auf Ihrem Rechner installieren:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;VCS&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Checkout from Version Control&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Subversion&amp;lt;/code&amp;gt;&lt;br /&gt;
* Sofern noch nicht geschehen: Klick auf das grüne Plus-Symbol → Repository URL: &amp;lt;code&amp;gt;https://glossar.hs-augsburg.de/beispiel/tutorium/es6&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf die Pfeilspitze vor diesem Pfad → Klick auf die Pfeilspitze vor &amp;lt;code&amp;gt;game_loop&amp;lt;/code&amp;gt; → Klick &amp;#039;&amp;#039;&amp;#039;auf&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;WK_GameLoop02&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Checkout&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;WK_GameLoop01&amp;lt;/code&amp;gt; dient nur didaktischen Zwecken und wird für diese Praktikumsaufgabe nicht benötigt.)&lt;br /&gt;
* Speichern Sie das Projekt irgendwo auf Ihrem Rechner. &amp;#039;&amp;#039;&amp;#039;Achtung: Speichern Sie das Projekt nicht innerhalb eines anderen Projektes (insbesondere nicht in Ihrem neuen Projekt) oder innerhalb eines Ordners, der bereits unter SVN-Kontrolle steht. Speichern meine Projekte in einem ganz anderen Ordner, der {{zB}} &amp;lt;code&amp;gt;KowaBeispiele&amp;lt;/code&amp;gt; heißen könnte.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Öffnen Sie das Projekt und geben Sie im WebStorm-Terminal &amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; (oder kurz &amp;lt;code&amp;gt;npm i&amp;lt;/code&amp;gt;) ein, um alle benötigten Node.js-Module zu installieren.&lt;br /&gt;
&lt;br /&gt;
Machen Sie sich mit den Projekten vertraut. Die Web-Anwendung &amp;lt;code&amp;gt;src/js/app&amp;lt;/code&amp;gt; des zweiten Projektes dient als Ausgangsbasis für diese Praktikumsaufgabe.    &lt;br /&gt;
&lt;br /&gt;
Im ersten Beispiel finden Sie diverse Game-Loop-Varianten. Schrittweise werden potentielle&lt;br /&gt;
Probleme behoben. Dieses Projekt verfolgt das didaktische Ziel, Ihnen die Probleme und potentielle&lt;br /&gt;
Lösungen im Zusammenhang mit JavaScript-Animationen zu verdeutlichen.&lt;br /&gt;
&lt;br /&gt;
Im zweiten Beispiel wurde eine einfache Game-Loop-Klasse realisiert, die sie für dieses Praktikum&lt;br /&gt;
nutzen können und sollten. Diese Klasse basiert auf den Ergebnissen des ersten Projektes,&lt;br /&gt;
stellt aber – im Gegensatz zu einigen Web-Anwendungen des ersten Projekt – bislang keine Informationen &lt;br /&gt;
über die aktuelle Frame-Rate bereit. Dies ist aber für diese Praktikumsaufgabe nicht von Interesse.&lt;br /&gt;
&lt;br /&gt;
==Aufgaben==&lt;br /&gt;
&lt;br /&gt;
Laden Sie das leere Projekt [https://glossar.hs-augsburg.de/beispiel/tutorium/es6/empty/WK_GameLoop02_Empty WK_GameLoop02_Empty] auf Ihren Rechner&lt;br /&gt;
(am Besten in den zuvor angelegten Ordner &amp;lt;code&amp;gt;KowaBeispiele&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Installieren Sie diesmal aber nicht die Node.js-Module&amp;#039;&amp;#039;&amp;#039;, das machen Sie später. Sie finden das leere Projekt im zuvor aktivierten &lt;br /&gt;
Repository-Pfad &amp;lt;code&amp;gt;https://glossar.hs-augsburg.de/beispiel/tutorium/es6&amp;lt;/code&amp;gt; im Unterordner &amp;lt;code&amp;gt;empty&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Erstellen Sie ein neues Projekt &amp;lt;code&amp;gt;praktikum01&amp;lt;/code&amp;gt; und kopieren Sie die Ordner &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;web&amp;lt;/code&amp;gt; (samt Inhalt)&lt;br /&gt;
sowie alle Dateien, die Sie im Wurzelverzeichnis des Projektes &amp;lt;code&amp;gt;WK_GameLoop02_Empty&amp;lt;/code&amp;gt;&lt;br /&gt;
finden, mittels &amp;lt;code&amp;gt;Ctrl-/Apfel-C&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Ctrl-/Apfel-V&amp;lt;/code&amp;gt; in Ihr eigenes Projekt. (Die Frage, ob WebStorm seinen eigenen File Watcher zum&lt;br /&gt;
Übersetzen von ES6-Code in ES5-Code verwenden soll, beantworten Sie bitte mit „No“. Das erledigt Webpack für Sie.)&lt;br /&gt;
&lt;br /&gt;
Sie können Ihr Projekt zur Übung auch im Subversion-Repository speichern. Das ist aber nicht so wichtig.&lt;br /&gt;
&lt;br /&gt;
Nun können Sie in Ihrem eigenen Projekt die benötigten Node.js-Module installieren: &amp;lt;code&amp;gt;npm i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In Ihrem Projekt finden Sie nun 10 Web-Anwendungen vor: &amp;lt;code&amp;gt;index01.html&amp;lt;/code&amp;gt; verwendet die gepackte Version von &amp;lt;code&amp;gt;app01.js&amp;lt;/code&amp;gt;,&lt;br /&gt;
die ihrerseits das Spiel &amp;lt;code&amp;gt;game01.js&amp;lt;/code&amp;gt; einbindet. &amp;lt;code&amp;gt;index02.html&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;index03.html&amp;lt;/code&amp;gt; etc. sind analog aufgebaut.&lt;br /&gt;
Wenn Sie irgendeine dieser Anwendungen im Browser öffnen, sehen Sie eine Eule in der linken oberen Bildschirmecke. Diese sollen&lt;br /&gt;
sie auf unterschiedliche Art und Weise animieren. Lösen Sie jede der folgenden Aufgaben in einer der vorgegebenen Apps.&lt;br /&gt;
Scheuen Sie sich nicht davor, eigene Experimente durchzuführen. Wenn die vorgegebenen Apps nicht ausreichen sollten, legen Sie einfach&lt;br /&gt;
noch ein paar an. (Vergessen Sie in diesem Fall nicht, &amp;lt;code&amp;gt;webpack.config.js&amp;lt;/code&amp;gt; entsprechend zu erweitern.)&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie Ihre Lösungen der Aufgabe $i$ in die Datei &amp;lt;code&amp;gt;game&amp;lt;/code&amp;gt;$i$&amp;lt;code&amp;gt;.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
Am einfachsten ist es, wenn Sie jeweils die Lösung der vorangegangenen Aufgabe kopieren und diese Kopie dann weiterentwickeln.&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 1===&lt;br /&gt;
&lt;br /&gt;
Lassen Sie die Eule horizontal vom linken bis zum rechten Fensterrand des Browsers fliegen. &lt;br /&gt;
&lt;br /&gt;
Tipp: http://ryanve.com/lab/dimensions/&lt;br /&gt;
&lt;br /&gt;
Berücksichtigen Sie, dass die Eule 150 Pixel breit ist und das der Ankerpunkt im linken oberen Eck des zugehörigen Bildes liegt. &lt;br /&gt;
Sie müssen daher im Eulen-Objekt auch die Breite der Eule speichern und diese Breite bei der Kollissionserkennung&lt;br /&gt;
und -behandlung berücksichtigen.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie bitte, dass Sie zur Lösung dieser Aufgabe einfach die Datei &amp;lt;code&amp;gt;game01.js&amp;lt;/code&amp;gt; anpassen müssen.&lt;br /&gt;
Lassen Sie sich durch den Code der Datei &amp;lt;code&amp;gt;owl.js&amp;lt;/code&amp;gt; aus dem Beispiel &amp;lt;code&amp;gt;WK_GameLoop02&amp;lt;/code&amp;gt; inspirieren.&lt;br /&gt;
(Sie können auch &amp;lt;code&amp;gt;owl_interpolate.js&amp;lt;/code&amp;gt; verwenden, aber das verwirrt Sie vermutlich zurzeit mehr, als dass es &lt;br /&gt;
Inhen nützt.) Eine Reset-Funktion, wie sie im genannten Beispiel definiert wird, brauchen Sie nicht zu implementieren,&lt;br /&gt;
da Sie das „Spiel“ nicht mit Hilfe von irgendwelchen Buttons anhalten und zurücksetzen werden. Dies gilt auch für alle folgenden &lt;br /&gt;
Aufgaben.&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie &amp;lt;code&amp;gt;grunt&amp;lt;/code&amp;gt; oder besser noch &amp;lt;code&amp;gt;grunt watch&amp;lt;/code&amp;gt; nicht. :-)&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 2===&lt;br /&gt;
&lt;br /&gt;
Lassen Sie die Eule nicht waagerecht, sondern in der horizontalen Mitte des Browserfensters senkrecht von Fenstrrand zu Fensterrand fliegen.&lt;br /&gt;
&lt;br /&gt;
Um die Aufgabe zu lösen, müssen Sie für die Eule zusätzlich eine y-Position und eine y-Geschwindigkeit definieren. Die Berechnung der aktuellen y-Position funktioniert&lt;br /&gt;
analog zur Berechnung der aktuellen x-Position. &lt;br /&gt;
&lt;br /&gt;
Vergessen Sie nicht auch die Kollissionserkennung und -behandlung für die beiden Bildschirmseiten &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;botton&amp;lt;/code&amp;gt;&lt;br /&gt;
zu implementieren.&lt;br /&gt;
&lt;br /&gt;
Und Sie müssen natürlich die Render-Funktion anpassen, sodass die aktuelle y-Position beim Rendern auch berücksichtigt wird. &lt;br /&gt;
&lt;br /&gt;
===Aufgabe 3===&lt;br /&gt;
&lt;br /&gt;
Lassen Sie die Eule von der Browsermitte aus schräg über den Bildschirm fliegen. In x-Richtung soll sie doppelt so schnell sein (200 Pixel/s)&lt;br /&gt;
wie in y-Richtung (100 Pixel/s).&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 4===&lt;br /&gt;
&lt;br /&gt;
Setzen Sie die x-Start-Position der Eule auf &amp;lt;code&amp;gt;-100&amp;lt;/code&amp;gt; und starten Sie die Web-App. Den Effekt, den Sie sehen, nennt&lt;br /&gt;
man [[Kollisionserkennung und -behandlung|Penetration]]. Die Eule hängt in der Wand fest, da Sie in einem Schritt nicht den Kollissionsbereich&lt;br /&gt;
(die linke Wand) verlässt. Daher besteht die Kollission fort und im nächsten Schritt ändert sie wieder ihre Flugrichtung.&lt;br /&gt;
&lt;br /&gt;
Verbessern Sie das, indem Sie die Kollisionserkennung und -behandlung verbessern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (v_owl.x &amp;lt;= v_stage.left)&lt;br /&gt;
{&lt;br /&gt;
  v_owl.vx = Math.abs(v_owl.vx);&lt;br /&gt;
}&lt;br /&gt;
if (v_owl.x &amp;gt;= v_stage.right - v_owl.width)&lt;br /&gt;
{&lt;br /&gt;
  v_owl.vx = -Math.abs(v_owl.vx);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passen Sie die Kollisionserkennung und -behandlung in y-Richtung analog an. &lt;br /&gt;
&lt;br /&gt;
Sie können und sollten sogar noch einen Schritt weiter gehen und die Eule &lt;br /&gt;
wieder zurück auf die Bühne schieben, wenn Sie in die Wand eingedrungen ist.&lt;br /&gt;
In die Wand einzudringen ist zwar physikalisch nicht möglich, aber leider in&lt;br /&gt;
einer Simulation der physikalischen Welt nur schwer zu vermeiden, da die&lt;br /&gt;
Position nur alle 16,7 ms berechnet wird. War die Eule zu einem Zeitpunkt&lt;br /&gt;
noch vor der Mauer, kann Sie beim nächsten Schritt schon drinnen stecken.&lt;br /&gt;
Insbesondere bei sehr schnellen Objekten kann das dann zu PEnetrations-Effekten führen.&lt;br /&gt;
&lt;br /&gt;
Also schieben Sie die Eule besser zurück auf die Bühne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (v_owl.x &amp;lt;= v_stage.left)&lt;br /&gt;
{&lt;br /&gt;
  v_owl.x = v_stage.left;&lt;br /&gt;
  v_owl.vx = Math.abs(v_owl.vx);&lt;br /&gt;
}&lt;br /&gt;
if (v_owl.x &amp;gt;= v_stage.right - v_owl.width)&lt;br /&gt;
{&lt;br /&gt;
  v_owl.x = v_stage.right - v_owl.width;&lt;br /&gt;
  v_owl.vx = -Math.abs(v_owl.vx);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passen Sie die Kollisionserkennung und -behandlung in y-Richtung wiederum analog an. &lt;br /&gt;
&lt;br /&gt;
===Aufgabe 5===&lt;br /&gt;
&lt;br /&gt;
Ändern Sie die Kollisionserkennung und -behandlung so ab, dass die Eule ausgehend von der linken oberen Fensterecke&lt;br /&gt;
im Uhrzeigersinn sich immer entlang des Fensterrandes bewegt.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie bitte: Hier ist es besonders wichtig, dass Sie die Eule wieder  auf die Bühne zurückbewegen, wenn sie mit einer&lt;br /&gt;
Wand kollidiert. Ansonsten verschwindet die Eule schnell im Nirgendwo.&lt;br /&gt;
&lt;br /&gt;
(Anmerkung: Dies war einmal eine Aufgabe im Rahmen des Prüfungspraktikums, wobei die Lösung zur 3. Aufgabe vorgegeben war.)&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 6===&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie diesmal nicht die Lösung von Aufgabe 5, sondern von Aufgabe 4. Im folgenden arbeiten Sie&lt;br /&gt;
wieder mit der normalen Kollissionserkennung und -behandlung. Positionieren Sie die Eule allerdings wieder im linken oberen Eck&lt;br /&gt;
(in Aufgabe 4 hatten Sie sie außerhalb der Bühne platziert).&lt;br /&gt;
&lt;br /&gt;
Die neue Position der Eule berechnet man mit Hilfe der Geschwindigkeit (velocity). Doch auch die&lt;br /&gt;
Geschwindigkeit kann sich ändern. Dazu benötigt man die Beschleunigung (acceleration).&lt;br /&gt;
&lt;br /&gt;
Fügen Sie zu Ihrer Eule zwei weitere Attribute &amp;lt;code&amp;gt;ax&amp;lt;/code&amp;gt; (Beschleunigung in x-Richtung) und &lt;br /&gt;
&amp;lt;code&amp;gt;ay&amp;lt;/code&amp;gt; (Beschleunigung in y-Richtung) hinzu. Setzen Sie die Initialwerte auf&lt;br /&gt;
&amp;lt;code&amp;gt;400&amp;lt;/code&amp;gt; (Pixel pro Sekunde) bzw. &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt; (Pixel pro Sekunde). Das heißt, Sie möchten,&lt;br /&gt;
dass die Eule in jeder Sekunde um 400 bzw. 200 Pixel pro Sekunde mehr zurücklegt als zuvor.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie jetzt die Web-App starten, beschleunigt die Eule allerdings noch nicht.&lt;br /&gt;
&lt;br /&gt;
In Ihrem Code wird die Position 60 mal pro Sekunde mit Hilfe des folgenden Codes aktualisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
v_owl.x += v_owl.vx * p_frac_s;&lt;br /&gt;
v_owl.y += v_owl.vy * p_frac_s;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Geschwindigkeit wird zur Position hinzuaddiert. Allerdings ist die Geschwindigkeit&lt;br /&gt;
in Pixeln pro Sekunde angegeben. Die Modellaktualisierung passiert jedoch alle $0,0167$&lt;br /&gt;
Sekunden. In dieser Zei bewegt sich die Eule nur um das $0,0167$-fache (= $1,67$%) der Sekundengeschwindigkeit weiter.&lt;br /&gt;
&lt;br /&gt;
Auf genau dieselbe Weise wird die aktuelle Geschwindigkeit mit Hilfe der Beschleunigung&lt;br /&gt;
berechnet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
v_owl.vx += v_owl.ax * p_frac_s;&lt;br /&gt;
v_owl.vy += v_owl.ay * p_frac_s;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fügen Sie diesen Code in Ihre Model-Update-Funktion ein und starten Sie die Eule erneut.&lt;br /&gt;
Wenn Sie jetzt Ihre We-App laufen lassen, stellen Sie fest, dass die Eule zunächst beschleunigt,&lt;br /&gt;
nach eine Kollission aber wieder abbremst. NAch der nächsten Kollission beschleunigt sie wieder.&lt;br /&gt;
&lt;br /&gt;
Um diesen Effekt zu vermeiden, müssen Sie jedes mal, wenn Sie bei der Kollissionsbehandlung das Vorzeichen&lt;br /&gt;
der Geschwindigkeit ändern, das Vorzeichen der zugehörigen Beschleunigung analog ändern.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise mus der Code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
v_owl.vx = -Math.abs(v_owl.vx);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
um&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
v_owl.ax = -Math.abs(v_owl.ax);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 7===&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie die Kollissionsbehandlung so um, dass im Falle einer Kollission der Eule &lt;br /&gt;
mit dem unteren Fensterrand sowohl die Geschwindigkeit als auch die Beschleunigung&lt;br /&gt;
jeweils in x- und in y-Richtung auf Null gesetzt wird. Das heißt, die &lt;br /&gt;
Eule bleibt bei einer Kollision mit dem unteren Rand stehen stehen.&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 8===&lt;br /&gt;
&lt;br /&gt;
Positionieren Sie die Eule im linken oberen Eck, geben Sie ihr eine Geschwindigkeit von &lt;br /&gt;
300 Pixeln in x-Richtung und von 0 Pixeln in y-Richtung. Die Beschleunigung in x-Richtung beträgt 0,&lt;br /&gt;
die Beschleunigung in y-Richtung 800. (Diese Zahlen sind gut für meinen Monitor geeignet,&lt;br /&gt;
der eine Auflösung von 1600x900 hat. Wenn Sie einen deutlich kleineren oder größeren&lt;br /&gt;
Monitor haben, müssen Sie die Zahlen evtl. anpassen.)&lt;br /&gt;
&lt;br /&gt;
Welche Kurve beschreibt die Eule, wenn Sie die Web-App starten?&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 9===&lt;br /&gt;
&lt;br /&gt;
Positionieren Sie die Eule im linken unteren Eck, geben Sie ihr eine Geschwindigkeit von &lt;br /&gt;
300 Pixeln in x-Richtung und von -400 Pixeln in y-Richtung. Die Beschleunigung in x-Richtung beträgt 0,&lt;br /&gt;
die Beschleunigung in y-Richtung 200.&lt;br /&gt;
&lt;br /&gt;
Welche Kurve beschreibt die Eule, wenn Sie die Web-App starten?&lt;br /&gt;
&lt;br /&gt;
Jetzt fehlt nur noch en Gummiband, mit dem Sie die Eule beschleunigen können. :-)&lt;br /&gt;
&lt;br /&gt;
===Aufgabe 10===&lt;br /&gt;
&lt;br /&gt;
Machen Sie eigene Experimente. Bringen Sie {{zB}} die Eule dazu, wie ein Flummi&lt;br /&gt;
zu springen, indem sie ihre Geschwindigkeit in x- und y-Richtung bei einem Bodenkontakt&lt;br /&gt;
um einen gewissen Prozentsatz reduzieren, aber nicht gleich auf null setzen.&lt;br /&gt;
(Die Beschleunigung, die die Erdanziehung simuliert, bleibt die ganze Zeit über gleich).&lt;br /&gt;
Achtung: Bei einem Bodenkontakt, dreht sich das Vorzeichen der y-Geschwindigkeit um, &lt;br /&gt;
das der x-Geschwindigkeit bleibt gleich.&lt;br /&gt;
&lt;br /&gt;
Nervig ist, dass die Eule zum Schluss immer noch ganz leicht hüpft und gar nicht&lt;br /&gt;
zur Ruhe kommt. Vielleicht können Sie auch dieses Problem beheben.&lt;br /&gt;
&lt;br /&gt;
Oder probieren Sie etwas ganz anderes aus.&lt;br /&gt;
==Quellen==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;1&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowa</name></author>
	</entry>
</feed>