XNA

Példaprogramok

Pattogó labda

Írjunk egy labdás példaprogramot!
A kitűzött feladat, hogy egy labdát lehessen mozgatni.
A képernyő szélén pattanjon vissza és legyen gravitáció is.
Végül a labda mikor pattan legyen hangja is.

Labda kirajzolása

Elöször is LoadContent()-ben töltsük be a kirajzolandó képet, aminek az alfa csatornáját már beállítottuk.

protected override void LoadContent() { spriteBatch = new SpriteBatch(graphics.GraphicsDevice); ball = new GameObject(Content.Load("Sprites\\ball")); bounceSound = Content.Load("Audio\\bounce"); viewportRect = new Rectangle(0, 0,graphics.GraphicsDevice.Viewport.Width,graphics.GraphicsDevice.Viewport.Height); base.LoadContent(); ball.position = new Vector2(graphics.GraphicsDevice.Viewport.Width / 2, graphics.GraphicsDevice.Viewport.Height / 2); }

Labda mozgatása

Update()-ben írjuk a billentyűzeten lenyomott billentyűk kezelését. A labda elmozdulás vektor (velocity) értékét módosítjuk.

if (keyboardState.IsKeyDown(Keys.Left)) ball.velocity.X += -moveVelocity; if (keyboardState.IsKeyDown(Keys.Up)) ball.velocity.Y += -moveVelocity; if (keyboardState.IsKeyDown(Keys.Down)) ball.velocity.Y += moveVelocity; if (keyboardState.IsKeyDown(Keys.Right)) ball.velocity.X += moveVelocity;

Labda pattanás

Szintén az Update()-ba, ha a labda pozíciója kisebb mint nulla, akkor labda X irányú elmozdulás vektor irányát fordítsuk meg és amennyivel kiment balra a képernyőről annyival tegyük jobbra, hogy a labda a megfelelő helyre kerüljön. Ez természetesen csak a bal oldal pattanása.

if (ball.position.X < 0) { ball.position.X -= 2 * ball.position.X; ball.velocity.X *= -1; }

Gravitáció

Update()-ba. Itt valósítjuk meg a labda fizikáját. Labda Y irányú elmozdulás vektorát növeljük a gravitációval. Nem szeretnénk, hogy a labdánk össze vissza pattogjon, nem lenne túl életszerű. Szorozzuk meg a labda elmozdulás vektorát a lassulással. Az elmozdulás vektort adjuk hozzá a pozícióhoz, ekkor történik meg igazából a labda valódi elmozdulása.

ball.velocity.Y += ballGrav; ball.velocity *= ballSlow; ball.position += ball.velocity;

Hangok

Labdapattanás if-jébe írjuk. Számoljuk ki a labda elmozdulás vektorából a hangerőt. Természetesen a LoadContent-ben már includoltuk a lejátszandó hangot.

float soundVolume = Math.Abs(ball.velocity.Y) / 20.0f; bounceSound.Play(soundVolume);

FPS limit

Public Game1()-hez adjuk, hozzá a következő sorokat. Eddig limitált FPS-el futott a programunk. Másodpercenként 60-al, ezt most kivettük. Azt látjuk, hogy labdánk őrült mód megőrült és teljesen begyorsult, ami eddig 60-szor futott le az most annyiszor fut le másodpercenként ahányszor tud, csak a hardware-től függ hányszor. Ezért szükséges a már említett elapsedGameTime, hogy játékaink minden gépen, mind 30 FPS és mind 1200 FPS esetén is ugyan úgy fusson.

this.IsFixedTimeStep = false; graphics.SynchronizeWithVerticalRetrace = false;

Letöltés

A példaprogram kódja itt található:

xna_labda_pelda.zip

Space Fighter

A példaprogram kódja itt található:

Space Fighter