Asteroids – Del 5

Inledning

Denna artikel är en direkt fortsättning på Asteroids - Del 4 . Nu är det dags att blanda in lite meteoriter i spelet.

Fler listor

Precis som med skotten så ska vi använda listor för att hålla reda på meteoriternas positioner och hastigheter. Samtidigt behöver vi en Random-variabel för att slumpa ut startpositionerna för meteoriterna.

Deklarera följande variabler:

Deklarering

        //Meteoriter
        Texture2D gfx_meteor;
        List<Vector2> meteor_pos = new List<Vector2>();
        List<Vector2> meteor_speed = new List<Vector2>();
        Random myRnd = new Random();

Som vanligt behövs det lite grafik. Ladda hem meteor.bmp nedan och placera den i din Content-mapp i projektkatalogen. Lägg även till filen i Solution Explorern.

bild

Skapa meteoriter

I metoden LoadContent() ska vi nu ladda in grafiken som vanligt men också skapa 10 meteoriter. Detta gör vi såklart med en loop:

Komplettering till LoadContent

            gfx_meteor = Content.Load<Texture2D>("meteor");
			
            for (int i = 0; i < 10; i++)
            {
                meteor_pos.Add(new Vector2(myRnd.Next(800), myRnd.Next(600)));
                double tmp_angle = (myRnd.Next(1000) * Math.PI * 2) / 1000.0;
                double tmp_speed = 0.5 + 3.0 * (myRnd.Next(1000) / 1000.0);
                meteor_speed.Add(new Vector2((float)(tmp_speed * Math.Cos(tmp_angle)),
                    (float)(tmp_speed * Math.Sin(tmp_angle))));
            }

Positionen slumpas mellan 0 och 799 i sidled och mellan 0 och 599 i höjdled. Hastigheten sätts ihop av en vinkel (tmp_angle) och fart (tmp_speed). För att slumpa decimala tal, t.ex. värden mellan 0.0 till 1.0 så får vi göra ett litet knep. Vi slumpar tall mellan 0 och 1000 och dividerar resultatet med 1000.0. Det är viktigt här att det står 1000.0 och inte bara 1000 för annars blir det en division mellan två heltal.

Vi ser till att hastigheten blir minst 0.5 och max 3.5 med samma metod för slump.

Uppdatera meteoriterna

I metoden Update() behöver vi loop'a igenom meteoriterna och förflytta dem. Samtidigt kan vi se till att de inte åker iväg i cyberrymden på samma sätt som vi gjorde med rymdskeppet i Asteroids - Del 3 .

Komplettering till Update

            for (int i = 0; i < meteor_pos.Count; i++)
            {
                meteor_pos[i] += meteor_speed[i];
                Vector2 v = meteor_pos[i];
                //Utanför skärmen?
                if (v.X < -80)
                    v.X = graphics.GraphicsDevice.Viewport.Width + 80;
                if (v.X > graphics.GraphicsDevice.Viewport.Width + 80)
                    v.X = -80;
                if (v.Y < -60)
                    v.Y = graphics.GraphicsDevice.Viewport.Height + 60;
                if (v.Y > graphics.GraphicsDevice.Viewport.Height + 60)
                    v.Y = -60;
                //Uppdatera i listan
                meteor_pos[i] = v;
            }

Rita ut meteoriterna

Sist men inte minst så måste vi uppdatera metoden Draw() så att meteoriterna ritas ut.

Komplettering till Draw

            for (int i = 0; i < meteor_pos.Count; i++)
            {
                spriteBatch.Draw(gfx_meteor, meteor_pos[i], null, Color.White, 0,
                    new Vector2(gfx_meteor.Width / 2, gfx_meteor.Height / 2), 1.0f, SpriteEffects.None, 0);
            }

bild

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Scroll to top