SlideShare una empresa de Scribd logo
1 de 68
Vývoj her v XNA
pro Windows Phone 7.5




Tomáš Slavíček
mail@tomasslavicek.cz   Twitter: @tomasslavicek
Agenda
 přesné pozicování (otáčení)
 animace, tiled grafika, pohyb
 pokročilejší kolize ve 2D
 načítání z XML
 „multitasking“ na WP, tombstoning
 zvuky a hudba, „Tango“ telefony
 propojení Silverlight + XNA
Windows Phone
 motivace
Windows Phone
 klíčová slova: Mango, Tango, Nokia
Budoucnost
 Windows 8
 WP Apollo
Marketplace CZ
 přes 300 českých aplikací, 40 her
Podpora vývojářů
 soutěž o Lumia 800   msdn.cz/nokia
 soutěž s Mercedes-Benz
 hackathony
Další akce
 Nokia roadshow (dnes na Flóře)
 přednáška o Silverlightu
  zítra 28. března 2012, 17:30
Webové zdroje
 SmartMania.cz články
 rozcestník – můj blog tomasslavicek.cz
Hry na Windows Phone
Hry na Windows Phone
 ukázka…
Opakování XNA
 kdo ještě nezná? 
 vývoj pro PC, mobil, Xbox 360
 herní smyčka, Content Pipeline,
  SpriteBatch…
Opakování XNA
 herní smyčka
Co budeme dělat?
 začátek nové hry

 obrázky:
   bit.ly/xna_s2
Co budeme dělat?
 začátek nové hry

 obrázky:
   bit.ly/xna_s2
Bylo minule…
 orientace displeje
 gesta na displeji
 akcelerometr
 pohyb objektů
 základní kolize
 text, Isolated Storage
Vykreslení obrázku
 objekt Sprite
     Vector2 Position
     Vector2 Size
     Texture2D Texture
     LoadContent()
     Draw()
Obrázek i s rotací
 objekt Sprite            RotatedSprite
     Vector2 Position         Vector2 Position
     Vector2 Size             Vector2 AnchorPoint
     Texture2D Texture        float Rotation
                               float Scale
     LoadContent()
                               Texture2D Texture
     Draw()
                               Color Color
                               Draw()
      x
Obrázek i s rotací
 parametry SpriteBatch.Draw()
                             x
Animovaný obrázek
 několik měnících se obrázků
 objekt AnimatedSprite
     poděděný od RotatedSprite
     navíc: pole Textures
     upravené LoadContent()
               Draw()
„Tiled“ grafika
 jeden obrázek
 hra se skládá z jeho výřezů
     optimalizace výkonu
„Tiled“ grafika
 Tiled map editor   mapeditor.com
Pohyb míčku
 úhel a rychlost
    vektor přírustku
 odrážení od stěn


 ElapsedGameTime.TotalMilliseconds
Kolize
 bod vs. obdélník
     rect1.Contains( point1 )




 obdélník vs. obdélník
     rect1.Intersects( rect2 )
Kolize
 kruh vs. kruh ?
Kolize
 kruh vs. kruh
     vzdálenost středů <
      součet poloměrů
     Vector2.Distance(
        center1, center2 )
                  < r1 + r2
Kolize
 kruh vs. obdélník ?
Kolize
 kruh vs. obdélník
     najdu nejbližší bod
      od středu k obdélníku
     nesmí být menší,
      než poloměr


     Vector2.Clamp( v, min, max )
Kolize
 orientované obdélníky ?
Kolize
 orientované obdélníky
     Separating Axis Theorem


     za některou stranou
      1. obdélníku se musí
      nacházet všechny body 2.
Separating axis theorem
 orientované obdélníky
     nutné testovat oba vzájemně
Pozice bodu vůči přímce
 skalární součin
     Vector2.Dot( … )
     pro 2 normalizované
      vektory… v1.Normalize()
     >0 …úhel >90°
      <0 …     <90°
      =1 … rovnoběžné
     pozor na přehozenou osu Y
Kolize
 kruh vs. orientovaný obdélník ?
Kolize
 kruh vs. orientovaný obdélník
     pootočit souřadnice,
      aby byl obdélník
      osově srovnaný

     angle = Math.Atan2(
        point1.Y - point2.Y, point2.X - point1.X )

     Vector2.Transform( point,
         Matrix.CreateRotationZ( angle ))
Ukázka v praxi
 kruh vs. orientovaný obdélník
     obdélník máme už reprezentovaný
      správně = osově srovnaný
     posuneme/otočíme
      k němu střed kruhu
Ukázka v praxi
 dokončení kolizí
     odrážení míčku podle úhlu dopadu
Načítání levelu podle XML
 data v XML tagách
         <SpriteInfo X="20" Y="50„
           AssetName="obrazek" />


 streamové čtení
     XmlReader reader = XmlReader.Create(path)
     while (reader.Read())
           if (reader.NodeType == XmlNodeType.Element
            && reader.Name == "SpriteInfo")
„Multitasking“ na WP
 koncept Fast App Switching
 agenti na pozadí + push notifikace
S čím přišlo Mango
 pro vývojáře:
   „multitasking“
       Fast App Switching,
        background agents / audio / file transfers,
        push notifikace…

   Motion API… sockety…
   Silverlight + XNA
Operace „na pozadí“
 background audio / file transfer
 Alarm, Reminder
 PeriodicTask
 ResourceIntesiveTask
     nejsou u 256 MB telefonů

 push notifikace
PeriodicTask
 volána každých 30 až 40 min
 max. 15 sekund
 max. paměť: 6 MB
 nefunguje v Battery Save módu
 max. 10 služeb / zařízení
Životní cyklus aplikace
Odpovídající události v XNA
herní smyčka:
Initialize
LoadContent
UnloadContent
Update
Draw
Odpovídající události v XNA
herní smyčka:   metody XNA:
Initialize      OnActivated
LoadContent
UnloadContent
                OnDeactivated
Update          OnExiting
Draw
Odpovídající události v XNA
herní smyčka:   metody XNA:     PhoneApplicationService:

Initialize      OnActivated     Launching
LoadContent     OnDeactivated
UnloadContent
                                Activated
                OnExiting
Update                          Deactivated
Draw                            Closing
Životní cyklus aplikace
Životní cyklus hry
Tombstoning v XNA
 nevyužívat události          = pouze zobrazení / skrytí
                                 okna, ne WP chování
      this.Activated += …
      this.Deactivated += …

 řešení: PhoneApplicationService class
     reference na System.Windows + Microsoft.Phone
     using Microsoft.Phone.Shell;
     události appService.Launching, Activated,
                          Deactivated, Closing...
Uložení dat při tombstoningu
 Isolated Storage           = uložení nastavení hry,
     IsolatedStorageSettings skóre, odehraných levelů...
     IsolatedStorageFile

 State
     PhoneApplicationService.Current.State
            = uložení dočasného stavu rozehrané hry,
              otevřených obrazovek...
            = stav se využije při obnově z
              tombstoningu
Doporučení:
 Isolated Storage
     ulož vždy, když se
         změní hodnoty
     příp. v metodách
         Deactivated, Closing
     hodnoty zůstanou v paměti
      i po vypnutí aplikace
Doporučení:
 State
  Deactivated
    ulož stav
  Activated
    pokud z dormant:
        nic nedělej
    pokud z tombstoned:
       načti stav zpátky
Opakování
   hra může být ukončena buď v
    Closing nebo Deactivated
    (umře v tombstoned stavu)

   Activated se volá při návratu z
    dormant i z tombstoned stavu

   uvažujeme události z
    PhoneApplicationService,
    NE ty z XNA
IsolatedStorageSettings
 použití jako Dictionary
     v namespace System.Windows
Serializace dat
   uložení celého
    objektu

   reference
    System.Runtime.Serialisation


   serializace do
    souboru pomocí
    DataContractSerializer
Zvuky a hudba
 SoundEffect a SoundEffectInstance
 MediaPlayer
     hudba na pozadí
     nutné kontrolovat, zda už nehraje jiná!
         v Launching i v Activated

     if (MediaPlayer.GameHasControl)
Co přinese Tango?
 nové telefony (Lumia 610, ZTE Orbit / Mimosa…)
 snížené minimální požadavky HW
Minimální požadavky
   256 MB RAM
   < 8 GB paměti ROM
   slabší procesory (800 MHz)
   volitelný fotoaparát
 NE PeriodicTask a
    ResourceIntensiveTask

 displej stejný (800x480 pix)
Aplikace v Tango
 5% by prý zatím nefungovalo
     vývojáři už byli kontaktováni

 nové Windows Phone SDK 7.1.1
     nový emulátor
Aplikace v Tango
 NE PeriodicTask a
  ResourceIntensiveTask




 paměť: 90 MB na aplikaci (jako v Mango)
   ale jen 60 MB v paměti!
    (ostatní stránkováno)
Aplikace v Tango
 ověření, kolik má telefon RAM




 místo PeriodicTask můžeme
  použít Push notifikace
Optimalizace
 kvalita obrázků
   snížit rozlišení
   DXT komprese
   XNA: obejít Content Pipeline
 zvuky alokovat jen jednou
 nepoužívat „Page transitions“
 mapy/web otevírat mimo aplikace,
  nevykreslovat přímo uvnitř
Aplikace v Tango
 Memory profiler – dobré používat!




   aktuální vytížení paměti
    lze zjistit i přímo z aplikace
Mogade.com
 sdílení skóre, achievementy,
  online statistiky
 jednoduché API, přímo pro WP
 návod pro XNA mají na fóru


   pozor na speciální
    znaky ve jménu hráče
Silverlight + XNA
 možnost propojení
      i kombinace na 1 obrazovce

 Silverlight = menu, XNA = herní část
Silverlight + XNA
 vlastnosti:
     navigační model ze Silverlightu
     nejsou GameComponent, DrawableG.C.
     SharedGraphicsDeviceManager
     jiné předpisy metod Update(), Draw()…

     nepoužívat Mouse API, ale TouchCollection
Navigační model
 navigace přes QueryString
     objekt NavigationService
         NavigationService.Navigate(...)
         NavigationContext.QueryString.TryGetValue(...)

     nutné občas řešit „back stack“
Ukázka v praxi
 hybridní projekt
     obrazovka menu + hra
     implementace Initialize a LoadContent
     předání parametru
     další obrazovka – výhra
     oprava „back stacku“
     implementace pauzy ve hře
     + ukončení hry z XNA
Webové zdroje
 SmartMania.cz články
 rozcestník – můj blog tomasslavicek.cz




Tomáš Slavíček
mail@tomasslavicek.cz   Twitter: @tomasslavicek

Más contenido relacionado

Similar a Vyvíjíme hry v XNA pro Windows Phone – Seminář 2

Vyvíjíme hry v XNA pro Windows Phone – Seminář 1
Vyvíjíme hry v XNA pro Windows Phone – Seminář 1Vyvíjíme hry v XNA pro Windows Phone – Seminář 1
Vyvíjíme hry v XNA pro Windows Phone – Seminář 1Tomáš Slavíček
 
For Mobile 6/2012: Vývoj her pro Windows Phone
For Mobile 6/2012: Vývoj her pro Windows PhoneFor Mobile 6/2012: Vývoj her pro Windows Phone
For Mobile 6/2012: Vývoj her pro Windows PhoneTomáš Slavíček
 
Programování her v XNA pro Windows Phone 7
Programování her v XNA pro Windows Phone 7Programování her v XNA pro Windows Phone 7
Programování her v XNA pro Windows Phone 7Tomáš Slavíček
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Tomáš Kypta
 
Michal Kovařík: Multiplayer ve Factoriu
Michal Kovařík: Multiplayer ve FactoriuMichal Kovařík: Multiplayer ve Factoriu
Michal Kovařík: Multiplayer ve FactoriuDevelcz
 
Řečové technologie ve věku zlaté horečky DNN
Řečové technologie ve věku zlaté horečky DNNŘečové technologie ve věku zlaté horečky DNN
Řečové technologie ve věku zlaté horečky DNNYtica
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceMartin Cerveny
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and TabletTomáš Kypta
 
React premature performance optimization
React premature performance optimizationReact premature performance optimization
React premature performance optimizationMartinKritof1
 
Android - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAndroid - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAvast Software
 
GDS 2013: MonoGame pro Android a iOS, tipy a triky
GDS 2013: MonoGame pro Android a iOS, tipy a trikyGDS 2013: MonoGame pro Android a iOS, tipy a triky
GDS 2013: MonoGame pro Android a iOS, tipy a trikyTomáš Slavíček
 
Strasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikacíStrasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikacíRené Stein
 
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)Tomáš Slavíček
 
Petr Zadražil: TensorFlow v mobilních aplikacích
Petr Zadražil: TensorFlow v mobilních aplikacíchPetr Zadražil: TensorFlow v mobilních aplikacích
Petr Zadražil: TensorFlow v mobilních aplikacíchmdevtalk
 
Stručný přehled OpenGL
Stručný přehled OpenGLStručný přehled OpenGL
Stručný přehled OpenGLJiri Danihelka
 

Similar a Vyvíjíme hry v XNA pro Windows Phone – Seminář 2 (19)

Vyvíjíme hry v XNA pro Windows Phone – Seminář 1
Vyvíjíme hry v XNA pro Windows Phone – Seminář 1Vyvíjíme hry v XNA pro Windows Phone – Seminář 1
Vyvíjíme hry v XNA pro Windows Phone – Seminář 1
 
For Mobile 6/2012: Vývoj her pro Windows Phone
For Mobile 6/2012: Vývoj her pro Windows PhoneFor Mobile 6/2012: Vývoj her pro Windows Phone
For Mobile 6/2012: Vývoj her pro Windows Phone
 
Programování her v XNA pro Windows Phone 7
Programování her v XNA pro Windows Phone 7Programování her v XNA pro Windows Phone 7
Programování her v XNA pro Windows Phone 7
 
App Engine Kick Start
App Engine Kick StartApp Engine Kick Start
App Engine Kick Start
 
Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013Programování pro Android - úvod, FI MUNI, 2013
Programování pro Android - úvod, FI MUNI, 2013
 
Michal Kovařík: Multiplayer ve Factoriu
Michal Kovařík: Multiplayer ve FactoriuMichal Kovařík: Multiplayer ve Factoriu
Michal Kovařík: Multiplayer ve Factoriu
 
Řečové technologie ve věku zlaté horečky DNN
Řečové technologie ve věku zlaté horečky DNNŘečové technologie ve věku zlaté horečky DNN
Řečové technologie ve věku zlaté horečky DNN
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTrace
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and Tablet
 
React premature performance optimization
React premature performance optimizationReact premature performance optimization
React premature performance optimization
 
Android - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAndroid - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagace
 
GDS 2013: MonoGame pro Android a iOS, tipy a triky
GDS 2013: MonoGame pro Android a iOS, tipy a trikyGDS 2013: MonoGame pro Android a iOS, tipy a triky
GDS 2013: MonoGame pro Android a iOS, tipy a triky
 
Strasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikacíStrasti a slasti vývoje wp7 aplikací
Strasti a slasti vývoje wp7 aplikací
 
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)
Vývoj her v C# pro Windows 8 (MonoGame, MS Fest)
 
Java 2D a kreslení
Java 2D a kresleníJava 2D a kreslení
Java 2D a kreslení
 
Petr Zadražil: TensorFlow v mobilních aplikacích
Petr Zadražil: TensorFlow v mobilních aplikacíchPetr Zadražil: TensorFlow v mobilních aplikacích
Petr Zadražil: TensorFlow v mobilních aplikacích
 
Stručný přehled OpenGL
Stručný přehled OpenGLStručný přehled OpenGL
Stručný přehled OpenGL
 

Más de Tomáš Slavíček

Jak prodávat a propagovat mobilní aplikaci
Jak prodávat a propagovat mobilní aplikaciJak prodávat a propagovat mobilní aplikaci
Jak prodávat a propagovat mobilní aplikaciTomáš Slavíček
 
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš Slavíček
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš SlavíčekUX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš Slavíček
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš SlavíčekTomáš Slavíček
 
UX Monday: Easy Phone - telefon pro seniory, Tomáš Slavíček
UX Monday: Easy Phone - telefon pro seniory, Tomáš SlavíčekUX Monday: Easy Phone - telefon pro seniory, Tomáš Slavíček
UX Monday: Easy Phone - telefon pro seniory, Tomáš SlavíčekTomáš Slavíček
 
Fotografické API a rozšířená realita pro Windows Phone
Fotografické API a rozšířená realita pro Windows PhoneFotografické API a rozšířená realita pro Windows Phone
Fotografické API a rozšířená realita pro Windows PhoneTomáš Slavíček
 
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a Android
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a AndroidMS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a Android
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a AndroidTomáš Slavíček
 
[cz] MonoGame framework, mDevCamp 2013
[cz] MonoGame framework, mDevCamp 2013[cz] MonoGame framework, mDevCamp 2013
[cz] MonoGame framework, mDevCamp 2013Tomáš Slavíček
 

Más de Tomáš Slavíček (7)

Jak prodávat a propagovat mobilní aplikaci
Jak prodávat a propagovat mobilní aplikaciJak prodávat a propagovat mobilní aplikaci
Jak prodávat a propagovat mobilní aplikaci
 
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš Slavíček
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš SlavíčekUX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš Slavíček
UX - MS Fest 2014 - Navrhujeme aplikace pro lidi, ne pro sebe - Tomáš Slavíček
 
UX Monday: Easy Phone - telefon pro seniory, Tomáš Slavíček
UX Monday: Easy Phone - telefon pro seniory, Tomáš SlavíčekUX Monday: Easy Phone - telefon pro seniory, Tomáš Slavíček
UX Monday: Easy Phone - telefon pro seniory, Tomáš Slavíček
 
Easy phone
Easy phoneEasy phone
Easy phone
 
Fotografické API a rozšířená realita pro Windows Phone
Fotografické API a rozšířená realita pro Windows PhoneFotografické API a rozšířená realita pro Windows Phone
Fotografické API a rozšířená realita pro Windows Phone
 
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a Android
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a AndroidMS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a Android
MS Fest 2013: Vývoj her v C# a MonoGame pro WP, iOS a Android
 
[cz] MonoGame framework, mDevCamp 2013
[cz] MonoGame framework, mDevCamp 2013[cz] MonoGame framework, mDevCamp 2013
[cz] MonoGame framework, mDevCamp 2013
 

Vyvíjíme hry v XNA pro Windows Phone – Seminář 2

  • 1. Vývoj her v XNA pro Windows Phone 7.5 Tomáš Slavíček mail@tomasslavicek.cz Twitter: @tomasslavicek
  • 2. Agenda  přesné pozicování (otáčení)  animace, tiled grafika, pohyb  pokročilejší kolize ve 2D  načítání z XML  „multitasking“ na WP, tombstoning  zvuky a hudba, „Tango“ telefony  propojení Silverlight + XNA
  • 4. Windows Phone  klíčová slova: Mango, Tango, Nokia
  • 6. Marketplace CZ  přes 300 českých aplikací, 40 her
  • 7. Podpora vývojářů  soutěž o Lumia 800 msdn.cz/nokia  soutěž s Mercedes-Benz  hackathony
  • 8. Další akce  Nokia roadshow (dnes na Flóře)  přednáška o Silverlightu zítra 28. března 2012, 17:30
  • 9. Webové zdroje  SmartMania.cz články  rozcestník – můj blog tomasslavicek.cz
  • 10. Hry na Windows Phone
  • 11. Hry na Windows Phone  ukázka…
  • 12. Opakování XNA  kdo ještě nezná?   vývoj pro PC, mobil, Xbox 360  herní smyčka, Content Pipeline, SpriteBatch…
  • 14. Co budeme dělat?  začátek nové hry  obrázky:  bit.ly/xna_s2
  • 15. Co budeme dělat?  začátek nové hry  obrázky:  bit.ly/xna_s2
  • 16. Bylo minule…  orientace displeje  gesta na displeji  akcelerometr  pohyb objektů  základní kolize  text, Isolated Storage
  • 17. Vykreslení obrázku  objekt Sprite  Vector2 Position  Vector2 Size  Texture2D Texture  LoadContent()  Draw()
  • 18. Obrázek i s rotací  objekt Sprite  RotatedSprite  Vector2 Position  Vector2 Position  Vector2 Size  Vector2 AnchorPoint  Texture2D Texture  float Rotation  float Scale  LoadContent()  Texture2D Texture  Draw()  Color Color  Draw() x
  • 19. Obrázek i s rotací  parametry SpriteBatch.Draw() x
  • 20. Animovaný obrázek  několik měnících se obrázků  objekt AnimatedSprite  poděděný od RotatedSprite  navíc: pole Textures  upravené LoadContent() Draw()
  • 21. „Tiled“ grafika  jeden obrázek  hra se skládá z jeho výřezů  optimalizace výkonu
  • 22. „Tiled“ grafika  Tiled map editor mapeditor.com
  • 23. Pohyb míčku  úhel a rychlost  vektor přírustku  odrážení od stěn  ElapsedGameTime.TotalMilliseconds
  • 24. Kolize  bod vs. obdélník  rect1.Contains( point1 )  obdélník vs. obdélník  rect1.Intersects( rect2 )
  • 26. Kolize  kruh vs. kruh  vzdálenost středů < součet poloměrů  Vector2.Distance( center1, center2 ) < r1 + r2
  • 27. Kolize  kruh vs. obdélník ?
  • 28. Kolize  kruh vs. obdélník  najdu nejbližší bod od středu k obdélníku  nesmí být menší, než poloměr  Vector2.Clamp( v, min, max )
  • 30. Kolize  orientované obdélníky  Separating Axis Theorem  za některou stranou 1. obdélníku se musí nacházet všechny body 2.
  • 31. Separating axis theorem  orientované obdélníky  nutné testovat oba vzájemně
  • 32. Pozice bodu vůči přímce  skalární součin  Vector2.Dot( … )  pro 2 normalizované vektory… v1.Normalize()  >0 …úhel >90° <0 … <90° =1 … rovnoběžné  pozor na přehozenou osu Y
  • 33. Kolize  kruh vs. orientovaný obdélník ?
  • 34. Kolize  kruh vs. orientovaný obdélník  pootočit souřadnice, aby byl obdélník osově srovnaný  angle = Math.Atan2( point1.Y - point2.Y, point2.X - point1.X )  Vector2.Transform( point, Matrix.CreateRotationZ( angle ))
  • 35. Ukázka v praxi  kruh vs. orientovaný obdélník  obdélník máme už reprezentovaný správně = osově srovnaný  posuneme/otočíme k němu střed kruhu
  • 36. Ukázka v praxi  dokončení kolizí  odrážení míčku podle úhlu dopadu
  • 37. Načítání levelu podle XML  data v XML tagách  <SpriteInfo X="20" Y="50„ AssetName="obrazek" />  streamové čtení  XmlReader reader = XmlReader.Create(path)  while (reader.Read())  if (reader.NodeType == XmlNodeType.Element && reader.Name == "SpriteInfo")
  • 38. „Multitasking“ na WP  koncept Fast App Switching  agenti na pozadí + push notifikace
  • 39. S čím přišlo Mango  pro vývojáře:  „multitasking“  Fast App Switching, background agents / audio / file transfers, push notifikace…  Motion API… sockety…  Silverlight + XNA
  • 40. Operace „na pozadí“  background audio / file transfer  Alarm, Reminder  PeriodicTask  ResourceIntesiveTask  nejsou u 256 MB telefonů  push notifikace
  • 41. PeriodicTask  volána každých 30 až 40 min  max. 15 sekund  max. paměť: 6 MB  nefunguje v Battery Save módu  max. 10 služeb / zařízení
  • 43. Odpovídající události v XNA herní smyčka: Initialize LoadContent UnloadContent Update Draw
  • 44. Odpovídající události v XNA herní smyčka: metody XNA: Initialize OnActivated LoadContent UnloadContent OnDeactivated Update OnExiting Draw
  • 45. Odpovídající události v XNA herní smyčka: metody XNA: PhoneApplicationService: Initialize OnActivated Launching LoadContent OnDeactivated UnloadContent Activated OnExiting Update Deactivated Draw Closing
  • 48. Tombstoning v XNA  nevyužívat události = pouze zobrazení / skrytí okna, ne WP chování this.Activated += … this.Deactivated += …  řešení: PhoneApplicationService class  reference na System.Windows + Microsoft.Phone  using Microsoft.Phone.Shell;  události appService.Launching, Activated, Deactivated, Closing...
  • 49. Uložení dat při tombstoningu  Isolated Storage = uložení nastavení hry,  IsolatedStorageSettings skóre, odehraných levelů...  IsolatedStorageFile  State  PhoneApplicationService.Current.State = uložení dočasného stavu rozehrané hry, otevřených obrazovek... = stav se využije při obnově z tombstoningu
  • 50. Doporučení:  Isolated Storage  ulož vždy, když se změní hodnoty  příp. v metodách Deactivated, Closing  hodnoty zůstanou v paměti i po vypnutí aplikace
  • 51. Doporučení:  State Deactivated ulož stav Activated pokud z dormant:  nic nedělej pokud z tombstoned:  načti stav zpátky
  • 52. Opakování  hra může být ukončena buď v Closing nebo Deactivated (umře v tombstoned stavu)  Activated se volá při návratu z dormant i z tombstoned stavu  uvažujeme události z PhoneApplicationService, NE ty z XNA
  • 53. IsolatedStorageSettings  použití jako Dictionary  v namespace System.Windows
  • 54. Serializace dat  uložení celého objektu  reference System.Runtime.Serialisation  serializace do souboru pomocí DataContractSerializer
  • 55. Zvuky a hudba  SoundEffect a SoundEffectInstance  MediaPlayer  hudba na pozadí  nutné kontrolovat, zda už nehraje jiná!  v Launching i v Activated  if (MediaPlayer.GameHasControl)
  • 56. Co přinese Tango?  nové telefony (Lumia 610, ZTE Orbit / Mimosa…)  snížené minimální požadavky HW
  • 57. Minimální požadavky  256 MB RAM  < 8 GB paměti ROM  slabší procesory (800 MHz)  volitelný fotoaparát  NE PeriodicTask a ResourceIntensiveTask  displej stejný (800x480 pix)
  • 58. Aplikace v Tango  5% by prý zatím nefungovalo  vývojáři už byli kontaktováni  nové Windows Phone SDK 7.1.1  nový emulátor
  • 59. Aplikace v Tango  NE PeriodicTask a ResourceIntensiveTask  paměť: 90 MB na aplikaci (jako v Mango)  ale jen 60 MB v paměti! (ostatní stránkováno)
  • 60. Aplikace v Tango  ověření, kolik má telefon RAM  místo PeriodicTask můžeme použít Push notifikace
  • 61. Optimalizace  kvalita obrázků  snížit rozlišení  DXT komprese  XNA: obejít Content Pipeline  zvuky alokovat jen jednou  nepoužívat „Page transitions“  mapy/web otevírat mimo aplikace, nevykreslovat přímo uvnitř
  • 62. Aplikace v Tango  Memory profiler – dobré používat!  aktuální vytížení paměti lze zjistit i přímo z aplikace
  • 63. Mogade.com  sdílení skóre, achievementy, online statistiky  jednoduché API, přímo pro WP  návod pro XNA mají na fóru  pozor na speciální znaky ve jménu hráče
  • 64. Silverlight + XNA  možnost propojení   i kombinace na 1 obrazovce  Silverlight = menu, XNA = herní část
  • 65. Silverlight + XNA  vlastnosti:  navigační model ze Silverlightu  nejsou GameComponent, DrawableG.C.  SharedGraphicsDeviceManager  jiné předpisy metod Update(), Draw()…  nepoužívat Mouse API, ale TouchCollection
  • 66. Navigační model  navigace přes QueryString  objekt NavigationService  NavigationService.Navigate(...)  NavigationContext.QueryString.TryGetValue(...)  nutné občas řešit „back stack“
  • 67. Ukázka v praxi  hybridní projekt  obrazovka menu + hra  implementace Initialize a LoadContent  předání parametru  další obrazovka – výhra  oprava „back stacku“  implementace pauzy ve hře  + ukončení hry z XNA
  • 68. Webové zdroje  SmartMania.cz články  rozcestník – můj blog tomasslavicek.cz Tomáš Slavíček mail@tomasslavicek.cz Twitter: @tomasslavicek