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()
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
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