Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 68 Ad

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

Download to read offline

Prezentace z hands-on-labu o vývoji her v XNA, 20.3.2012 v Praze, viz http://vbnet.cz/blog-clanek--428-prezentace_a_materialy_z_hands_on_labu.aspx

Prezentace z hands-on-labu o vývoji her v XNA, 20.3.2012 v Praze, viz http://vbnet.cz/blog-clanek--428-prezentace_a_materialy_z_hands_on_labu.aspx

Advertisement
Advertisement

More Related Content

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

Advertisement

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

  1. 1. Vývoj her v XNA pro Windows Phone 7.5 Tomáš Slavíček mail@tomasslavicek.cz Twitter: @tomasslavicek
  2. 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
  3. 3. Windows Phone  motivace
  4. 4. Windows Phone  klíčová slova: Mango, Tango, Nokia
  5. 5. Budoucnost  Windows 8  WP Apollo
  6. 6. Marketplace CZ  přes 300 českých aplikací, 40 her
  7. 7. Podpora vývojářů  soutěž o Lumia 800 msdn.cz/nokia  soutěž s Mercedes-Benz  hackathony
  8. 8. Další akce  Nokia roadshow (dnes na Flóře)  přednáška o Silverlightu zítra 28. března 2012, 17:30
  9. 9. Webové zdroje  SmartMania.cz články  rozcestník – můj blog tomasslavicek.cz
  10. 10. Hry na Windows Phone
  11. 11. Hry na Windows Phone  ukázka…
  12. 12. Opakování XNA  kdo ještě nezná?   vývoj pro PC, mobil, Xbox 360  herní smyčka, Content Pipeline, SpriteBatch…
  13. 13. Opakování XNA  herní smyčka
  14. 14. Co budeme dělat?  začátek nové hry  obrázky:  bit.ly/xna_s2
  15. 15. Co budeme dělat?  začátek nové hry  obrázky:  bit.ly/xna_s2
  16. 16. Bylo minule…  orientace displeje  gesta na displeji  akcelerometr  pohyb objektů  základní kolize  text, Isolated Storage
  17. 17. Vykreslení obrázku  objekt Sprite  Vector2 Position  Vector2 Size  Texture2D Texture  LoadContent()  Draw()
  18. 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. 19. Obrázek i s rotací  parametry SpriteBatch.Draw() x
  20. 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. 21. „Tiled“ grafika  jeden obrázek  hra se skládá z jeho výřezů  optimalizace výkonu
  22. 22. „Tiled“ grafika  Tiled map editor mapeditor.com
  23. 23. Pohyb míčku  úhel a rychlost  vektor přírustku  odrážení od stěn  ElapsedGameTime.TotalMilliseconds
  24. 24. Kolize  bod vs. obdélník  rect1.Contains( point1 )  obdélník vs. obdélník  rect1.Intersects( rect2 )
  25. 25. Kolize  kruh vs. kruh ?
  26. 26. Kolize  kruh vs. kruh  vzdálenost středů < součet poloměrů  Vector2.Distance( center1, center2 ) < r1 + r2
  27. 27. Kolize  kruh vs. obdélník ?
  28. 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 )
  29. 29. Kolize  orientované obdélníky ?
  30. 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. 31. Separating axis theorem  orientované obdélníky  nutné testovat oba vzájemně
  32. 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. 33. Kolize  kruh vs. orientovaný obdélník ?
  34. 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. 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. 36. Ukázka v praxi  dokončení kolizí  odrážení míčku podle úhlu dopadu
  37. 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. 38. „Multitasking“ na WP  koncept Fast App Switching  agenti na pozadí + push notifikace
  39. 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. 40. Operace „na pozadí“  background audio / file transfer  Alarm, Reminder  PeriodicTask  ResourceIntesiveTask  nejsou u 256 MB telefonů  push notifikace
  41. 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í
  42. 42. Životní cyklus aplikace
  43. 43. Odpovídající události v XNA herní smyčka: Initialize LoadContent UnloadContent Update Draw
  44. 44. Odpovídající události v XNA herní smyčka: metody XNA: Initialize OnActivated LoadContent UnloadContent OnDeactivated Update OnExiting Draw
  45. 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
  46. 46. Životní cyklus aplikace
  47. 47. Životní cyklus hry
  48. 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. 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. 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. 51. Doporučení:  State Deactivated ulož stav Activated pokud z dormant:  nic nedělej pokud z tombstoned:  načti stav zpátky
  52. 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. 53. IsolatedStorageSettings  použití jako Dictionary  v namespace System.Windows
  54. 54. Serializace dat  uložení celého objektu  reference System.Runtime.Serialisation  serializace do souboru pomocí DataContractSerializer
  55. 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. 56. Co přinese Tango?  nové telefony (Lumia 610, ZTE Orbit / Mimosa…)  snížené minimální požadavky HW
  57. 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. 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. 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. 60. Aplikace v Tango  ověření, kolik má telefon RAM  místo PeriodicTask můžeme použít Push notifikace
  61. 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. 62. Aplikace v Tango  Memory profiler – dobré používat!  aktuální vytížení paměti lze zjistit i přímo z aplikace
  63. 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. 64. Silverlight + XNA  možnost propojení   i kombinace na 1 obrazovce  Silverlight = menu, XNA = herní část
  65. 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. 66. Navigační model  navigace přes QueryString  objekt NavigationService  NavigationService.Navigate(...)  NavigationContext.QueryString.TryGetValue(...)  nutné občas řešit „back stack“
  67. 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. 68. Webové zdroje  SmartMania.cz články  rozcestník – můj blog tomasslavicek.cz Tomáš Slavíček mail@tomasslavicek.cz Twitter: @tomasslavicek

×