Vývoj her v XNA - seminář 2

Post on 05-Dec-2014

1,024 views 3 download

description

Prezentace z hands-on-labu vývoje her v XNA pro Windows Phone, prezentovaného v Brně 28.2.2012Zdrojové kódy + záznam z prezentace budou k dispozici brzy.Tomáš Slavíček

transcript

Vývoj her v XNApro Windows Phone 7.5 2.

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

Agenda

aktuální situace WP v ČR XNA – zopakování obrázky: rotované, animované…

pohyb, kolize ve 2D zvuky a hudba načítání a ukládání dat

Silverlight + XNA

Windows Phone

oficiálně v ČR od letošního září

Windows Phone

klíčová slova: Mango, Tango, Nokia

Budoucnost

Windows 8 WP Apollo

Marketplace CZ

přes 180 českých aplikací, 36 her

Marketplace CZ

přes 180 českých aplikací, 36 her

Marketplace

celosvětově >65 tisíc aplikací

Marketplace

nejvíce se kupují hry

Zkušenosti

hra Galaxy Jet

Zkušenosti

hra Galaxy Jet …a vaše zkušenosti?

Podpora vývojářů

soutěž o Lumia 800 msdn.cz/nokia

hackathony

Webové zdroje

SmartMania.cz články rozcestník – můj blog

tomasslavicek.cz

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: http://bit.ly/xna_3

Bylo minule…

orientace displeje gesta na displeji akcelerometr

text a lokalizace hry portace na PC

Vykreslení obrázku

objekt Sprite Vector2 Position Vector2 Size Texture2D Texture

LoadContent() Draw()

Obrázek i s rotací

objekt Sprite Vector2

Position Vector2 Size Texture2D

Texture

LoadContent() Draw()

RotatedSprite Vector2 Position Vector2

AnchorPoint float Rotation float Scale Texture2D Texture

LoadContent() Draw()x

Obrázek i s rotací

x

parametry SpriteBatch.Draw()

Animovaný obrázek

několik měnících se obrázků

objekt AnimatedSprite poděděný od Sprite

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žší bodod 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 stranou1. 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íkosově 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čímek němu střed kruhu

Zvuky a hudba

SoundEffect a SoundEffectInstance

MediaPlayer hudba na pozadí nutné kontrolovat, zda už nehraje jiná!

if (MediaPlayer.GameHasControl)

Isolated Storage

2 přístupy: IsolatedStorageSettings – kolekce

hodnot IsolatedStorageFile – soubory

data přežijí i vypnutí aplikace

IsolatedStorageSettings použití jako Dictionary

v namespace System.Windows

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éně hráče

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

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

nutné občas řešit „back stack“

Ukázka v praxi

hybridní projekt obrazovka menu + hra implementace „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íčekmail@tomasslavicek.cz Twitter: @tomasslavicek