19.01.2012 - Software and Systems Engineering

9 downloads 1216 Views 533KB Size Report
Jan 19, 2012 ... Tools/Voraussetzungen für Spielentwicklung. ▫ Erste Schritte: Silverlight und XNA . ▫ XNA: 2D Grafik, Input, Sound, Musik. ▫ XNA: 3D Grafik.
Technische Universität München

Game Development 2 (Windows Phone) Proseminar Objektorientiertes Programmieren mit .NET und C# Igor Galochkin Institut für Informatik Software & Systems Engineering

Technische Universität München

Agenda §  §  §  §  §  §  §  § 

Allgemein zu Windows Phone Tools/Voraussetzungen für Spielentwicklung Erste Schritte: Silverlight und XNA XNA: 2D Grafik, Input, Sound, Musik XNA: 3D Grafik Game Engines Distribution & Sales Zukunft

19.01.2012

Igor Galochkin. Windows Phone Games Development

2

Technische Universität München

Allgemein zu Windows Phone §  Windows CE Familie §  Nachfolger von Windows Mobile (letzte Version 6.5.5), aber nicht rückwärtskompatibel §  Seit Oktober 2010 §  Mango Update §  GUI Design „Metro“ §  „Start Screen“ mit „Live Tiles“ (Links zu Apps) §  Windows Marketplace §  WindowsLive Account §  Zune Synch-Software §  Jailbreak: ChevronWP7 19.01.2012

Igor Galochkin. Windows Phone Games Development

3

Technische Universität München

Tools/Voraussetzungen für Spielentwicklung §  Mindestens Windows Vista (nicht Starter Edition), Windows XP geht nicht §  Für Emulator: Grafikkarte mit DirectX 10 §  Visual Studio 2010 (Express Edition) + Windows Phone Developer Tools (kostenlos) §  Windows Phone Developer Tools Update (Jan 2011) + Fix §  Windows Live Account (kostenlos) §  Echtes Device, z.B. HTC Mozart (auf ebay für 150 Euro, neues 300 Euro) §  Zune kostenlos herunterladen um Update zu installieren §  App Hub developer account für Windows Phone und X-Box Entwicklung ($99 pro Jahr) um auf physisches Device überhaupt installieren zu können und um auf Windows Marketplace Apps zu veröffentlichen –  Für US/Canada und auch Deutschland geht's frei für Studenten (muss auf DreamSpark Studentenstatus beweisen) –  Oder jailbreaken 19.01.2012

Igor Galochkin. Windows Phone Games Development

4

Technische Universität München

Erste Schritte §  XNA oder Silverlight? §  XNA: –  Direkter Zugriff auf Hardware → kann viel mehr Bilder pro Sekunde zeichnen –  Game Loop schon vorgegeben §  Silverlight: –  GUI Controls §  Seit Mango Update können in einer App kombiniert werden

19.01.2012

Igor Galochkin. Windows Phone Games Development

5

Technische Universität München

Erste Schritte (Silverlight)

19.01.2012

Igor Galochkin. Windows Phone Games Development

6

Technische Universität München

Silverlight Spiel §  Sehr einfaches Spiel –  Ihr seid Projekt Manager –  Computer ist der Programmierer –  Leider ist dieser Programmierer Bruder vom Geschäftsführer –  Ihr versucht mit dem Projekt weiter zu kommen –  Programmierer will nichts tun –  Ihr könnt ihn nicht feuern

19.01.2012

Igor Galochkin. Windows Phone Games Development

7

Technische Universität München

XNA Wrapper für DirectX Version 4.0 2D und 3D Grafik, Sound, Input Erlaubt relativ einfach XNA-basierte Spiele für Windows und Xbox auch auf Windows Phone zu portieren –  einiges doch fehlt auf Windows Phone –  keine Shader Programmierung (nur ein Paar vorgegebene Shaders) §  Fürs Management von Ressources erstellt XNA ein zusätzliches Projekt „Content“, wird vom Spielprojekt referenziert –  Kompiliert Ressourcen nur einmal –  HD Grafiken für Xbox oder Windows Versionen vom Spiel können in anderen Content Projekten abgelegt werden –  Content Projekte können von mehreren Spielen referenziert werden §  §  §  § 

19.01.2012

Igor Galochkin. Windows Phone Games Development

8

Technische Universität München

Erste Schritte (XNA Phone Game)

19.01.2012

Igor Galochkin. Windows Phone Games Development

9

Technische Universität München

XNA: Game Loop §  §  §  § 

Ziel: konstante Geschwindigkeit auf allen Geräten Trennung von reeler Zeit und Spielzeit Konzept vom Fixed Time Setup Wenn IsFixedTimeStep false: –  Update() und Draw() werden mit unterschiedlichen Zeitintervalen in Schleife aufgerufen (vergangene Zeit muss im Update z.B. beim Updaten von Position des Spielobjekt in Kalkulation einfließen) –  Pro: wird automatisch zu Refresh Rate angepasst. Auch auf langsamen Geräten –  Contra: Batterie unfreundlich, Tunneling bei Collision detection u.a.

19.01.2012

Igor Galochkin. Windows Phone Games Development

10

Technische Universität München

XNA: Game Loop (2) §  Wenn IsFixedTimeStep true (default): –  Update() wird exakt jede TargetElapsedTime Millisekunden aufgerufen –  Danach Draw() Aufruf wenn Update() gerade nicht läuft –  Danach bis zum nächsten Update Prozessor freigeben §  Problem: Update + Draw Zeit > TargetElapsedTime –  IsRunningSlowly zu true und kein Draw() –  Update() ständig aufrufen bis wieder ok –  Hoffnung dass Update + Update + Draw in 2 Frames passen §  Update kann nach IsRunningSlowly prüfen und ggf. weniger Sachen machen um schneller zu werden

19.01.2012

Igor Galochkin. Windows Phone Games Development

11

Technische Universität München

XNA: Sprites zeichnen §  Image Datei zum Projekt hinzufügen §  In LoadContent() als Texture2D laden texBall = Content.Load("ball"); §  Auch in LoadContent() spriteBatch initialisieren spriteBatch = new SpriteBatch(GraphicsDevice); §  In Draw() Sprite zwischen spriteBatch.Begin() und spriteBatch.End() zeichnen Vector2 pos = new Vector2(100, 100); spriteBatch.Begin(); spriteBatch.Draw(texBall, pos, Color.White); spriteBatch.End(); §  In Update() positionen und Animationszustand ändern §  BallSmasher Demo 19.01.2012

Igor Galochkin. Windows Phone Games Development

12

Technische Universität München

XNA: Transformationen von Sprites §  Unterschiedliche Versionen vom SpriteBatch.Draw() Methode erlauben: –  Nur einen Teil vom Sprite rendern –  Sprite rotieren (z.B. 35 Grad) –  Uniform oder Non-uniform skalieren –  Auch beim Skalieren Point of Origin setzen –  Skalieren um einen Rechteck mit dem Sprite zu füllen –  Color Tint – macht Grayscale Bild zu Schatten von benötigter Farbe (z.b. Blau). Nützlich um Units uterschiedlicher Fraktionen in Laufzeit zu färben oder weniger Sprites für ähnliche Gegner zu haben –  Beim Draw Aufruf kann auch Z-depth angeben (Layers), sonst werden Layers implizit von der Zeichnenreinfolge bestimmt –  Eine Farbe als trasparent betrachten (Color Key) –  Kann auch Sprites als Schriftart fürs Rendern vom Text benutzen 19.01.2012

Igor Galochkin. Windows Phone Games Development

13

Technische Universität München

XNA: Touches lesen §  Touches im Update() abfragen statt Callback implementieren! –  Bei 60 FPS sollte alle Taps merken –  Leichter als Event Handler zu implementieren TouchCollection touches = TouchPanel.GetState(); foreach (TouchLocation touch in touches){ … } §  Kann auch high-Level Gestures abfragen (Queue) while (TouchPanel.IsGestureAvailable) { GestureSample gesture = TouchPanel.ReadGesture(); switch (gesture.GestureType) { case GestureType.Tap: … 19.01.2012

Igor Galochkin. Windows Phone Games Development

14

Technische Universität München

XNA: Sounds §  Sound-Datein zum Contents Projekt hinzufügen §  MP3s in Properties->Content Prozessor von Song zu Sound Effect umschalten §  Leider werden alle Sounds als raw WAV ohne Kompression gespeichert §  In LoadContent() laden sfxNewBall = Content.Load("sfx_new_ball"); §  Play() §  Oder Play (volume, pitch, pan) –  Volume von 0.0 (silence) bis 1.0 (voll) relativ zu master Volume –  Pitch von -1 (1 Oktave niedriger) bis +1 (1 Oktave höher) –  Pan von -1 (nur linkes Micro) bis +1 (nur rechtes Micro)

19.01.2012

Igor Galochkin. Windows Phone Games Development

15

Technische Universität München

XNA: Music §  Nur MP3, kein OGG! §  Microsoft verlangt, dass das Spiel den Benutzer fragt ob er die Musik einschalten will weil er schon andere Musik im hintergrund hören kann §  Song in LoadContent() laden und abspielen §  MediaPlayer kann auch nicht verfügbar sein. if (MediaPlayer.GameHasControl) { songMenuLoop = Content.Load("menu_loop"); MediaPlayer.IsRepeating = true; MediaPlayer.Play(songMenuLoop); }

19.01.2012

Igor Galochkin. Windows Phone Games Development

16

Technische Universität München

XNA: 3D §  Class-basierter .NET Wrapper für Direct3D §  Um Färbiges Quadrat zu zeichnen: private BasicEffect effect; private VertexPositionColor[] vertices = new VertexPositionColor[4]; protected override void Initialize() { effect = new BasicEffect(GraphicsDevice); effect.LightingEnabled = false; effect.TextureEnabled = false; effect.VertexColorEnabled = true; float fAspectRatio = (float)GraphicsDevice.Viewport.Width / (float)GraphicsDevice.Viewport.Height; effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), fAspectRatio, 0.1f, 1000.0f); effect.View = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up); effect.World = Matrix.Identity; vertices[0].Position = new Vector3(-1, -1, 0); vertices[1].Position = new Vector3(-1, 1, 0); vertices[2].Position = new Vector3(1, -1, 0); vertices[3].Position = new Vector3(1, 1, 0); vertices[0].Color = Color.Red; vertices[1].Color = Color.Yellow; vertices[2].Color = Color.Blue; vertices[3].Color = Color.Green; base.Initialize(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); foreach (EffectPass pass in effect.CurrentTechnique.Passes) { pass.Apply(); GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, vertices, 0, 2); } base.Draw(gameTime); }

19.01.2012

Igor Galochkin. Windows Phone Games Development

17

Technische Universität München

XNA: 3D (2) §  Um Quadrat zu rotieren: –  In Update() angle updaten angle += MathHelper.ToRadians(5); –  In Draw() Wolrd-Matrix neu ausrechnen effect.World = Matrix.CreateRotationZ(angle); §  Texturen verwenden: –  Statt VertexPositionColor z.B. VertexPositionTexture –  Texturcoordinaten eingeben –  Textur zum Content Projekt hinfügen und in LoadConent() laden tex = Content.Load("fallbirch_leaf_m_diffuse"); –  In Draw() die Textur an Effekt anbinden –  Um nicht-Potenz 2 Texturen zu verwenden, Addressierung in SamplerState zu Clam setzen –  Ggf. Culling in RasterizerState ein/ausschalten usw. 19.01.2012

Igor Galochkin. Windows Phone Games Development

18

Technische Universität München

Game Engines für Windows Phone §  Unity unterstützt Windows Phone leider nicht: David Helgason, Unity Technologies CEO: "[WP7] is a relatively closed system so you can't run native content, which means we can't really support it. We could, in theory, do what we've done with Flash, which is to rewrite the engine so it works inside a non-native environment. So it could be done, in theory, but it's very much in theory because that would require a huge amount of work and uncertain results." §  Commercial level: SunBurn 2.0 ($150 indie, $300 pro, $1000 studio Lizenz) §  Andere (nicht viele eigentlich): –  Popfly –  Delta Engine –  Sectors –  Engine Nine

19.01.2012

Igor Galochkin. Windows Phone Games Development

19

Technische Universität München

Distribution & Sales §  App Hub developer account für Windows Phone und Xbox Entwicklung ($99 pro Jahr) um auf physisches Device überhaupt installieren zu können und um auf Windows Marketplace Apps zu veröffentlichen –  Für Studenten kostenlos §  Minimaler Preis von App $0.99, max $499.99 §  Approval Prozess §  Microsoft nimmt 30% von jeder Transaktion §  Geld wird an dem Developer ausgezahl erst wenn Gewinn $200 beträgt §  100 kostenlose Apps pro Entwlickler, dann $19.99 pro Submission §  Unbeschränkte Anzahl von kostenpflichtigen Apps pro Entwickler §  Integration mit Xbox über XboxLive (Games Hub). Spieler kan mit seinen Xbox-Freunden chatten, Highscore anschauen und auch Rund-basierte Spiele spielen

19.01.2012

Igor Galochkin. Windows Phone Games Development

20

Technische Universität München

Zukunft von Windows Phone §  Noch unklar (Stand Januar 2012) und aktiv diskutiert –  Kann 2012 auf den 3. Platz mit 5% (?) Marktanteil nach Android und iOS kommen (mit Blackberry und Symbian auf „Death spiral“) –  MS will zum 2015 auf dem 2. Platz nach Android sein §  Einige Argumente für Erfolg von Windows Phone: –  Leistungfähiges System (auf jeden Fall stärker als Android) –  Bessere Standartisierung als bei Android –  Kein iOS clone (Benutzer vermutlich langweilen sich schon mit iOS) –  Gute Entwicklungstools –  Riesiges Marketing Budget von Microsoft –  Noch nicht viele Entwicker (mehr Sales pro Entwickler) –  Vorteile aus XboxLive Integration, MS dominiert schon Desktop und TV

19.01.2012

Igor Galochkin. Windows Phone Games Development

21

Technische Universität München

Zukunft von Windows Phone (2) §  Einige Argumente genen Erfolg von Windows Phone: –  MS ist zu spät da und der Markt ist schon verteilt (?) –  Windows Phone ist ein „Me too“ Produkt und soll zuerst „be vastly superior“ zu iPhone und Android, was in den Augen des Benutzers nicht der Fall ist –  Es besteht die Gefahr dass die „kritische Masse“ von Apps nie erreicht wird (und ein Smartphone ohne Apps nutzlos wird) –  Schlechter Ruf von Microsoft, auch von spezifischen Produkten: Internet Explorer, Bing, Zune, Office, die ohne Nahmensänderung in Windows Phone gewandelt haben –  iPhone 5 und Android 4.0 kommen in 2012 –  Google und Apple haben auch riesiges Marketingkapital und generell besseres Image

19.01.2012

Igor Galochkin. Windows Phone Games Development

22

Technische Universität München

Zukunft von Windows Phone (3) §  Statistiken soweit (Stand Ende 2011): –  In ersten 12 Monaten nach Release geschätzt 1-2Mio Geräte an EndBenutzer verkauft (keine offizielle Daten von Microsoft seit Januar 2011) –  Jetziger geschätzter Marktanteil 1-2%, zusammen mit Windows Mobile 5-7% –  MS ist enttäuscht aber hat Hoffnung für 2012 –  Technisch progressiert schnell (Mango Update vieles besser gemacht) –  Schon 40k Apps auf Windows Marketplace (Wachstumsrate schneller als am Anfang bei Android war) –  Generell positive Reviews in Medien –  Aber Carriers (Telefonanbieter) fast weltweit bevorzugen Android –  Einkommen von Entwickler geschätzt im Durchschnit 8 mal höcher als auf iOS

19.01.2012

Igor Galochkin. Windows Phone Games Development

23

Technische Universität München

Vielen Dank! §  Fragen?

19.01.2012

Igor Galochkin. Windows Phone Games Development

24

Suggest Documents