Anwendungsentwicklung mit dem Windows Phone 7 Anwendungen auf Basis von XNA IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
There are 10 to 20 times as many mobile phones as there are personal computers and 100 times as many as there are console platforms. As these things evolve into devices more like the media powerhouses we're used to developing for, there's a possibility we could have a breakout success there. John Carmack, November 2007 2
DirectX 3
Motivation für DirectX Bis Windows 95: Spiele fast ausschließlich für DOS programmiert Hardware wurde direkt angesprochen Im Grunde eigene Implementierung für jede Grafikkarte nötig Spiel hatte exklusiven Zugriff auf Hardware Nach Release von Windows 95: Spiele immer noch fast ausschließlich für DOS programmiert WinAPI als Zwischenschicht zu langsam DirectX 3.0 (1996) war erste erfolgreiche Version 4
DirectX Sammlung von APIs, die auf Multimedia und Spiele abzielen Implementiert als COM-Komponenten Zugriff auf Grafikkarte über einheitliches Interface Umgehung langsamer Windows-API-Komponenten GDI 5
Komponenten von DirectX DirectGraphics Zusammenführung der Komponenten DirectDraw & Direct3D DirectSound DirectInput Eingabe, ForceFeedback DirectPlay Multiplayer/Netzwerk API DirectShow Wiedergabe / Aufnahme von Videos/Sounds, inzwischen aber Teil der Windows API (somit nicht mehr wirklich DirectX) 6
XNA Managed DirectX und mehr 7
Was ist XNA? XNA steht für XNA is not an acronym Klassenbibliothek, die Vorhandenes kapselt... Graphics Audio Input... und Neues hinzufügt. Application Model Content Pipeline Basierend auf DirectX 9.0c und.net Compact Framewok 8
Schichten von XNA 9
.NET Compact Framework Konzipiert für mobile Geräte Teilmenge des.net Frameworks (ca. 30%) Kein ASP.NET, Remoting, Reflection... Fehlende Klassen in ansonsten unterstützten Namespaces,System.Collections.Generic.Hashset<T> Zusätzliche Funktionen Infrarotverbindungen Zusätzliche Steuerelemente Angepasste CLR Optimiert auf Speichernutzung und Akkulaufzeit 10
Warum XNA und nicht DirectX? Sehr ähnlicher Code läuft auf: 11
Application Model Wiederherstellen der Grafikkarte Grafikkarte geht in Lost State über, wenn z.b. die Orientierung des Bildschirms geändert wird Ressourcen müssen dann neu geladen werden Game Loop Implementiert in Microsoft.Xna.Framework.Game Game Components Game Services 12
Konzept: Game Loop Spiel läuft prinzipiell in einer endlosen Schleife: HandleInput(); UpdateGameState(); DrawGameState(); Was passiert, wenn man die Anweisungen einfach in while(gamerunning){} packt? 13
Konzept: Game Loop Lösung I Variable FPS: übergib seit Spielbeginn abgelaufene Zeit an Update() while (gamerunning) { Update(elapsedTime); Draw(); } 14
Konzept: Game Loop Lösung I Vorteil: konstante Spielgeschwindigkeit Nachteile Rundungsfehler addieren sich bei häufigen Update()-Aufrufen Große Sprünge in der Spielzeit bereiten manchen Physik-Engines Probleme Unterschiede im Spielablauf bei verschieden schnellen Rechnern Variable FPS in XNA: Game.IsFixedTimeStep = false; 15
Konzept: Game Loop Lösung II Constant FPS: Update() nur höchstens 1/StepSize mal pro Sekunde ausführen while (gamerunning) { } while(lastiterationtime + StepSize <= now) { Update(elapsedTime); lastiterationtime += StepSize; } Draw(); 16
Konzept: Game Loop Lösung II Vorteile Spielablauf auf allen Rechnern gleich elapsedtime annährend konstant Nachteile Rundungsfehler addieren sich bei häufigen Update()-Aufrufen Große Sprünge in der Spielzeit bereiten manchen Physik-Engines Probleme Unterschiede im Spielablauf bei verschieden schnellen Rechnern Variable FPS in XNA: Game.IsFixedTimeStep = false; 17
Konzept: Game Components Eigenständige und austauschbare Komponenten Zeichne FPS Spiele Sound ab Bewege Kamera uvm. Wird über Game.Components.Add registriert Initialize() und Update() werden automatisch aufgerufen Bei DrawableGameComponents auch Draw() Reihenfolge der Abarbeitung der Komponenten kann festgelegt werden 18
Konzept: Game Components Einige Komponenten stehen zum Download bereit Vorteil: einfaches Spiel kann aus vorgefertigten Komponenten zusammengebaut werden Nachteil: System nicht flexibel Komponenten werden immer nur einmal gezeichnet 19
Konzept: Game Services Wie kommunizieren die GameComponents miteinander? Game Services Jeder Game Service implementiert mindestens ein Service Interface Der Service wird mit seinem Interface in der Klasse Game registriert Game.Services.AddService(Type type, Object provider) Der Client lädt den Service Provider Game.Services.GetService(Type type) 20
Konzept: Game Services Vorteil: Komponenten müssen nur die Service Interfaces der anderen Komponenten kennen Vorteil: eine Klasse kann mehrere Service Interfaces implementieren Gliederung der öffentlichen Methoden und Properties nach Funktionalitätsbereich möglich Nachteil: unkontrollierte Nutzung der Services z. B. kann jede Klasse IGraphicsDeviceService nutzen und damit das GraphicsDevice beeinflussen 21
Konzept: Content Pipeline Im Spiel verwendeter Content durchläuft die Content Pipeline Nach Verarbeitung liegt Content als serialisiertes Objekt vor Vorgefertigte Verarbeitungsschritte für: 3D-Modelle (.fbx,.x) Bitmaps (.jpg,...) Sound (.wav,...) Content Pipeline ist erweiterbar 22
Konzept: Content Pipeline zur Kompilierzeit zur Laufzeit 23
24 Content Pipeline - Beispiel
25 Content Pipeline - Beispiel
26 Content Pipeline - Beispiel
27 Content Pipeline - Beispiel
28 Content Pipeline - Beispiel
Vorteile der Content Pipeline Content kann mit unterschiedlichen Tools erstellt werden Content kann speziell für Spiel angepasst werden Content ist typsicher Content kann schnell geladen werden 29