Autorinnen: Maria Olberg und Elisabeth Rutt
In diesem Tutorial zeigen wir, wie man eine interaktive Animation entwickeln kann. Wir stellen dazu unsere Animation vor und gehen auf das Konzept, Techniken und Besonderheiten der Animation sowie Ausschnitte des Quellcodes ein.
Inhaltsverzeichnis
Das Konzept unserer Animation
Bei unserer Animation handelt es sich um das kleine, interaktive Spiel “Magic Garten”, durch das sich der User mit Hilfe von Buttons weiter klicken kann. Das Ziel des Spiels ist es, Blumen in einem Garten zu pflanzen und diese wachsen zu lassen. Dabei kann man zwischen drei verschiedenen Arten von Blumen wählen. Außerdem können die Blumen u.a . auch mit Hilfe einer Gießkanne gegossen werden, damit sie weiter wachsen.
Die Idee zu dieser Animation kam dadurch, dass wir, unabhängig von der Person, die es spielt, für jeden User einen interessanten Zeitvertreib für Zwischendurch entwickeln wollten. Vor allem, soll sie aber Kindern Spaß machen. Die Darstellung der Elemente ist im Comic-Stil gehalten und die Hintergrundmusik verstärkt den Spiele-Charakter.
Das Ziel der Animation ist es, den User mit Hilfe von interaktiven Elementen durch die einzelnen Schritte des Spiels zu führen, damit er im Magic Garten die Blumen pflanzen kann. Dazu gibt es einen helfenden Charakter: eine Biene “Maja”, die den User mit hilfreichen Informationen zu den jeweiligen Schritten des Spiels versorgt. Über die interaktiven Buttons gelangt er entweder zum nächsten Schritt des Spiels oder erhält Anweisungen, was im jeweiligen Schritt zu tun ist. Die Anweisungen erscheinen mit Hilfe von visuellen Effekten in einer Sprechblase.
Insgesamt erfüllt die Animation daher zwei Funktionen: Die erste Funktion bezieht sich auf den Inhalt der Animation und ist das Spiel an sich, bei dem der User die Blumen einpflanzen und wachsen lassen soll sowie das Erzählen der Story, indem sich der User durch die einzelnen Szenen klickt. Die zweite Funktion ist die Optik, die den User zum Spielen animieren soll. Dafür wurden Elemente und visuelle Effekte eingebaut, die das Spiel attraktiver gestalten, wie z. B. die Biene, die den User durch das Spiel begleitet und die lachende Sonne, die über den Garten scheint.
Die Animation besteht aus 4 Szenen, die den User vom Intro bis zu den fertig gewachsenen Blumen leiten. Außerdem sind im Spiel auch Entscheidungen für den User eingebaut, die den weiteren Verlauf der Animation bestimmen.
Aufbau der Animation
Die Animation besteht insgesamt aus 4 aufeinander folgenden Szenen:
Erste Szene: Start und Intro
Der erste Teil der Animation ist der Startbildschirm mit dem Titelbild des Spiels. Hier befindet sich der “Play”-Button, über den der User zur ersten Szene gelangt. Zu Beginn erscheint die Biene “Maja”, die sich vorstellt dem User eine kurze Einführung in das Spiel gibt. Anschließend fordert sie ihn dazu auf, mit dem Spiel zu beginnen und Blumen zu pflanzen. Dazu erscheint der Button “Blumen auswählen”, über den der User in die zweite Szene gelangt, um die Art der Blume, die er pflanzen möchte, auszuwählen.
Zweite Szene: Auswählen und Pflanzen von Blumen
Sobald der User auf “Blumen auswählen” geklickt hat, erscheinen drei Beutel mit verschiedenen Blumensamen, die Lieblingsblumen von Maja. Jeder Beutel zeigt auch das Bild der jeweiligen Blume. Fährt der Spieler mit der Maus über die Bilder der Blumen, sagt Maja auch etwas zu der jeweiligen Blumenart über ihre Sprechblase. Unter jedem Beutel gibt es den Button “Auswählen” und mit einem weiteren Klick auf den ausgewählten Beutel beginnt das Einpflanzen. Der Beutel beginnt anschließend, die Samen automatisch im Garten zu pflanzen und es sprießen bereits kleine Pflanzen.
Dritte Szene: Blumen gießen und wachsen lassen
Während des Spiels gibt Maja hilfreiche Tipps zum Spielverlauf. In dieser Szene freut sie sich über die eingepflanzten Blumen und macht auf die Gießkanne aufmerksam, mit der der User die Blumen gießen kann, damit sie wachsen. Der User kann sie Gießkanne anklicken, um sie hoch zu heben und mit der Maus anschließend darüber fahren, um mit dem Gießen zu beginnen. Als nächstes gibt Maja den Tipp, die Blumen nun in der Sonne weiter wachsen zu lassen. Dazu kann der User nun auf die Sonne klicken, die daraufhin beginnt, stärker zu scheinen und über das Blumenfeld zu wandern. Anschließend bietet Maja einen Magic Booster an, um die Blumen doppelt so stark wachsen zu lassen. Der User kann hier zwischen “Ja” und “Nein” auswählen. Je nach dem, welche Antwort der User wählt, ändern sich die Animation und die Reaktion von Maja.
Vierte Szene: Outro
In der vierten Szene spielt der User nicht mehr aktiv mit. Maja beginnt mit Hilfe einer Animation über die Blumenwiese zu fliegen. Zum Schluss bedankt sie sich für die Hilfe des Users und schenkt ihm als Dank ein Glas mit Honig. An dieser Stelle ist die Animation beendet und es erscheint der Button “Restart”, wodurch die Seite neu geladen wird und der User wieder zum Intro gelangt.
Der Quellcode
Verwendete Programmiersprachen für die Animation sind HTML5, CSS3, JavaScript und jQuery. HTML wird für die Gestaltung sowie den Grundaufbau der Seite und des Spiels genutzt. CSS sorgt für die richtige Positionierung, Style-Anpassungen und mit Hilfe von keyframes auch für die kleine Animationen und visuelle Effekte.
Mit Hilfe von JavaScript werden die Objekte je nach Auswahl der Story-Optionen angezeigt bzw. versteckt, der Text bei den Hover-Effekten geändert, die Auswahl der Blumensorte für den weiteren Verlauf des Spiels gespeichert und die Index-Datei so umgeschrieben, dass sie sich automatisch angepasst hat. Außerdem erscheinen die Objekte durch JavaScript nach bestimmten Zeitangaben für ein optimales Spielerlebnis, wie z. B. die automatische Änderungen des Textes und die Bewegung der Gießkanne nach einigen Sekunden. Die Seite besteht aus drei DIV-Containern: Der erste zeigt die Überschrift “Magic Garten”, der zweite das Spielfeld und der dritte zeigt einen Untertitel.
<body> <script src="animation.js"></script> <!--Einbindung der JavaScript Datei--> </div> <div class="header"> <!--Div-Container wird angezeigt nach dem Spielstart--></div> <div id="animation_feld" class="animation_null"> <!--Hauptbereich: interaktives Spiel--></div> <div class="biene"> <!--Intro des Spieles und Platziereung der Beiene während des ganzen Spiel--></div>
<div class="footer"> <!--Unterbereich mit Autorennamen und versteckte Audio--> </div> </body>
Gestaltung von besonderen Elementen
Innerhalb der Animation gibt es verschiedene interaktive Elemente, die sich mit Hilfe von Animationen durch die Szenen bewegen und gewisse Aktionen auslösen.
Die verwendeten Bilder sind im PNG-Format und stammen von Pixabay. Die Überschrift und der Untertitel sowie die fertig gewachsenen Blumen wurden selbst in Photoshop erstellt. Damit die Bilder optimal angezeigt werden, wurde der z-Index verwendet. Dieser unterscheidet sich bei den Bildern der jeweiligen Szenen und man sollte ihn so anpassen, dass Bilder möglichst gut dargestellt werden.
Bewegende Elemente und visuelle Effekte
Maja
Damit Maja dem User durch das Spiel helfen kann, wird sie durch von Keyframes zum Leben erweckt. Mit Hilfe des JavaScript Befehls .show() und .hide() wird sie passend zur jeweiligen Szene eingesetzt bzw. versteckt. Hierbei gibt es drei verschiedene Keyframe Animationen: Zuerst bewegt sich Maja vom Startbildschirm nach unten auf das folgende Bild, sobald der User das Spiel startet. Damit sie ihn mit nützlichen Informationen durch das Spiel führen kann, erhält sie Sprechblasen, die mit Hilfe der Anweisung
setTimeout(function() {$("#rede_1").css({"visibility": "visible"});}, 2000);
angezeigt und mit bspw.
setTimeout(function() {$("#text_1").hide();$("#text_2").css({"visibility": "visible"});}, 500);
nach 5 Sekunden automatisch geändert werden. Die Zeit, nach der sich die Animationen ändern, variiert hier während des Spiels und kann nach Belieben angepasst werden, damit man die Texte gut lesen kann.
/*Biene startet das Gespräch mit dem User*/ setTimeout(function() { $("#rede_1").css({"visibility": "visible"}); }, 2000); setTimeout(function() { $("#text_1").css({"visibility": "visible"}); }, 2500); }); $("#link_1").on("click", function () { setTimeout(function() { $("#text_1").hide(); $("#text_2").css({"visibility": "visible"}); }, 500); setTimeout(function() { $("#button_choose").css({"visibility": "visible"}); }, 1500); });
Die zweite Keyframe Animation lässt Maja auf dem nächsten Bild nach oben wirbeln. Diese Animation wird mit Hilfe des Befehls
$("#honey_biene_2").css({"animation-play-state": "running"});
ausgelöst, sobald der User den Button “Blumen auswählen” anklickt. Hier werden die Texte in der Sprechblase wieder mit dem oben stehenden Befehl angezeigt und geändert (die konkreten Befehle ändern sich etwas je nach Text).
/*Übergang zur Szene #1.2 Start des aktiven Spiels mit Anweisungen an den Spieler Elemente werden durch Änderungen des Styles angezeigt oder durch jQuery Funktionen*/ $("#button_choose").on("click", function() { $("#button_choose").css({"visibility": "hidden"}); $("#choose").hide(); $("#rede_1").css({"visibility": "hidden"}); $("#text_2").hide(); $("#honey_biene").css({"visibility": "hidden"}); $("#honey_biene_2").show(); $("#honey_biene_2").css({"animation-play-state": "running"}); setTimeout(function() { $("#rede_2").css({"visibility": "visible"}); }, 1700); setTimeout(function() { $("#text_3").css({"visibility": "visible"}); }, 2200); $(".sack").fadeIn(3000); setTimeout(function() { $(".blumen_choose").show(); }, 3000);
Die dritte Keyframe Animation lässt Maja zum Ende des Spiels über die Blumenwiese fliegen. Mit Hilfe von translateX() bewegt sie sich hin und her und mit scaleX() dreht sie sich während der Animation um, um in die jeweils andere Richtung zu fliegen. Dabei wird das Bild gespiegelt. Ist der Magic Booster nicht ausgewählt, fliegt Maja standardmäßig durch die Eigenschaft animation-iteration-count: 1; einmal Hin und Her. Wenn der Magic Booster ausgewählt ist, dann fliegt sie zweimal Hin und Her. Dies wird mit Hilfe einer if-Anweisung angepasst.
/*Style Eigenschaften für die Biene im Outro. Die keyframe-Animation für die fliegende Biene. In JS ist die Anpassung je nach Antwort des Users*/ #biene_fly { position: absolute; z-index: 15; height: 15%; bottom: 60%; left: 22%; display: none; animation-name: bee_fly; animation-duration: 5s; animation-timing-function: ease; animation-delay: 0s; animation-iteration-count: 1; animation-fill-mode:forwards; animation-play-state: running; } @keyframes bee_fly { 0% { transform: translateX(0px) scaleX(-1)} 25% { transform: translateX(380%) scaleX(-1)} 50% { transform: translateX(380%) scaleX(1)} 100% { transform: translateX(-10%) scaleX(-1)} }
Säcke mit Blumensamen
Der Hover-Effekt bei den Blumensäcken wird mit der Anweisung $(„#rose_sack“).mousemove() erzeugt. So ändert sich der Text in der Sprechblase, wenn man mit der Maus über ein bestimmtes Element (in dem Fall ist es die Rose) fährt. Verlässt man mit der Maus diese Stelle wieder, wird der Text mit dem Befehl $(„#rose_sack“).mouseout() wieder automatisch geändert.
/*Information über Blumensorten erscheint, wenn die Maus auf dem Bild ist, und verschwindet, wenn die Maus weg ist*/ $("#rose_sack").mousemove(function(evt) { $("#text_3").css({"display":"none"}); $("#text_4").css({"visibility": "visible","display":"block"}); }); $("#rose_sack").mouseout(function(evt) { $("#text_4").css({"display":"none"}); $("#text_3").css({"display":"block"}); }); $("#sun_sack").mousemove(function(evt) { $("#text_3").css({"display":"none"}); $("#text_5").css({"visibility": "visible","display":"block"}); }); $("#sun_sack").mouseout(function(evt) { $("#text_5").css({"display":"none"}); $("#text_3").css({"display":"block"}); }); $("#mohn_sack").mousemove(function(evt) { $("#text_3").css({"display":"none"}); $("#text_6").css({"visibility": "visible","display":"block"}); }); $("#mohn_sack").mouseout(function(evt) { $("#text_6").css({"display":"none"}); $("#text_3").css({"display":"block"}); });
Nach der Auswahl der Blumesorte verschwinden durch die Anweisungen $(„.sack“).fadeOut(1200); und $(„.blumen_choose“).hide(); die Bilder der Säcke, die nicht ausgewählt wurden und der ausgewählte Sack erscheint in der Mitte.
$(".sack").fadeOut(1200); $(".blumen_choose").hide(); /*Je nach Auswahl wird der Sack mit der richtigen Blume angezeigt. Animation an sich ist gleich und startet beim Klick auf jeweiliges Bild*/ switch (blume) { case "Rose": setTimeout(function () { $(".rose").show(); $("#sack_blume_rose").on("click", function () { $(".sack_blume").css({"animation-play-state": "running"}); $(".oat_raw").css({"animation-play-state": "running"}); setTimeout(function () { $(".rose").hide(); $("#text_7").css({"display":"none"}); $("#text_8").css({"visibility": "visible","display":"block"}); }, 7200); }) }, 1500); break;
Beim Klick auf den Sack wird die Keyframe Animation aktiviert, wodurch er sich bewegt, um die Blumensamen auf der Wiese zu verteilen. Die Anweisung besteht aus 7 Schritten, in denen translateX(), translateY() und rotate() verwendet werden,sodass er sich zum Verteilen über die Wiese bewegt und dabei auch die Ausrichtung nach links und rechts ändert. Bei der Anweisung für die Blumensamen, die aus dem Sack in die Erde fallen, benutzt man zusätzlich scale(). Nachdem die Animation fertig abgespielt ist und damit die Samen verteilt sind, verschwindet der Sack automatisch.
/*Positionierung und Animation für alle Säcke in der Szene sind gleich*/ .sack_blume { position:absolute; top: 50%; left: 40%; height: 30%; z-index: 11; cursor:pointer; animation-name: sack_hoch; animation-duration: 7s; animation-timing-function: ease; animation-delay: 0s; animation-iteration-count: 1; animation-fill-mode:forwards; animation-play-state: paused; } /*Animation mit mehreren Bewegungen*/ @keyframes sack_hoch { from { transform: translateX(0px) translateY(0px)} 18% { transform: translateX(-100px) translateY(-250px) rotate(-90deg)} 36% { transform: translateX(-325px) translateY(-130px) rotate(-120deg)} 52% { transform: translateX(100px) translateY(-250px) rotate(-120deg)} 70% { transform: translateX(100px) translateY(-130px) rotate(-120deg)} 88% { transform: translateX(350px) translateY(-250px) rotate(120deg)} to { transform: translateX(400px) translateY(-130px) rotate(120deg)} }
/*Positionierung und Animation für Blumensamen in der Szene sind gleich Die Animation wiederholt die Bewegung des Sackes, mit der Ausnahme beim vorletzten Schritt: Blumensamen verschwinden und erscheinen am Ende, wänhrend Sack sich umdreht*/ .oat_raw { position:absolute; top: 51%; left: 46%; height: 10%; z-index: 12; animation-name: oat_hoch; animation-duration: 7s; animation-timing-function: ease; animation-delay: 0s; animation-iteration-count: 1; animation-fill-mode:forwards; animation-play-state: paused; } /*Animation mit mehreren Bewegungen*/ @keyframes oat_hoch { from { transform: translateX(0px) translateY(0px)} 18% { transform: translateX(-150px) translateY(-180px) rotate(-90deg)} 36% { transform: translateX(-375px) translateY(-40px) rotate(-120deg) scale(0.85)} 52% { transform: translateX(50px) translateY(-140px) rotate(-120deg) scale(0.75)} 70% { transform: translateX(50px) translateY(-50px) rotate(-120deg) scale(0.7)} 88% { transform: translateX(390px) translateY(-180px) rotate(120deg)scale(0.0)} to { transform: translateX(465px) translateY(-40px) rotate(120deg) scale(0.65)} }
Positionierung und Animation der Blumensäcke
Wachsende Blumen
Die Blumen wachsen in dem Spiel mit Hilfe einer Animation mittels JavaScript. Dazu gibt es für die verschiedenen Stadien des Wachstums verschiedene Bilder, die automatisch mit Hilfe von Anweisungen, wie bspw. $(„.plant_small“).attr(„src“, „media/grass.png“); ausgetauscht werden und anschließend durch die Anweisung $(„.plant_small“).css({„animation-play-state“:“running“}); animiert werden. Dadurch verändert sich das Wachstum der Blumen durch Animationen im Laufe des Spiels automatisch. Die Auswahl der Blumensorte zu Beginn des Spiels wird mit Hilfe einer Switch-Anweisung für den restlichen Spielverlauf übernommen
/*Funktion für Blumen. Bilder sind von der Auswähl abhängig*/ switch (blume) { case "Rose": $(".plant_small").attr("src", "media/Rose_Bush.png"); break; case "Sonnenblume": $(".plant_small").attr("src", "media/Sunflower_Bush.png"); break; case "Mohnblume": $(".plant_small").attr("src", "media/Poppy_Bush.png"); break; } $("#sonne").css({"animation-play-state": "running"}); $("#text_12").css({"display":"none"}); $("#text_13").css({"visibility": "visible","display":"block"}); }, 2500); });
Gießkanne
Für die Animation der Gießkanne werden sowohl Keyframe als auch jQuery Animationen verwendet. Bei den keyframes handelt es sich um rein visuelle Effekte, bei der sich die Gestaltung der Gießkanne ändert. Mit Hilfe von bspw. transform:scale() ändert sich ihre Größe, durch opacity ändert sich die Transparenz und durch animation-iteration-count:2 wiederholt sich diese Animation zweimal. Die Bewegung wird anhand von .animate() realisiert, sodass sich die Kanne über die Pflanzen bewegt. Dabei ändert sich mit Hilfe der Anweisung .mousemove ihre Ausrichtung, sobald der User mit der Maus über sie fährt und mit .mouseleave verschwindet die Gießkanne. Gleichzeitig wird auf diese Weise auch die Animation für die Wassertropfen ausgelöst.
/*jQuery-Animation für die Gießkanne und Style Änderungen für Interaktivität*/ $("#giesskanne").click(function() { $("#giesskanne").animate({ bottom: "50%", left: "50%", }, 4000, "linear", function() { /*Animation wird aktiviert nur beim Bewegen auf dem Bild*/ $("#giesskanne").mousemove(function(evt) { $(".wasser_tropfen").css({"display":"block"}); $("#giesskanne").css({"transform":"rotate(-30deg)"}); $(".wasser_tropfen").animate({ bottom: "-55%" }, 2500 ) }); /*Ausschaltung der Animation*/ $("#giesskanne").mouseleave(function(evt) { $(".wasser_tropfen").css({"display":"none"}); setTimeout(function () { $("#giesskanne").hide('slow'); }, 3000); }); });
Sonne
Die Sonne bewegt sich im Spiel mit Hilfe von keyframes automatisch über die Blumenwiese bewegt und scheint stärker, sobald der User sie anklickt.
/*Durchgehende Animation für besseres Spiel. Einige Style Egenschaften werden später via JS ergänzt*/ #sonne { position: absolute; z-index: 2; bottom: 60%; left: 70%; height: 25%; cursor:pointer; animation-name: sonne_bewegung; animation-duration: 45s; animation-timing-function: ease; animation-delay: 0s; animation-iteration-count: 1; animation-fill-mode:forwards; animation-play-state: running; } @keyframes sonne_bewegung { from { transform: translateX(0px) translateY(0px)} to { transform: translateX(-500px) translateY(-20px)} }
Nachdem die Gießkanne eingesetzt wird, stoppt die Bewegungs-Animation der Sonne, damit der User sie leichter anklicken kann. Bei dem Klick auf die Sonne wird sie größer und scheint stärker, um sie hervorzuheben. Das geschieht mit Hilfe der Anweisung
$("#sonne").click(function() {$("#sonne").css({"height":"30%", "filter":"drop-shadow(0px 5px 25px #FFD700)"});
/*Animation für die Sonne wird aktiviert beim Klick. Für den richtigen Spielablauf ist das Anklicken der Sonne nur nach der Animation mit der Gießkanne möglich*/ $("#sonne").click(function() { $("#sonne").css({"height":"30%", "filter":"drop-shadow(0px 5px 25px #FFD700)"}); $(".plant_small").css({"animation-play-state":"running"});
Magic Booster
Der Magic Booster erscheint mit Hilfe der jQuery Anweisung $(„#booster“).show();. Die Animation wird automatisch ausgelöst, sobald er vom User ausgewählt wurde und läuft mit Hilfe der Anweisung animation-iteration-count: infinite; unendlich in einer Schleife. Durch die Anweisung $(„#booster“).fadeOut(4000); verschwindet der Booster automatisch innerhalb von 4 Sekunden. Auch hier kann man die Zeiteinstellungen nach Belieben und Funktionalität anpassen.
/*Magic Bosster wird angezeigt nur bei "Ja"-Antwort Animation ist unendlich und startet mit der Erscheinung des Bildes*/ #booster { position: absolute; z-index: 15; height: 150; bottom: 70%; left: 40%; animation-name: magic_booster; animation-duration: 3s; animation-timing-function: ease; animation-delay: 0s; animation-iteration-count: infinite; animation-fill-mode:backwards; animation-play-state: running; } /*Animation zeigt den Effekt indem der Booster über die Blumenwiese gegossen wird.*/ @keyframes magic_booster { 0% { transform: scale(0.5) rotate(0deg)} 50% { transform: scale(1) rotate(180deg)} 100% { transform: scale(0.5) rotate(-180deg)} }
Interaktive Buttons
Sobald die Maus über die Buttons fährt, erscheint ein Hover-Effekt, in dem sich die Farben ändern. Der Hover-Effekt wird durch diese Eigenschaft umgesetzt:
button:hover { transition: 3s in-back; background-image: radial-gradient(#ffd700, #ff5433); }
Außerdem wird der Cursor durch die Eigenschaft cursor:pointer; in Form einer Hand angezeigt, sobald der User mit der Maus über interaktive Elemente fährt. Dadurch weiß er, welche Elemente anklickbar und für den Spielverlauf wichtig sind.
Besonderheiten
Eine Besonderheit der Animation ist die Hintergrundmusik, die während des Spiels läuft. Sie startet automatisch, wenn der User das Spiel beginnt. Beginnt der User ein neues Spiel, indem er auf “Restart” klickt, startet auch die Musik wieder neu. Dies wird mit Hilfe des jQuery-Befehls $(„#background_musik“)[0].play(); umgesetzt. Bei der Hintergrundmusik haben wir darauf geachtet, eine lizenzfreie Musik zu nehmen, die zum Thema die Spiels passt. Dafür haben wir den Titel “The Small Farm” gewählt. Mit dem Befehl $(„#background_musik“)[0].pause(); endet die Musikwiedergabe zum Ende des Spiels automatisch.
Eine weitere Besonderheit ist das Responsive Design. Dieses wird eingesetzt, damit die Animation auf allen Desktopgrößen richtig angezeigt wird und gespielt werden kann. Das Responsive Design wurde mit Hilfe von CSS angepasst und bezieht sich auf alle Elemente im Quellcode. Dies wurde mit der Eigenschaft position: absolute; sowie der Anpassung der Abstände durch bottom: left: right: top: height: in Prozent-Angaben umgesetzt. Die Eigenschaft font-size: 1.05vw; führt dazu, dass auch die Texte optimiert dargestellt werden.
Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Entwicklung von Multimediasystemen (Sommersemester 2021, Amy Linh Hoang, Prof. Dr.-Ing. Steinberg) entstanden. Verwendete Techniken sind HTML5, CSS3 und JavaScript. Die besten Tutorials stellen wir Euch hier in den nächsten Wochen nach und nach vor.