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 feladat megfogalmazása: Í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.
-
Szerző neve: Kurucz Attila
-
Készítés éve: 2009
-
Használt fejlesztőkörnyezet: C#
A példaprogram kódja itt található:
xna_labda_pelda.zip
Space Fighter
-
A feladat megfogalmazása: Írjunk egy olyan programot, melyben egy űrhajót irányíthatunk. A háttérben mozogjon véletlenszerű elhelyezkedésről indulva egy véletlenszerű nagyságú bolygó. Bizonyos időközönként jelenjen meg egy ellenséges űrhajó, mely a pálya tetejéről tart a pálya alja felé. Meghatározott időközönként tüzeljesn lézerfegyverével. Ezeket az ellenséges űrhajókat kell kilőnünk, ha mi találjuk el az ellenséget vagy az minket, az eltalált űrhajó robbanás kíséretében semmisüljön meg.
-
Szerző neve: Ballagi - Pordány Dániel Árpád
-
Készítés éve: 2014
-
Használt fejlesztőkörnyezet: C#
A példaprogram kódja itt található:
Space Fighter