Bookmark and Share

Svårighetsgrad
Svårighetsgrad
Betyg (8 röster)
BetygBetygBetygBetygBetyg
 

Asteroids - Del 3

Inledning

Denna artikel är en direkt fortsättning på Asteroids - Del 2. Vi ska här få skeppet att röra på sig inom en begränsad yta samt skapa illusionen av att motorerna tänds.

Tänd raketerna

Det går att skapa en illusion av att motorerna tänds genom att rita ut grafik för detta bakom den grafik som vi ritar som rymdskeppet. Ladda hem texturen nedan och placera den i din Content mapp. Lägg även till den i Solution Explorern.

bild

Deklarera en bool för att hålla reda på om vi accelererar eller ej. Deklarera även en ny Texture2D variabel till vår nya textur.

Se til att vi även laddar in den nya grafiken i LoadContent().

Lägg till en extra if-sats i Update() för att kolla om vi trycker på pil upp knappen.

Vi avslutar nu med att ändra i Draw()-metoden. Om vi accelererar så ritar vi först ut raketerna, d v s grafiken från gfx_acc.

Testa nu!

bild

Rörelser och fysik

Rymdskeppet ska nu få en hastighet som flyttar skeppets position i den riktning hastigheten pekar. En lämlig variabeltyp för detta är Vector2 då vi kan lagra hastighet både i X- och Y-led samtidigt. Vi kallar denna variabel ship_speed.

Vi behöver ett värde på accelerationen för rymdskeppet. Vi kallar denna variabel ship_acc. Vi inför också en maxgräns för hur hög hastighet vårt rymdskepp kan ha, ship_max_speed.

Variablerna deklareras överst i programmet tillsammans med tidigare variabler.

Om vi accelererar (trycker pil upp) så ökar vi hastigheten med accelerationen i den riktning (angle) rymdspkeppet pekar. För att beräkna riktningen utifrån angle används Math.Cos() och Math.Sin() (rad 21-22 nedan).

På rad 23 görs ett test för att se om hastigheten har överskridit maxhastigheten som vi tidigare angav. Metoden Length() beräknar längden som utgörs av vektorns X- och Y-värde. Det är ett mått på hur långt skeppet flyttas oberoende av riktning.

Om hastigheten är för hög så normaliseras ship_speed. Detta innebär att längden på ship_speed räknas om till 1.0 samtidigt som riktningen behålls. Därefter multipliceras ship_speed med maxhastigheten (rad 26). Hastigheten blir därmed ship_max_speed.

Från exemplet ovan; mosvarigheten till

Är

Skeppet ska flyttas med hastigheten. På rad 34 så sker detta. += fungerar efter samma princip som *= fast då med addition.

Dags att testa igen!

Begränsad rörelse

Som du kanske märkt så kan du köra skeppet ut i cyberrymden och riskera att aldrig se det igen. Genom att införa extra kontroll på skeppets position i Update() så hindras skeppet från att åka för långt bort.

Är skeppet för långt till höger så teleporterar vi det tillbaka till vänster sida av skärmen. Är skeppet för långt nedanför, så tillbaka till överdelen av skärmen etc. etc.

Testa nu! Voila! Genast en känsla av Asteroids.

Viktiga begrepp

  • normaliseras/ eng. normalize

Kommentarer

1 inlägg