Oraingoan hegazkin bat mugitzeko kodea programatuko dugu. Mugimendua teklatuaren bidez izango da baita, baina ezkerreko eta eskuineko teklekin biraraziko dugu eta gora eta beherako geziekin aurrera eta atzera egingo du.
Sprite berri bat sartuko dugu jokuan. Deskargatu ondoko irudia eta kargatu SpriteSource berri bat bezala eta Levelera arrastatu sprite berri bat izateko: ArrowShip
Sprite hau kontrolatzeko ZilchScript berria idatzi, HegazkinKontrolatzailea, eta noski, ez ahaztu script hori hegazkinari esleitzea.
Kasu honetan, hegazkinak aurrera eta atzera egingo du goranzko edo beheranzko geziak sakatzerakoan teklatuan eta biratuko du ezker edo eskuineranzko gezia sakatuz.
Kodea ez da beraz aurreko programatik asko aldatuko.
Hona hemen OnLogicUpdate funtzioan idatziko dugun kodea.
(Gogoratu Initialize funtzioan OnLogicUpdate funtzioa exekuta dadin, dagokion kode-lerroa deskomentatzea!!!)
Kopiatu koloredun fondoa duen testua , itsatsi OnLogicUpdate barruan eta saiatu ulertzen.
_________________________________________________________________________________
function OnLogicUpdate(event : UpdateEvent)
{
//Bektore honetan, mugitu beharko dena gordeko dugu
var mugimendua = Real3(0.0, 0.0, 0.0);
//Zein abiaduran mugituko den ondoko aldagaian zehaztuko dugu.
var abiadura = 20;
//Zenbatean eta zein ardatzaren inguruan egin behar duen bira bektore honetan prestatuko dugu.
//Kasu honetan, Z ardatzarekiko izango da biraketa. Radianetan adierazi behar da.
var rotationAngles = local Real3(0.0, 0.0, 0.0);
// Aldagai honetan, biratuko duen angelua (gradutan) definituko dugu.
var rotationAngle = 45.0;
// GORANZKO GEZIA sakatuta badago...
if (Zero.Keyboard.KeyIsDown(Keys.Up))
{
mugimendua += Real3(0.0, 1.0, 0.0);
}
// BEHERANZKO GEZIA sakatuta badago....
if (Zero.Keyboard.KeyIsDown(Keys.Down))
{
// Record desired downward motion along the world y-axis:
mugimendua += Real3(0.0, -1.0, 0.0);
}
// ESKUINEKO GEZIA SAKATUTA BADAGO
if (Zero.Keyboard.KeyIsDown(Keys.Right))
{
// Errotazio-bektorearen Z osagaiari angelua erradianetan kentzen zaio
rotationAngles.Z -= Math.ToRadians(rotationAngle);
}
// EZKERREKO GEZIA SAKATUTA BADAGO
if (Zero.Keyboard.KeyIsDown(Keys.Left))
{
//Errotazio-bektorearen Z osagaiari angelua erradianetan gehitzen zaio
rotationAngles.Z += Math.ToRadians(rotationAngle);
}
// Mugimendu-bektorean adierazitakoa MUGITU
this.Owner.Transform.Translation += mugimendua*event.Dt*abiadura;
// Errotazio-bektorean adierazitakoa BIRATU
this.Owner.Transform.RotateAnglesWorld(rotationAngles);
}
-----------------------------------------------------------------------------
Konturatuko zara hegazkinak bira egin ondoren, bere aurrera eta atzerako higidura ez direla guk espero dugun modukoak.
Berak gora eta behera egiten jarraitzen du eta ez bera begira dagoen noranzkoan aurrera eta atzera.
Hori konpontzeko Orientation deritzon osagaia esleitu beharko diogu gure hegazkinari.
Osagai hau esleituz, orain, this.Owner.Orientation.WorldForward ezaugarrian izango dugu une oro hegazkinaren orientazioaren bektore unitarioa, hau da , bektore bat, hegazkina nora begira dagoen adierazten duena.
Hori jasoko dugu hasieran forwardDirection aldagaian, eta mugitzeko, bere uneko posizioaren bektoreari (this.Owner.Transform.Translation) bektore hori batu edo kenduko diogu, horrela aurrera eta atzera pausu bat egingo duelarik.
Ondoko kodea, OnLogicUpdate funtzioan, aldagaien definizioen atalean idatzi, beste aldagaien ondoren:
// forwardDirection izeneko aldagaian, hegazkinaren noranzkoaren bektorea jaso
var forwardDirection = this.Owner.Orientation.WorldForward;
Eta noski, mugitzeko komandoan ere, aldaketatxo batzuk (GORRIZ) sartu beharko dugu:
// GORANZKO GEZIA sakatuta badago...
if (Zero.Keyboard.KeyIsDown(Keys.Up))
{
// Record desired forward motion along the forward direction:
mugimendua += forwardDirection;
}
// BEHERANZKO GEZIA sakatuta badago....
if (Zero.Keyboard.KeyIsDown(Keys.Down))
{
// Record desired backward motion along the forward direction:
mugimendua -= forwardDirection;
}
Aldaketa hauek eginda ere, froga egin eta hegazkina ez da mugituko aurrera eta atzera. Zein da arazoa????
Orientation osagaian ezaugarri bat egokitu beharko dugu: DefaultOrientationBases.
Hemen zehaztu behar diogu zein den gure spritearen berezko noranzkoa. Hegazkinaren kasuan bera gora begira dago, beraz, ForwardYUpZ aukeratuko dugu.
Hau egin ondoren hegazkina ondo mugituko da!
Ez al da mugitzen?
Gogoratu duzu script hau hegazkinari esleitzea?
Akatsen bat ematen badizu...
gogoratu duzu Orientation osagaia hezgazkinari esleitzea?
Ez badu akatsik ematen baina ez badio teklatuari erantzuten...
Gogoratu duzu Initialize funtzioan, Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate) komandoa deskomentatzea?
Hegazkinak ez badu aurrera eta atzera egiten, baina bai giratu...
konfigura ezazu Orientation osagaiko DefaultOrientationBases ezaugarria ForwardYUpZ balioa aukeratuz, goian esan bezala...
Hegazkinaren abiadura eta biraketa angelua Property bezala definituko dituzu, kanpotik konfiguratu ahal izateko
🛟Gure programan, abiadurak 20 balioa dauka eta biratzen ditu klik bakoitzean 45º. (abiadura eta rotationAngle aldagai lokalak erabiltzen dira datu horiek gordetzeko.) Aldagai horien ordez property modura definitutako bi klase-aldagai erabili (Abiadura eta RotationAngle ) eta kodean aldatu aurreko aldagaien izenak aldagai berrien izenekin. (ez ahaztu aurretik this.)
Erakutsi niri nola funtzionatzen duen eta positiboa lortuko duzu!