Vorwort | 5 |
Inhaltsübersicht | 9 |
Inhaltsverzeichnis | 11 |
1 Der macht nichts, der will nur spielen … | 19 |
2 Loading … Von der Idee bis zum Game-Design-Dokument | 23 |
2.1 Inspiration – Woher nehmen? | 23 |
2.1.1 Inspiration von der Technik | 23 |
2.1.2 Inspiration vom Spielen | 26 |
2.1.2.1 Kreative Kombination alter Spielkonzepte | 27 |
Abb. 2–1 Ein Tetris-Stein als Jump’n’Run-Held? Nicht wirklich innovativ! | 27 |
2.1.2.2 Umwerfen alter Spielkonzepte | 29 |
Abb. 2–2 Das Tetris-Prinzip als »echtes« Puzzlespiel wäre neuartig. | 29 |
2.1.2.3 Erweiterung bekannter Spielkonzepte | 31 |
2.1.3 Inspiration im Alltag | 32 |
Abb. 2–3 Schiedsrichterspiel: Entdecken Sie alle Fouls so schnell wie möglich. | 33 |
2.2 Casual Games: Wovon reden wir hier eigentlich? | 34 |
2.2.1 Charakteristik | 34 |
Schneller Ein- und Ausstieg: | 34 |
Leichtes Spielprinzip: | 34 |
Leicht erlernbare oder intuitive Steuerung: | 35 |
Schnelle Erfolgserlebnisse: | 35 |
2.2.2 Zielgruppen | 35 |
2.3 Garantierte Flops – Apples No-Gos | 37 |
2.4 Game-Design-Dokument – Grau ist alle Theorie | 40 |
Abb. 2–4 Das Game-Design-Dokument steht ganz am Anfang. | 40 |
2.4.1 Aufbau | 41 |
2.4.1.1 Core Statement | 42 |
Abb. 2–5 Tic Tac Toe | 43 |
2.4.1.2 Exposé | 44 |
Abb. 2–6 Das Exposé in seiner frühen Konzeptphase | 45 |
2.4.1.3 Grobkonzept | 46 |
2.4.1.4 Feinkonzept | 47 |
Abb. 2–7 Feinkonzeptbeschreibung eines Items | 49 |
2.5 Zielgeräte – iPhone, iPod oder iPad? | 50 |
2.5.1 Display | 51 |
Abb. 2–8 Dasselbe Bild auf iPhone und iPad (skaliert) | 51 |
Abb. 2–9 Gleiche Grafikgrößen, allerdings zeigt das iPad ein wenig mehr. | 52 |
Abb. 2–10 Dasselbe Spiel für iPhone und iPad im Vergleich | 53 |
Abb. 2–11 Die drei Größen im Vergleich | 53 |
2.5.2 Größe | 53 |
Abb. 2–12 Eines der besten iPad-Spiele überhaupt: »Carcassonne« von den »Coding Monkeys« aus Deutschland | 54 |
2.5.3 Zeit | 54 |
2.5.4 Anspruch | 55 |
2.5.5 Sozialer Aspekt | 55 |
2.5.6 Die eierlegende Wollmilchsau | 56 |
3 Level I: Klassische Casual Games | 59 |
3.1 »Pong« | 59 |
Abb. 3–1 So unspektakulär soll das Spiel in wenigen Seiten aussehen! | 60 |
3.1.1 Das erste komplette Spiel | 60 |
3.1.1.1 Vorbereitungen | 61 |
Abb. 3–2 Einrichtung des Projektes | 61 |
Abb. 3–3 Vergeben eines Produktnamens | 61 |
Abb. 3–4 Wenn die Unterfenster am rechten Rand nicht sichtbar sind, können diese über »View« > »Utilities« sichtbar geschaltet werden. | 63 |
Abb. 3–5 Die Verbindung der View zum Code wird über den »Connections Inspector« hergestellt. | 64 |
Abb. 3–6 Unsere »grafischen« Vorbereitungen für »Pong« sind fertig. | 65 |
3.1.1.2 Programmierung der Game Engine | 68 |
Abb. 3–7 Unser erstes Spiel: Pong | 75 |
3.1.1.3 Titelbild | 76 |
Abb. 3–8 Unser Titelbild: nicht schön, aber für unsere erste Gamedemo reicht’s | 77 |
3.1.1.4 Debugging und Codeoptimierung | 78 |
Abb. 3–9 Diese theoretischen Kollisionsabfragen müssen abgefangen werden. | 79 |
3.1.2 Pong-Variationen | 81 |
3.1.2.1 Pong einhändig | 82 |
Abb. 3–10 Das CoreMotion-Framework wird hinzugefügt. | 83 |
3.1.2.2 Zweidäumig | 85 |
3.1.2.3 Ball mit Drall | 87 |
Abb. 3–11 Manipulation der Geschwindigkeit sorgt für Winkelveränderungen. | 88 |
3.1.3 Pong für zwei – Mensch gegen Maschine | 89 |
Abb. 3–12 So sieht die Zweispielervariante aus, egal ob mit KI oder menschlichem Gegenspieler. | 90 |
3.1.4 Pong für zwei – Mensch gegen Mensch | 93 |
Abb. 3–13 Zuständigkeitsbereiche für die Touch-Steuerung | 94 |
Abb. 3–14 Zahlreiche Variationen unseres Spiel durch Skinning (Verwendung von Grafiken) | 97 |
3.2 »Breakout« | 98 |
Abb. 3–15 So sollte es am Ende des Workshops aussehen: »Breakout«. | 99 |
3.2.1 Programmierte UI | 100 |
Abb. 3–16 Hinzufügen von Frameworks | 100 |
Listing 3–1 ViewController.h | 101 |
Listing 3–2 ViewController.m | 105 |
3.2.1.1 CADisplayLink – der bessere Timer | 105 |
3.2.1.2 Licht an, Status aus | 106 |
Abb. 3–17 Berechnung der Koordinatenwerte der Bounding-Box | 107 |
3.2.2 Verfeinerung der Kollisionsabfrage | 107 |
Abb. 3–18 Was das Auge sofort sieht, muss die Game Engine erst berechnen: Hier findet trotz Überschneidung der Bounding-Boxen keine Kollision statt. | 108 |
Abb. 3–19 Haarscharf daneben! Jetzt weiß es auch die Game Engine: Hier findet keine Kollision statt. | 109 |
Abb. 3–20 Unterschiedliche Berechnungen für unterschiedliche Bereiche | 110 |
3.2.2.1 Kollisionsabfrage zwischen zwei Bällen | 112 |
Abb. 3–21 Kollisionsabfrage bei Flipper und Billard | 112 |
Abb. 3–22 Kollisionserkennung zweier Kreise | 113 |
3.2.3 Die Mauer muss weg! | 114 |
Abb. 3–23 Zweidimensionales Raster durch geschicktes Umrechnen eines eindimensionalen Arrays | 117 |
3.2.4 Level 1 – 36 | 119 |
Abb. 3–24 In das 7 ´ 6-Raster zeichnen wir unser Leveldesign, hier: ein Smiley | 120 |
Abb. 3–25 Vom Karopapier zum Array | 120 |
Abb. 3–26 Der fertige Smiley im Spiel | 121 |
Listing 3–3 leveldesign.h | 121 |
Listing 3–4 leveldesign.m | 122 |
Abb. 3–27 Diese Steine sollten für etwas Abwechslung im Leveldesign sorgen. | 125 |
Abb. 3–28 Das fertige Herz im Spiel | 126 |
Abb. 3–29 Bei 42 Pixeln Schrittweite wird die Kollision mit dem bisherigen Algorithmus nicht erkannt. | 128 |
Abb. 3–30 Durch die Einführung der Zwischenschritte erkennen wir Kollisionen, die mit dem bisherigen Code nicht erkannt worden wären. | 131 |
3.2.5 Erweiterungsmöglichkeiten | 132 |
3.2.5.1 Vogelfreie Mauersteine | 133 |
Abb. 3–31 Vertikale, horizontale und achtförmige Bewegung | 136 |
Abb. 3–32 Die drei Schichten: Hintergrund, Spiel, Vordergrund | 137 |
3.2.5.2 »BallOut« – der Rundum-Schläger | 137 |
Abb. 3–33 1.) Ursprungssituation 2.) Tangente an großem Ball als Kollisionsebene 3.) Situation wird auf Horizontale gedreht 4.) Nun kann Einfallswinkel = Ausfallswinkel leicht berechnet werden 5.) Bild wird zurückgedreht 6.) Finale Position der B... | 138 |
Abb. 3–34 Die fertige Version: »BallOut« | 139 |
Listing 3–5 (BallOut) ViewController.h | 140 |
Abb. 3–35 Die in »BallOut« verwendeten Grafiken in der Übersicht | 141 |
Listing 3–6 (BallOut) ViewController.m | 145 |
3.2.5.3 Erweiterung des Leveldesigns | 146 |
Abb. 3–36 Auch wenn man es auf den ersten Blick nicht erkennt: Die komplette Seitenwand wurde aus Kreisen erstellt und anschließend wurde der gestaltete Rahmen darübergelegt. | 147 |
3.2.5.4 Der Ball | 147 |
3.3 »Lunar Lander« | 149 |
Abb. 3–37 Das Original gilt als die erste spielbare Weltraumsimulation: »Lunar Lander«. | 149 |
Abb. 3–38 Für »Lunar Lander« benötigen wir diese 14 Grafiken. | 151 |
Listing 3–7 (Lunar Lander) ViewController.h | 153 |
Listing 3–8 (Lunar Lander) ViewController.m | 158 |
3.3.1 Animation | 159 |
Abb. 3–39 Die Animationsschritte der Mondstation | 159 |
Abb. 3–40 Die Animationsschritte des Düsenantriebs | 159 |
Abb. 3–41 Die Explosionsanimation des Raumgleiters | 159 |
Listing 3–9 leveldesign.h | 161 |
Listing 3–10 leveldesign.m | 162 |
3.3.2 Head-up-Display | 163 |
Abb. 3–42 Die Hintergrundgrafik hud.png, die den Hauptteil des HUDs bildet | 164 |
Abb. 3–43 Das komplette Head-up-Display mit Balken und Levelanzeige vermittelt dem Spieler übersichtlich die wichtigsten Daten. | 164 |
Abb. 3–44 Mögliche Darstellungsoptionen für die Anzahl der noch verbliebenen Schüsse in einem Shooter: a) über die Anzahl der Icons b) Kombination Icon und Ziffer c) Kombination Icon und Balken bzw. Einheiten | 166 |
3.3.3 Aufbau und Gameplay | 166 |
3.4 »Marble Maze« aka »Labyrinth« | 168 |
Abb. 3–45 iPhone-Klassiker: Marble Maze | 168 |
Abb. 3–46 Hintergrund für die Canvas (verkleinert, 320 ´ 480), die Kugel (20 ´ 20), der halbtransparente Kugelschatten, ein Loch (30 ´ 30), das Zielloch (30 ´ 30), Block (verkleinert, 100 ´ 100) | 169 |
Listing 3–11 (Marble Maze) ViewController.h | 170 |
Listing 3–12 (Marble Maze) ViewController.m | 174 |
Listing 3–13 leveldesign.h | 174 |
Listing 3–14 leveldesign.m | 175 |
Abb. 3–47 Ablesen der Werte für die eigene Levelkreation | 175 |
3.5 »Fire!« aka »Bouncing Babies« | 176 |
Abb. 3–48 Gerade mal gut 150 Seiten und schon unser fünftes Spiel: Fire! | 176 |
Abb. 3–49 canvas.png (verkleinert, 480 ´ 320), baby.png (39 ´ 39), firemen0.png (182 ´ 90), firemen1.png (182 ´ 90) | 178 |
Listing 3–15 (Fire!) ViewController.h | 178 |
Listing 3–16 (Fire!) ViewController.m | 182 |
Abb. 3–50 Identische Programmierung, andere Grafiken: politisch korrekt! | 183 |
3.5.1 Querformat | 184 |
Abb. 3–51 Wenn das Bildformat bereits voreingestellt ist, dreht sich der Screen schon vor Programmstart in die gewünschte Richtung. | 185 |
3.5.2 Die Klasse »Sprite« | 185 |
Listing 3–17 Sprite.h | 185 |
Listing 3–18 Sprite.m | 187 |
4 Level II: Moderne Casual Games | 189 |
4.1 Scrolling | 189 |
Abb. 4–1 Macht ohne Scrolling so keinen Spaß. | 189 |
4.1.1 Page-Scrolling | 190 |
Abb. 4–2 Die Spielfigur bewegt sich, der Hintergrund ist statisch. | 190 |
Abb. 4–3 Unterschied zwischen Spieler.center.x (oberer Pfeil) und spielerPosImLevelX (unterer Pfeil) | 192 |
Abb. 4–4 Oben und links wechselt ohne Korrektur bereits die Levelansicht, obwohl sich das Sprite noch im sichtbaren Bereich befindet, unten und rechts hingegen wird korrekt umgeblendet. | 192 |
4.1.2 Einfaches Scrolling | 193 |
Abb. 4–5 Die Spielfigur ist auf festen Displaykoordinaten fixiert, der Hintergrund scrollt vorbei. | 193 |
4.1.3 Parallax-Scrolling | 193 |
4.2 »Noodle Jump« aka »Doodle Jump« | 195 |
Abb. 4–6 Unser Doodle-Jump-Klon mit Makkaroni | 195 |
Abb. 4–7 canvas.png (320 ´ 480), noodle.png, noodle_rocket und 8 Plattformen: 3 ´ normal, 3 ´ speziell, 2 ´ Monster (platform6.png und platform7.png) | 196 |
Listing 4–1 (NoodleJump) ViewController.h | 197 |
Listing 4–2 (NoodleJump) ViewController.m | 204 |
Listing 4–3 Sprite.h | 206 |
Listing 4–4 Sprite.m | 207 |
4.2.1 Jetzt wird alles relativ | 207 |
Abb. 4–8 Bislang haben wir das Sprite relativ zum Koordinatenursprung bewegt, der Hintergrund war fix. | 208 |
Abb. 4–9 Nun bleibt das Sprite an einer fixen Position und dient als Ursprungspunkt, zu dessen Koordinaten sich der Hintergrund relativ bewegt. | 209 |
Abb. 4–10 Das Player-Sprite bewegt sich in horizontaler Richtung, der Hintergrund ausschließlich vertikal. | 209 |
4.2.2 Performance-Optimierungen | 210 |
4.2.2.1 Endlosphilosophie | 210 |
Abb. 4–11 Die unterste Plattform erhält eine neue, zufällige Form und wird oberhalb des Viewports neu gesetzt. | 211 |
4.2.2.2 Auf Konstanten können Sie zählen | 212 |
4.2.2.3 Preloader | 214 |
4.2.2.4 Erweiterungsmöglichkeiten | 214 |
4.3 »iType« aka »R-Type« | 215 |
Abb. 4–12 So sieht am Ende unseres Workshops der erste Level von iType aus. | 215 |
Abb. 4–13 Der Raumgleiter (nicht abgebildet: die animierten Phasen, in denen die Signallichter flackern und der Düsenantrieb flimmert), 5 Tiles, aus denen wir die Umgebung bauen (je 80 ´ 160 Pixel) | 216 |
4.3.1 Scrolling | 216 |
Abb. 4–14 Tiles, die links aus dem Viewport »rutschen«, bekommen ein neues Design und werden mit neuer y-Koordinate rechts neben den Displayrand gesetzt, von wo aus sie wieder in den Viewport scrollen. | 217 |
Abb. 4–15 Felsen, Palmen, futuristisches Design, Mauerwerk | 218 |
Abb. 4–16 Die Tiles können optisch nahtlos aneinandergesetzt werden, wenn sie vertikal mit einem Vielfachen von 20 Pixeln positioniert werden. | 218 |
Abb. 4–17 Aus mehreren Pattern à 10 Tiles gestalten wir einen längeren Levelabschnitt. | 219 |
Abb. 4–18 Zusammenfassung mehrerer Levelabschnitte als Pattern zu einem Gesamtlevel | 220 |
Listing 4–5 leveldesign.h | 221 |
Listing 4–6 leveldesign.m | 223 |
Listing 4–7 (iType) ViewController.h | 225 |
Listing 4–8 (iType) ViewController.m | 226 |
Listing 4–9 Sprite.h | 231 |
Listing 4–10 Sprite.m | 232 |
4.3.2 Virtual Joypad | 233 |
Abb. 4–19 Im Vergleich zum Hochkantformat ist die Touch-Steuerung beim Querformat nicht immer ideal. | 234 |
Abb. 4–20 Analog: Je weiter sich der Finger vom Steuerkreuzmittelpunkt entfernt, desto schneller bewegt sich das Sprite in dieselbe Richtung. | 236 |
Abb. 4–21 Die halbtransparente Joypadgrafik wird links unten auf dem Display platziert. | 236 |
Listing 4–11 (iType) ViewController.h | 237 |
Listing 4–12 (iType) ViewController.m | 238 |
4.3.3 Virtual Touchpad | 239 |
Abb. 4–22 Die Position des Berührpunkts auf dem virtuellen Touchpad wird um den Faktor 4 auf die Position des Raumgleiters im Viewport hochskaliert. | 240 |
Listing 4–13 (iType) ViewController.h | 241 |
Listing 4–14 (iType) ViewController.m | 242 |
4.3.4 Optimierung der Kollisionsabfrage: Maskierung | 243 |
Abb. 4–23 Wieder einmal ein Kollisionsproblem: die Bounding-Boxen | 243 |
Abb. 4–24 Weitere Frames als Masken: Maske 1 (33 ´ 13 Pixel), Maske 2 (19 ´ 3 Pixel) | 244 |
4.3.5 Verlieren mit Bumms! | 247 |
Abb. 4–25 Die Animation der Explosion in der Einzelbilderfolge | 248 |
4.3.6 Aliens und Game-Balance | 249 |
Abb. 4–26 Die vier Alienarten: alien, eyeball, staticRobot, snake | 250 |
Listing 4–15 leveldesign.h | 250 |
Abb. 4–27 Das vierte Alien in die einzelnen Tiles gesplittet: »snake« bildet den Kopf, die 10 »snakeFollow« die Körpersegmente | 251 |
Listing 4–16 leveldesign.m | 252 |
Abb. 4–28 wobble: Das Alien bewegt sich auf einer Sinuskurve. | 259 |
Abb. 4–29 jumper: Das Alien springt 100 Pixel hoch. | 259 |
Abb. 4–30 jumper2: Das Alien springt 200 Pixel hoch. | 259 |
Abb. 4–31 guerilla: Das Alien fährt versteckt ins Bild hinein, springt hervor, schießt und duckt sich wieder. | 259 |
Abb. 4–32 twist: Das Alien rotiert um einen Punkt mit dem Radius 50 Pixel. | 260 |
Abb. 4–33 twistFollow: Das Alien rotiert um einen Punkt mit dem Radius 50 Pixel und um eine Winkelgröße versetzt (für Schlangenanimation). | 260 |
Abb. 4–34 bigtwist: Das Alien rotiert um einen Punkt mit dem Radius 100 Pixel. | 260 |
Abb. 4–35 bigtwistFollow: Das Alien rotiert um einen Punkt mit dem Radius 100 Pixel und um eine Winkelgröße versetzt (für Schlangenanimation). | 260 |
Abb. 4–36 attack: Das Alien visiert direkt den Raumgleiter an, agiert dabei aber sehr langsam. | 260 |
4.3.7 Schüsse, Sterne, Funken, Rauch und Explosionen: Partikel | 261 |
Listing 4–17 Particle.h | 262 |
Abb. 4–37 Die wichtigsten Eigenschaften eines Partikels im Überblick | 262 |
Listing 4–18 Particle.m | 265 |
Listing 4–19 Ergänzungen im ViewController.h | 265 |
4.3.7.1 Die Aliens schießen zurück | 269 |
Abb. 4–38 Ein wahres Inferno erwartet den Spieler. | 276 |
4.3.7.2 Kosmetik: Sterne und Explosionen | 277 |
4.3.8 Bonuslevel: Faszination Partikel | 280 |
Listing 4–20 (Elements) ViewController.h | 281 |
Listing 4–21 (Elements) ViewController.m | 282 |
Abb. 4–39 Wasserfontäne | 283 |
4.3.8.1 Funkenflug | 288 |
Abb. 4–40 Funkenflug | 289 |
4.3.8.2 Brandherd | 289 |
Abb. 4–41 Brandherd | 290 |
4.3.8.3 Rauchschwaden | 290 |
Abb. 4–42 Rauchschwaden | 290 |
4.3.8.4 Nebelschwaden | 291 |
Abb. 4–43 Nebelschwaden | 291 |
4.3.8.5 Niagarafälle | 291 |
Abb. 4–44 Niagarafälle | 292 |
4.3.8.6 Wunderkerze oder Lunte | 292 |
Abb. 4–45 Wunderkerze | 293 |
4.3.8.7 Feuerwerk | 293 |
Abb. 4–46 Feuerwerk | 294 |
4.3.9 Endgegner und andere Erweiterungen | 295 |
Abb. 4–47 Getroffenes Alien: kurzes Aufleuchten | 295 |
Abb. 4–48 2 Aliens = 1 Alien + Schutzschild | 296 |
Abb. 4–49 Ein Auto im Weltall? | 297 |
4.4 »Neptune Patrol« aka »Moon Patrol« | 298 |
Abb. 4–50 Ungewöhnliches Fahrverhalten | 304 |
Abb. 4–51 App Store-Klassiker seit 2009: Canabalt | 307 |
4.5 »The Little Jungle Sisters« aka »The Great Giana Sisters« | 307 |
Listing 4–22 Methode loadLevel | 310 |
Listing 4–23 level1.lvl | 310 |
Abb. 4–52 Die verwendeten Plattformen in »The Little Jungle Sisters« | 311 |
Abb. 4–53 11 Zeichen ermöglichen die einfache Gestaltung eines simplen, aber kompletten Levels. | 311 |
4.5.1 Dynamisches Scrollen | 312 |
4.5.2 Kompletter Code | 313 |
Listing 4–24 constants.h | 313 |
Listing 4–25 (The Little Jungle Sisters) ViewController.h | 314 |
Listing 4–26 (The Little Jungle Sisters) ViewController.m | 322 |
Abb. 4–54 Level 2 in der Komplettansicht | 323 |
Listing 4–27 level2.lvl | 323 |
Abb. 4–55 Level 3 in der Komplettansicht | 324 |
Listing 4–28 level3.lvl | 324 |
4.5.3 Ebenensortierung | 325 |
Abb. 4–56 1) So soll es aussehen. 2) Bei Bewegung nach rechts wird Plattform 2 verdeckt. 3) Bei Bewegung nach links ist alles korrekt. | 325 |
4.5.4 Detaillierte Animationen | 327 |
Abb. 4–57 Pro Animationsschritt wird der Ballen des Standfußes jeweils um 2 Pixel nach hinten verschoben. | 327 |
4.5.5 Parallax-Scrolling – ein Hauch von 3D | 330 |
Abb. 4–58 bg.png (480 ´ 320), layer0.png (1440 ´ 320) und layer1.png (1440 ´ 320) | 331 |
Abb. 4–59 Die vier Schichten: Canvas (inkl. Spiel), Hintergrund1 (Wald, beweglich), Hintergrund2 (Wald, beweglich) und der eigentliche Hintergrund (Farbverlauf, fix) | 332 |
Abb. 4–60 Die vier Schichten im Viewport: Die Baumstämme im Vordergrund können sich optisch vom Hintergrund noch nicht so richtig absetzen. | 332 |
Abb. 4–61 Märchenhafter Schleier: fog.png (zur besseren Sichtbarkeit auf schwarzem Hintergrund) | 333 |
Abb. 4–62 So soll unser Spiel anschließend aussehen, die Hintergrundebenen scrollen dabei in unterschiedlichen Geschwindigkeiten mit. | 334 |
Listing 4–29 ViewController.h | 334 |
Listing 4–30 ViewController.m | 336 |
Abb. 4–63 Das linke und das rechte Drittel sehen identisch aus. | 337 |
4.5.6 Einäugige Sumpfmonster | 337 |
Abb. 4–64 Sumpfmonster (Bufo zyklopensis, engl. Bogeye = »Sumpfauge«) das fieseste Geschöpf im Dschungel | 338 |
Listing 4–31 level1.lvl (mit Monstern) | 338 |
Abb. 4–65 Das animierte Sumpfauge | 339 |
5 Level III: Casual Games für Profis | 343 |
Abb. 5–1 Ein typisches Tile-based Game | 344 |
5.1 Tilemaps | 345 |
Abb. 5–2 Hier sind die Tiles deutlich sichtbar markiert. | 345 |
5.1.1 UIView vs. CALayer | 346 |
Abb. 5–3 Nur die untere Hälfte liegt im Viewport. | 348 |
Abb. 5–4 Die ersten Tiles sind nicht mehr sichtbar. | 348 |
Abb. 5–5 Die unterste Reihe (außerhalb des Viewports) und die oberste sichtbare Reihe sind identisch. | 349 |
Abb. 5–6 Zwei gleiche Hälften | 349 |
Abb. 5–7 Im Viewport hat sich nichts geändert. | 350 |
Abb. 5–8 Die obere Hälfte wird neu bestückt. | 350 |
Listing 5–1 ViewController.h | 351 |
Listing 5–2 ViewController.m | 355 |
Listing 5–3 tilemap1.lvl | 356 |
5.1.2 Tiled – ein kostenloser Tilemap-Editor | 357 |
Abb. 5–9 Tilemaps mit dem Tool »Tiled« einfach erstellen | 357 |
Listing 5–4 loadLevel-Methode | 359 |
Abb. 5–10 Eine Tilemap im Rohzustand | 360 |
5.2 »1783 – Montgolfière« aka »1942« | 361 |
Abb. 5–11 So soll das fertige Spiel aussehen. | 361 |
Listing 5–5 constants.h | 362 |
Abb. 5–12 Die neue Tilemap »versailles.png«, mit der wir einen kompletten Schlossgarten entwerfen können | 363 |
5.2.1 Pseudo 3D | 363 |
Abb. 5–13 Der Ballon in Scheiben und zusammengesetzt | 364 |
Abb. 5–14 Durch unterschiedlichen Versatz der »Scheiben« entsteht ein dreidimensionaler Eindruck. | 364 |
5.2.2 Tile-Engine für Animation | 367 |
Abb. 5–15 Keine sechs Einzelbilder, sondern ein Filmstreifen. | 368 |
Listing 5–6 ViewController.h | 370 |
Listing 5–7 ViewController.m | 377 |
5.3 »Nuke Control« – Programmieren mit Cocos2D | 377 |
Abb. 5–16 So soll der Einstiegslevel von »Nuke Control« später aussehen. | 378 |
Abb. 5–17 Von oben betrachtet ist alles flach. | 379 |
5.3.1 Installation von Cocos2D | 380 |
Abb. 5–18 »Terminal« über Spotlight starten | 381 |
Abb. 5–19 Den Cocos2D-Ordner einfach in das Terminalfenster ziehen | 381 |
Abb. 5–20 Cocos2D wurde erfolgreich installiert. | 382 |
Abb. 5–21 Ein neues Cocos2D-Projekt anlegen | 383 |
5.3.2 Einführung in Cocos2D | 383 |
Abb. 5–22 Ein Buch, bei dem man nach 366 Seiten sein erstes »Hello World!« programmiert hat, würde ich sofort reklamieren. | 384 |
Listing 5–8 HelloWorldLayer.m | 385 |
Abb. 5–23 Die Position eines Sprites wird in Cocos2D über dessen Ankerpunkt bestimmt. | 387 |
5.3.3 Draw-Steuerung | 388 |
Abb. 5–24 Der gezeichnete Pfad, dem das Sprite im nächsten Schritt folgen wird, ist bereits sichtbar. | 391 |
Abb. 5–25 Leider folgt das Elektron-Sprite nicht dem direkten Pfad. | 392 |
Listing 5–9 HelloWorldLayer.h | 394 |
Listing 5–10 HelloWorldLayer.m | 398 |
5.3.4 Spielkonzept und Grafiken | 399 |
Abb. 5–26 atom1.png, atom2.png und elektron.png, mehr brauchen wir nicht | 399 |
Abb. 5–27 Drei Schichten von rotierenden Grafiken ergeben das vitale Farbspiel. | 400 |
5.3.5 Herstellung der Grafiken | 402 |
Abb. 5–28 Die neu erstellte Grafik mit 400 ´ 400 Pixeln | 402 |
Abb. 5–29 Die Einstellungen in dem Tool »Verlaufsaufhellung« für die Erzeugung der Atomhülle | 403 |
Abb. 5–30 Wir missbrauchen den Schlagschatten als roten Schein um das Elektron. | 404 |
Listing 5–11 HelloWorldLayer.h | 405 |
Listing 5–12 HelloWorldLayer.m | 415 |
5.3.6 Draw-Steuerung (Choreografie, Muster) | 416 |
Tab. 5–1 Gesten in Kampfhandlungen übersetzen | 417 |
Abb. 5–31 Die Geste wird direkt in die Kampfhandlung übertragen. | 417 |
Abb. 5–32 C64-Klassiker: »Winter Games« | 418 |
Tab. 5–2 Gesten in Tanzfiguren übersetzen | 418 |
Abb. 5–33 In »daWindci« wird ein Heißluftballon indirekt z. B. durch einen Tornado gesteuert, den der Spieler mit einer Kreisgeste hervorrufen kann. | 419 |
Abb. 5–34 Eingrenzung des Pfads | 420 |
Abb. 5–35 Rasterung | 420 |
Abb. 5–36 Filterung der Störfelder, die zur Erkennung nicht notwendig sind | 421 |
Tab. 5–3 Gängige Gesten und deren Erkennungscodes | 422 |
Listing 5–13 HelloWorldLayer.h | 422 |
Listing 5–14 HelloWorldLayer.m | 426 |
6 Level IV: Casual Games 3D | 427 |
Abb. 6–1 Anhand der Bounding-Boxen auf Kollisionen zu schließen – da möchte man kein Programmierer sein. | 428 |
6.1 OpenGL ES | 429 |
6.2 »Jellybears« aka »Collapse!« | 431 |
Abb. 6–2 Unser Gummibärchenspiel: Jellybears | 431 |
6.2.1 Grafische Umsetzung | 433 |
Abb. 6–3 Diese Texturen werden wir verwenden: Gummibären in allen Farben und eine halbtransparente Tüte. | 433 |
Abb. 6–4 In diesem Fall konvertiert das weiße Gummibärchen in ein grünes, womit der Sechserblock komplett verschwindet. | 434 |
Abb. 6–5 Beim Speichern der Textur das Häkchen bei »Interlaced« nicht vergessen | 435 |
6.2.2 Technische Umsetzung | 435 |
Abb. 6–6 Auswahl des richtigen Templates | 436 |
Abb. 6–7 Eine kleine Änderung im Storyboard Editor | 436 |
Abb. 6–8 Ein Sprite im 3D-Raum | 438 |
Abb. 6–9 Zwei Dreiecke: ein Sprite | 438 |
6.2.3 Spiellogik | 440 |
Listing 6–1 (Jellybears) ViewController.h | 443 |
Listing 6–2 (Jellybears) ViewController.m | 455 |
6.2.4 Rekursiver Steinbruch | 456 |
6.3 »Gems 3D« aka »Collapse!« | 457 |
Abb. 6–10 Dasselbe Spiel, anderes Outfit und nun komplett in 3D. | 457 |
Abb. 6–11 Unsere neuen Texturen gembg.png und gem0.png bis gem4.png | 459 |
Abb. 6–12 Das sieht nun schon vielversprechend aus: unser Spiel in echtem 3D! | 461 |
Abb. 6–13 Entscheidend ist die Umlaufbahn: Gegen den Uhrzeigersinn bedeutet »vorne« und damit »sichtbar«. | 462 |
Abb. 6–14 Die Hälfte der Textur wird einfach nicht angezeigt. | 463 |
6.3.1 Meshes aus .OBJ laden | 464 |
Listing 6–3 cube.obj | 464 |
Abb. 6–15 Ringe statt Würfel … und zwar durch und durch | 467 |
6.4 Blender | 468 |
Abb. 6–16 Der kostenlose 3D-Editor »Blender 2.61« | 468 |
Abb. 6–17 Erst einmal die Bühne säubern | 469 |
6.4.1 Ikosaeder | 469 |
Abb. 6–18 Der erste Gem ist schon fast fertig. | 469 |
Abb. 6–19 Positionieren, »Subdividieren« und Exportieren | 470 |
6.4.2 Edelstein | 470 |
Abb. 6–20 Über den »Schraubenschlüssel«-Reiter erreichen Sie das »Modifier«-Panel. | 471 |
6.4.3 Metaballs | 471 |
Abb. 6–21 Über »Alt« + »C« konvertieren Sie die Metaballs zu einem Gitternetz. | 472 |
Abb. 6–22 So wechseln Sie in die »Von oben«-Sicht und unterteilen alle Vierecke in Dreiecke. | 472 |
Abb. 6–23 Das Menü rechts erscheint, wenn Sie das kleine Pluszeichen in der rechten oberen Ecke der 3D-Ansicht anklicken. Nun können Sie das Objekt skalieren. | 473 |
Abb. 6–24 Vielleicht nicht gerade die passenden Texturen, aber dafür in 3D! | 474 |
7 Der Endgegner: Die letzten 10 % | 477 |
7.1 Die Menüstruktur | 478 |
Abb. 7–1 Diese vier Screens sollten Sie im Mindestrepertoire haben: Default.png, Startscreen, das Spiel und einen Endscreen | 479 |
7.1.1 Methode 1: »Eine für alles« | 479 |
7.1.2 Methode 2: »Storyboard« | 480 |
Abb. 7–2 Um das Spiel zu komplettieren, erstellen wir ein neues Projekt »completeGame«. | 481 |
Abb. 7–3 Der Storyboard Editor hilft uns bei der Erstellung der Menüstruktur. | 482 |
Abb. 7–4 Fügen Sie rechts von unserer UIView einen UIViewController hinzu. | 482 |
Abb. 7–5 Das Spiel wird hinzugefügt. | 483 |
Abb. 7–6 Das Titelbild wird einfach über ein UIImageView hinzugefügt. | 484 |
Abb. 7–7 Über einen unsichtbaren Button fügen wir dem Titelscreen eine einfache Menüstruktur hinzu. | 484 |
Abb. 7–8 Der Button wird mit der Gamescreen verbunden. | 485 |
7.1.2.1 Programmiertechnischer Wechsel | 485 |
Abb. 7–9 Hier wird die selbst geschriebene Klasse zugeordnet | 486 |
8 Hidden Levels | 487 |
8.1 Face Detection | 487 |
Listing 8–1 (Face Detection) ViewController.h | 488 |
Listing 8–2 (Face Detection) ViewController.m | 489 |
Abb. 8–1 Das Gesicht in face.jpg wurde erkannt und die Augen wurden markiert. | 490 |
8.2 Face Tracking | 490 |
Listing 8–3 (Face-Tracking) ViewController.h | 491 |
Listing 8–4 (Face-Tracking) ViewController.m (Auszug) | 492 |
Abb. 8–2 An Position des Betrachters angepasste Darstellung: 3D-Simulation | 494 |
8.3 Einstellungen | 494 |
Listing 8–5 Einstellungen speichern | 494 |
Listing 8–6 Einstellungen einlesen | 495 |
8.4 Highscore | 495 |
Listing 8–7 Highscore-Verwaltung | 496 |
Listing 8–8 Highscore.h | 496 |
Listing 8–9 Highscore.m | 498 |
8.5 GameKit | 499 |
Listing 8–10 Game-Center-Initialisierung, Teil I | 500 |
Listing 8–11 Game -Center-Initialisierung, Teil II | 500 |
Listing 8–12 Highscore an Game Center übergeben | 501 |
Listing 8–13 Highscore anzeigen | 501 |
8.6 Facebook | 501 |
Abb. 8–3 Hier werden die Daten aus dem Provisioning Portal eingefügt. | 502 |
8.7 Videosequenz | 504 |
Abb. 8–4 Miro Video Converter | 505 |
Listing 8–14 Video abspielen | 505 |
8.8 Location | 506 |
Listing 8–15 (Location) ViewController.h | 506 |
Listing 8–16 Ausschnitt aus der getGPSViewController.m | 507 |
8.9 Kompass | 507 |
9 Bonuslevel: Artwork und Grafik | 509 |
9.1 Gimp | 509 |
9.1.1 Installation | 510 |
9.1.2 Einführung für komplette Neulinge | 510 |
Abb. 9–1 Die Gimp-Fenster von links nach rechts: Werkzeugkasten, Ebenenfenster, Zeigerinformationen und das Arbeitsfenster | 511 |
Abb. 9–2 Pixelgenaues Arbeiten mit dem Stift | 512 |
Abb. 9–3 Besser fürs Malen geeignet: der Pinsel | 513 |
Abb. 9–4 Farbverläufe werden später noch wichtig sein. | 514 |
9.1.3 Zeichnen mit Niveau: Ebenen in Gimp | 515 |
Abb. 9–5 Jedes Körperteil hat seine eigene Ebene. | 516 |
9.2 Farbtheorie | 516 |
9.2.1 Die wichtigsten Farben | 517 |
9.2.1.1 Himmel | 517 |
Abb. 9–6 Schafft Atmosphäre: kreisförmiger Farbverlauf von hell nach dunkel | 517 |
Abb. 9–7 Mit drei Klicks erzeugen wir eine schöne Sonne. | 518 |
Abb. 9–8 Mit Ebenen jonglieren: 1) neue Ebene erzeugen, 2) aktuelle Ebene duplizieren, 3) aktuelle Ebene löschen | 519 |
Abb. 9–9 Ein wunderschöner Hintergrund, z. B. für das Titelbild eines asiatischen Beat’em Up (enthält Bildmaterial von Tomo Yun, www.yunphoto.net/de/) | 519 |
Abb. 9–10 Nächtliches Szenario | 520 |
Abb. 9–11 Ideal für Spaceshooter: Fotos der NASA | 521 |
9.2.1.2 Haut | 521 |
Abb. 9–12 Die Von-Luschan-Skala ist eine hervorragende Quelle für synthetische Hautfarben und kann in Farbe auf www.iosgames.de heruntergeladen werden. | 522 |
Abb. 9–13 Hier den Hexcode eintragen und Gimp wandelt den Code in die dazugehörige Farbe um. | 523 |
9.2.1.3 Metalle | 523 |
Abb. 9–14 Metall, Chrom und Gold/Silber | 524 |
9.2.2 Ambiente | 524 |
9.2.3 Farbnutzung | 525 |
9.2.4 Licht und Schatten | 526 |
Abb. 9–15 Gehen und Wiederkommen wird in verschiedenen Ländern anders interpretiert. | 527 |
Abb. 9–16 Dreidimensionale Wahrnehmung durch den richtigen Einsatz von Licht und Schatten | 527 |
Abb. 9–17 Richtiges Setzen von hellen und dunklen Flächen | 528 |
Abb. 9–18 Lineare Farbverläufe sorgen für die räumliche Darstellung von Röhren, ein kreisförmiger Farbverlauf für dreidimensionale Kugeln. | 528 |
Abb. 9–19 Funktioniert nur bei der liegenden Röhre: Umkehr durch horizontale Spiegelung | 528 |
Abb. 9–20 Nun stimmt die Darstellung wieder. | 529 |
9.3 Sprites | 529 |
9.3.1 Helden | 529 |
9.3.1.1 Typ »Doodle« | 530 |
Abb. 9–21 Kurzer Selbsttest: Welches der folgenden Doodles würden Sie als reiner Spieler am ehesten als hingekritzelte Spielfigur akzeptieren? | 530 |
Abb. 9–22 Hier sehen wir eine kleine Auswahl naiv gezeichneter Superhelden. Ich habe mich für den vorletzten entschieden, auch wenn sein linker Nachbar sympathischer wirkt. | 531 |
Abb. 9–23 Meinen Superhelden habe ich gezeichnet und gezeichnet, bis ich zufrieden war (rechts unten): keine aufwendigen Schuhe oder dicke Antennen, kugelrund, einfacher Mund – perfekt unperfekt! | 532 |
Abb. 9–24 Zuschneiden des gewünschten Bildausschnitts | 532 |
Abb. 9–25 Ebene kopieren und Abbildungsmodus einstellen | 533 |
Abb. 9–26 Entweder schwarz oder weiß, ein Dazwischen gibt es beim Schwellwert nicht. | 534 |
Abb. 9–27 Beim Skalieren setzen wir mit »Sinc (Lanczos 3)« am besten immer den besten Algorithmus ein. | 534 |
Abb. 9–28 Die Auswahl der Farbe des Pinsels und der Pinselstärke (links: Gimp 2.6, rechts: Gimp 2.8) | 535 |
Abb. 9–29 Wer hätte gedacht, dass Mausgrobmotorik einmal ein Vorteil sein könnte? | 536 |
Abb. 9–30 Das fertige Doodle | 536 |
9.3.1.2 Typ »8-Bit Pixel Art« | 537 |
Abb. 9–31 Ein Meisterwerk in Reduktion: 86 Pixel und nur zwei Farben sorgen in »Canabalt« für das stimmungsvolle Retrofeeling. | 537 |
Abb. 9–32 Jedes optische Pixel besteht in Wahrheit aus mehreren Pixeln. | 538 |
Abb. 9–33 Ein typisches Pixel Artwork: Jedes einzelne Pixel ist von Hand gesetzt. | 539 |
Abb. 9–34 Schritt für Schritt entsteht der Kopf unserer Heldin, frisiert wird ganz zum Schluss. | 540 |
Abb. 9–35 12 Pixel, 18 Variationen: erwartungsvoll, achtsam, durchgeknallt, männlich, übernächtigt, neugierig, aufdringlich, verschlossen, Augen zu und durch, angsterfüllt, hinterfragend, entschlossen, skeptisch, angestrengt, blauäugig (typisc... | 541 |
Abb. 9–36 Eine gute Heldin braucht Köpfchen und Körper. | 541 |
Abb. 9–37 Auch unsere Heldin steht auf gutes Schuhwerk. | 542 |
9.3.1.3 Typ »Vektorgrafik« | 543 |
Abb. 9–38 Mit wenigen geometrischen Schritten zum sympathischen Heldenkopf | 544 |
Abb. 9–39 1) Die Höhe vom Hals bis zum Boden entspricht genau der Größe des Kopfes 2) Der Boden zwischen linkem und rechtem Rand des Kopfes wird gedrittelt 3) Kinnspitze wird mit linkem Drittel des Bodens verbunden 4) Parallele durch linkes Bode... | 546 |
Abb. 9–40 6) Schnittpunkt markiert Beinansatz, Flächen darüber und darunter werden jeweils halbiert 7) Leichter Bogen durch obere Halbierende markiert Hosenbund, Beinansatz jeweils mit äußeren Schnittpunkten der Halbierenden verbinden und Stief... | 547 |
Abb. 9–41 11) Schultern abschrägen 12) Verbindung Beinansatz zu Nasenspitze markiert an Hosenbund Bauchnabel (oder Gürtelschnalle) 13) Details (Fäuste, Hemdausschnitt, Schuhe, Gürtel) hinzufügen 14) + 15) Kolorieren und ergänzen (Weltraumkäm... | 547 |
Abb. 9–42 Erst der »Smiley« macht aus dem Bauch einen Waschbrettbauch. | 548 |
Abb. 9–43 Links sieht aus wie Plastik, rechts – mit krakeligen Linien – wie Baumwolle. | 548 |
Abb. 9–44 Das furchtbare Ergebnis nach dem Verkleinern ohne Interpolation | 548 |
Abb. 9–45 Die Umrisslinie lässt das Sprite nicht mehr ganz so verfranst aussehen. | 549 |
Abb. 9–46 Im Zweifelsfall die Augen immer vergrößern | 549 |
Abb. 9–47 Der fertige kleine Barbar ist bereit für sein Abenteuer. | 550 |
9.3.1.4 Typ »16-Bit« | 550 |
Abb. 9–48 So ungefähr soll der eigene Pinsel aussehen. | 550 |
Abb. 9–49 Der selbst erstellte Pinsel | 551 |
Abb. 9–50 Die Reihenfolge der Pinselstriche für den korrekten Schattenwurf | 552 |
Abb. 9–51 Mit nur sechs Pinselstrichen die Gliedmaßen zeichnen und mit nur 10 Punkten den Körper modellieren | 552 |
Abb. 9–52 Die fertige Vorlage und ein amphibienartiges Alien, welches auf Basis dieser Vorlage erstellt wurde | 553 |
Abb. 9–53 Die Textur (links) sorgt für ein organisches Aussehen unseres Aliens (rechts). | 554 |
9.3.1.5 Typ »3D« | 555 |
Abb. 9–54 Nur drei Schritte bis zum 3D-Küken | 555 |
Abb. 9–55 Weitere mögliche, niedlich dreinschauende Varianten | 556 |
9.3.1.6 Typ »Eigenkreation« | 556 |
Abb. 9–56 Am Anfang steht immer die Bleistiftzeichnung. | 557 |
Abb. 9–57 Experimente bei den Details sind erwünscht. | 557 |
Abb. 9–58 Die Textur gibt dem Wesen eine realistische Haut, egal ob Fell, Leder oder Schuppen. | 558 |
Abb. 9–59 Die finale Ausarbeitung für das Spiel | 558 |
9.3.2 Animationen | 559 |
9.3.2.1 Rollige Helden | 559 |
Abb. 9–60 Zu Lande, zu Wasser und in der Luft | 559 |
9.3.2.2 Läufige Helden | 560 |
Abb. 9–61 Konstante Geschwindigkeit: 2 Pixel/Frame | 560 |
Abb. 9–62 Bei Pferden bewegt sich die Brust selbst im Galopp nur unwesentlich. | 561 |
9.3.2.3 Rundgang | 562 |
Abb. 9–63 Eine komplette Laufanimation innerhalb 15 Frames | 562 |
Abb. 9–64 Die Abspieldauer jedes einzelnen Frames kann einfach hinter dem Ebenennamen gesetzt werden. | 563 |
9.3.3 Plattformen (16 Standard Tiles) | 563 |
Abb. 9–65 Level 1: Wenige Tiles ermöglichen nur schlichtes Leveldesign. | 564 |
Abb. 9–66 Level 2: Statt nur Plattformen sind nun massive Wände im Einsatz. | 564 |
Abb. 9–67 Level 3 | 564 |
Abb. 9–68 16 Teile, die die Welt bedeuten (schwarze Linie = hier kann das Sprite laufen) | 565 |
Abb. 9–69 Ein brauchbares Tileset, wobei die Kachelung noch deutlich ins Auge sticht. | 565 |
Abb. 9–70 Bessere Kachelübergänge dank des Filters »Nahtlos machen« | 566 |
Abb. 9–71 3 Varianten einer Kachel, die an den Seiten immer die identischen Pixel hat, damit die Übergänge reibungslos funktionieren | 566 |
Abb. 9–72 Plattformen gefällig? Diese passen irgendwie immer! | 567 |
Abb. 9–73 Unschöne Blockeffekte in der Mitte sind durch ungerade Pixelbreite und -höhe oder durch Antialiasing vermeidbar. | 567 |
9.3.4 Minisprites: Gems | 567 |
Abb. 9–74 Von einem einfachen Herz zu einem plastisch wirkenden Gem | 568 |
Abb. 9–75 Selbst das Werk eines unfähigen Grafikers kann man mit dem Algorithmus unheimlich aufwerten. | 569 |
Abb. 9–76 Vor und nach der Anwendung des Algorithmus | 569 |
Abb. 9–77 Von der Kritzelpalme zum perfekten 16-Bit-Sprite | 570 |
Abb. 9–78 Screenshot des Tools Needlework8 | 570 |
9.3.5 Explosionen | 571 |
Abb. 9–79 Der Explosionspinsel | 571 |
Abb. 9–80 Eine schöne Explosion in weniger als einer Minute mit dem richtigen Pinsel | 571 |
Abb. 9–81 Animierter Feuerball | 572 |
Abb. 9–82 Effektvoll, aber stellt den Programmierer vor heftige Probleme | 573 |
9.4 Hintergrundgrafiken | 573 |
Abb. 9–83 Mit Hintergrundbild wirkt die Gegend einfach stimmungsvoller. | 573 |
Abb. 9–84 Die Baumwipfel schränken die virtuelle Freiheit immens ein. | 574 |
Abb. 9–85 Kennt man, mag man, ist man gewohnt, kommt man mit zurecht. | 576 |
9.4.1 Wolken | 576 |
9.4.1.1 Typ »Kinderspiel« | 576 |
Abb. 9–86 Entstehung einer Wolke im Comic-Style | 576 |
9.4.1.2 Wolkenmeer | 577 |
Abb. 9–87 Wolken und Buschwerk in einem Schritt | 577 |
9.4.1.3 Typ »Comic« | 578 |
Abb. 9–88 In zwei Minuten zur Schäfchenwolke | 578 |
9.4.2 Landschaft | 578 |
9.4.2.1 Hügel | 579 |
Abb. 9–89 Entstehung eines Hügels | 579 |
Abb. 9–90 Für jedes Szenario die richtigen Hügel | 579 |
9.4.2.2 Wald und Bäume | 579 |
Abb. 9–91 Ööööh … nö! | 580 |
Abb. 9–92 Das sieht schon besser aus. | 580 |
Abb. 9–93 Die Knotenstellen lassen den Baum natürlicher aussehen | 580 |
Abb. 9–94 Eine Baumkrone ist in einer Minute aufgemalt. | 581 |
Abb. 9–95 Mit einem solchen Pinsel können Wiesen schnell und leicht erzeugt werden. | 581 |
Abb. 9–96 Holzaugen und Astlöcher geben dem Baum ein märchenhaftes Aussehen. | 582 |
Abb. 9–97 Zwei Kurven, Rücken an Rücken | 583 |
Abb. 9–98 Die Äste werden hinzugefügt. | 583 |
Abb. 9–99 Eine flache Krone (z. B. als Plattform verwendbar), Büschel und eine mächtige Baumkrone | 583 |
Abb. 9–100 Ein Stern mit verschieden grünfarbenen Strahlen bildet unseren Pinsel. | 584 |
Abb. 9–101 Schritt für Schritt zum liegenden Stern | 584 |
Abb. 9–102 Und dasselbe noch einmal | 584 |
9.4.3 Wetter | 585 |
Abb. 9–103 Nebel | 585 |
Abb. 9–104 Regenfäden und Schneeflocken | 585 |
9.4.4 Schnörkel | 586 |
Abb. 9–105 Unrealistisch, aber stimmungsvoll: Schnörkel skizzieren leichte Windverwehungen. | 586 |
9.4.5 Weltraum | 586 |
Abb. 9–106 Viele Dreiecke, eine Glaskuppel: Konstruktion eines typischen Sidescroller-Raumschiffs | 587 |
Abb. 9–107 Dreiecke und eine Ellipse: So designen wir den Raumgleiter eines gängigen Vertikalscrollers. | 587 |
9.4.5.1 Panel »Raumschiff« | 587 |
Abb. 9–108 Ein Ausgangspanel und zwei Variationen für den klassischen Retro-Shooter | 587 |
Abb. 9–109 Kanonen und Düsenantriebe | 588 |
9.4.5.2 Panel »Versuchslabor« | 589 |
Abb. 9–110 Konstruktion einer ekligen Versuchlaborumgebung | 589 |
Abb. 9–111 Der klassische »Alienlabor-Level« | 590 |
9.4.5.3 Panel »Felsplanet« | 590 |
Abb. 9–112 Die Entstehung eines Felsen | 590 |
9.4.5.4 Panel »Alienplanet« | 590 |
Abb. 9–113 Zwei Pinsel gestalten einen kompletten Level. | 591 |
Abb. 9–114 In vier Schritten zu Kaviarmatsche und Tentakeln | 591 |
Abb. 9–115 Borgen der Nachbarin garantiert kein Mehl: pflanzliche Bewohner des Alienplaneten | 592 |
9.4.5.5 Panel »Eiskristall« | 592 |
Abb. 9–116 In nur fünf einfachen Schritten zum Eisplaneten | 592 |
9.4.5.6 Panel »Elektro« | 593 |
Abb. 9–117 Elektropanels leicht gemacht | 593 |
9.4.6 Puzzlehintergründe | 594 |
9.4.6.1 Fraktale | 594 |
Abb. 9–118 Schnell spektakuläre Hintergründe mit dem Fraktal-Explorer erstellen | 595 |
9.4.6.2 Pinsel | 596 |
Abb. 9–119 Solche Effekte zaubern Sie mit den richtigen Pinseln. | 596 |
9.5 Titelbild | 596 |
9.5.1 Titelbildloser Titelscreen | 597 |
Abb. 9–120 Funktioniert super als Titelscreen: »The Little Jungle Sisters« im Demo-Modus mit zusätzlichem Schriftzug | 597 |
9.5.2 Titelbilder, wie sie sein müssen | 598 |
Abb. 9–121 Unsere Vorlage (Fotograf: Benjamin Miller) | 598 |
Abb. 9–122 Ohne Durchpausen geht nichts: Mit einem dicken Pinsel zeichnen wir die Strukturen des Gesichts nach. | 599 |
Abb. 9–123 Ausdünnen der Linien | 600 |
Abb. 9–124 Verfeinerung der Augenpartie | 600 |
Abb. 9–125 Schritte 4–6: Von der Skizze zur Kolorierung | 601 |
Abb. 9–126 Die schraffierten Hautpartien decken symbolisch den mittleren Schatten ab, Ohr und Hals sind die dunkelsten Stellen. | 602 |
Abb. 9–127 Schritte 7–9: Jetzt erledigen Filter den Rest für uns. | 603 |
Abb. 9–128 Schritte 10 und 11: Wir machen die Zeichnung etwas plastischer. | 603 |
Abb. 9–129 Als letztes Highlight: blaue Augen | 604 |
Abb. 9–130 Etwas arg überspitzt deformiert: unser Titelmädchen als eingebildete Zicke und mit bösen Hintergedanken | 605 |
9.6 Grafiken in Code einbinden | 605 |
9.6.1 Standardauflösung vs. Retina | 605 |
9.6.2 Ladescreen | 606 |
10 Bonuslevel: Sound FX/Music | 607 |
10.1 Musikproduktion | 607 |
10.1.1 Software | 608 |
10.1.1.1 Elektronische Musik | 608 |
10.1.1.2 MuLab 4.1 | 609 |
Abb. 10–1 Sieht kompliziert aus, ist aber total einfach: MuLab 4.1 | 609 |
Abb. 10–2 So präsentiert sich der Sequenzer zum Programmstart. | 610 |
Abb. 10–3 Aus der umfangreichen Bibliothek wählen wir das »EPianoGT«. | 610 |
Abb. 10–4 Wenn Ihnen das gewählte Instrument nicht gefällt, können Sie über die beiden Pfeile durch die gesamte Instrumentenbibliothek zappen. | 611 |
Abb. 10–5 Die Piano-Roll | 611 |
10.1.2 Virtuelle Instrumente | 612 |
Abb. 10–6 Das Plugin »Independence Free« beinhaltet u. a. hervorragende Gitarren. | 613 |
10.1.3 So spielen Sie keine falschen Töne | 614 |
10.1.3.1 Akkorde | 614 |
Abb. 10–7 Die schwarzen Tasten sind in Zweierblocks angeordnet. | 615 |
Abb. 10–8 Bildung eines Dur- und Moll-Akkords | 615 |
10.1.3.2 Tonleiter | 615 |
Abb. 10–9 Bei der Bestimmung der Noten einfach dem Alphabet folgen | 616 |
Abb. 10–10 Die doppelten Bezeichnungen der schwarzen Tasten | 617 |
10.1.3.3 Akkordfolgen | 617 |
Abb. 10–11 Die vier magischen Akkorde für ansprechende Game-Musik | 618 |
Abb. 10–12 Eine kleine Auswahl möglicher Begleitmelodien | 619 |
Abb. 10–13 Ein einfaches Begleitschema für die Akkordfolge C – F – G – C | 619 |
Abb. 10–14 Das Tempo kann einfach durch die Maustaste verändert werden. | 620 |
10.1.3.4 Rhythmik | 620 |
Abb. 10–15 Ein sehr einfacher Reggae-Rhythmus C – F – G – C (langer Balken = 2 kurze Balken) | 620 |
Abb. 10–16 Ein sehr einfacher Marsch C – F – G – C | 620 |
10.1.3.5 Percussion | 621 |
Abb. 10–17 C3: Kickdrum/B3: Snare Drum/G3 + A3: Tom Toms | 621 |
10.1.3.6 Bass | 621 |
10.1.3.7 Melodie | 622 |
Abb. 10–18 Die Tonleitern und die jeweils nicht zu verwendenden Noten/Tasten (samt Alternative) | 623 |
10.1.4 Jingles | 623 |
Abb. 10–19 »Alle meine Entchen« in C-Dur | 624 |
Abb. 10–20 »Alle meine Entchen« auf sieben Noten ergänzt | 624 |
Abb. 10–21 Wir bauen den Akkord auf Basis der letzten Melodienote. | 625 |
Abb. 10–22 Unsere einfache Jingle-Variation | 625 |
Abb. 10–23 Unser kompletter Jingle mit vier Spuren: SGbrasoft, SGtar, BoogieMoogie und Drumset | 626 |
10.1.5 Musik | 628 |
10.1.5.1 Reggae | 629 |
Abb. 10–24 Drumset als Reggae-Grundlage | 629 |
Abb. 10–25 Durch die »DiSar97«-Spur tritt das Reggae-Feeling deutlich hervor. | 629 |
Abb. 10–26 Die »Wow«-Spur | 630 |
10.1.5.2 Samba | 630 |
Abb. 10–27 Mit dem »GM Drumset« haben wir ein weiteres Schlagzeug im Programm. | 630 |
Abb. 10–28 Durch die Merengue-Trommeln bekommt die Samba ihren charakteristischen, südamerikanischen Klang. | 631 |
Abb. 10–29 Zu guter Letzt der Bass | 631 |
10.1.5.3 Elektro | 632 |
Abb. 10–30 »Fat Bass« und »Minor7th« | 632 |
Abb. 10–31 Die Techno-typische Betonung auf allen Taktschlägen | 632 |
10.1.5.4 Rap | 633 |
Abb. 10–32 Die einzelnen Instrumentenspuren für Old-School-Rap | 633 |
10.1.6 Sound FX | 633 |
10.1.6.1 Bibliothek | 634 |
10.1.6.2 Cfxr | 634 |
Abb. 10–33 Typische Gamesounds einfach mit Cfxr generieren | 635 |
10.1.6.3 Aufnahme | 635 |
10.1.7 Sounds für die App vorbereiten | 635 |
Abb. 10–34 Mit dem Tool »Switch Sound File Converter« bringen wir die Sounds in die App. | 636 |
10.2 Auftragsmusik | 637 |
10.3 Sound in Objective-C | 638 |
10.3.1 Dateiformate | 638 |
10.3.2 Cleveres Musikmanagement | 639 |
10.3.2.1 Atmosphäre erzeugen | 640 |
10.3.2.2 Loops | 640 |
10.3.3 Wiedergabe über Objective-C | 641 |
10.3.3.1 Sound FX | 642 |
Listing 10–1 Sound FX abspielen | 642 |
10.3.3.2 Hintergrundmusik | 643 |
Listing 10–2 MP3-Datei abspielen | 643 |
Listing 10–3 (BackgroundMusic) ViewController.h | 643 |
Listing 10–4 (BackgroundMusic) ViewController.m | 645 |
11 Hall of Fame | 647 |
11.1 Sehen Sie die Spieler an | 647 |
Abb. 11–1 Keine Frage, die Bälle mit Augen laden weitaus sympathischer zu einem Spiel ein. | 648 |
11.2 Helden mit Macken | 648 |
11.3 Pfeifkonzert | 649 |
11.4 Gefühlsduselei | 650 |
11.5 Öfter mal was Neues | 650 |
Abb. 11–2 Der Blockbuster »Tiny Wings« spielt jeden Tag in einem neuen Erscheinungsbild. | 651 |
11.6 Oster- und Mogelei | 652 |
11.7 Bescherung | 652 |
Listing 11–1 Ein Bild schenken | 653 |
11.8 Humor | 654 |
11.8.1 Slapstick | 654 |
11.8.2 Situationskomik | 654 |
Abb. 11–3 Tierisches Durcheinander sorgt für Situationskomik. | 655 |
11.8.3 Anspielungen, Hommagen, Zitate | 655 |
Abb. 11–4 Welcome-Back-Empfangskomitee | 656 |
11.9 Erschöpfung | 657 |
11.10 Blitzreinkarnation | 657 |
11.11 Kreative Sensoren | 658 |
Abb. 11–5 Spielen Sie mit den Sensoren. | 658 |
11.12 Kopierschutz | 659 |
Literaturverzeichnis | 661 |
Videospiele | 661 |
Kent, Steven L.: | 661 |
Gameplay und Spielideen | 661 |
Deutsch: | 661 |
Saltzman, Marc: | 661 |
Englisch: | 661 |
Schell, Jesse: | 661 |
Rogers, Scott: | 661 |
Perry, David: | 661 |
Links: | 662 |
»Game Design Dokumente Aufbau und Struktur«: | 662 |
»Digitale Spiele: Gams Design und das Design Document«: | 662 |
The »Core« of a Game: | 662 |
Example Blank Design Document: | 662 |
Game Design Document-Template: | 662 |
Objective-C | 662 |
Deutsch: | 662 |
Stäuble, Markus: | 662 |
Seelmann, Max: | 662 |
Spieleprogrammierung | 662 |
Deutsch: | 662 |
Steinke, Lennart: | 662 |
Luka, Thomas: | 662 |
Englisch: | 662 |
Bourg, David M.: | 662 |
Goldstein, Neal und Manning, Jon und Buttfield-Addison, Paris: | 662 |
Daley, Michael: | 662 |
Craft, Chris: | 663 |
Zirkle, Paul: | 663 |
Cocos2d | 663 |
Englisch: | 663 |
Itterheim, Steffen: | 663 |
Links: | 663 |
Cocos2d for iPhone: | 663 |
OpenGL ES 2.0 | 663 |
Englisch: | 663 |
Rideout, Philip: | 663 |
Grafik | 663 |
Deutsch: | 663 |
Lechner, Bettine K.: | 663 |
Howe, John: | 663 |
Englisch: | 663 |
nfgman: | 663 |
Fox, Brent: | 663 |
Tsai, Francis: | 663 |
Robinson, Craig: | 663 |
Mullen, Tony: | 663 |
Links: | 663 |
ImagineFX (Zeitschriften und Tutorials): | 663 |
Gimp: | 663 |
GIMP on OS X: | 664 |
Musik | 664 |
Deutsch: | 664 |
Kaiser, Carsten: | 664 |
Novy, Mike: | 664 |
Schmitt, Werner: | 664 |
Englisch: | 664 |
Hoffert, Paul: | 664 |
IV Childs, G. W.: | 664 |
Marks, Aaron: | 664 |
Links: | 664 |
Hofmann, Jan und Szczypula, Oliver: | 664 |
Krause, Benjamin: | 664 |
Index | 665 |