2017-03-11

P3_HegazkinKontrolatzailea

P3_HegazkinKontrolatzailea

Esteka honetan sakatuz, ingelesez duzu azalduta antzeko adibide bat, non ezkerreko eta eskuineko gezien bidez spritea biratzen da eta gora eta behera sakatuz, spritea dagoen orientazioan aurrera edo atzera egiten duen. Hala ere, orri honetan aurkituzko duzu behar duzun guztia ariketa hau egiteko.

Sprite berri bat sartuko dugu jokuan.

Deskargatu ondoko irudia eta kargatu SpriteSource berri bat bezala:



Sprite hau kontrolatzeko script berria idatzi, P3_HegazkinKontrolatzailea,  eta noski, ez ahaztu script hori hegazkinarekin lotzea.

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!!!!)
Gorriz agertzen den kodea da aurreko programatik aldatzen dena. Kopiatu osorik eta ulertu!
_________________________________________________________________________________
function OnLogicUpdate(event : UpdateEvent)
   {
      // Bektore honetan, mugitu beharko dena gordeko dugu
      var movement = local 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))
      { 
movement += local 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: movement += local 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 += movement*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 hegazkeinari.

Orientation osagaia

(Informazio gehiago "Orientation" osagaiaren inguruan)

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 bat sartu beharko dugu:
   // GORANZKO GEZIA sakatuta badago...
     if (Zero.Keyboard.KeyIsDown(Keys.Up))
    {   // Record desired forward motion along the forward direction:
movement += forwardDirection; } // BEHERANZKO GEZIA sakatuta badago.... if (Zero.Keyboard.KeyIsDown(Keys.Down)) { // Record desired downward motion along the world y-axis: movement -= forwardDirection; }

Bukatzeko, alda ezazue Orientation.DefaultOrientationBases eta aukera ezazue ForwardYUpZ. (Gure hegazkinaren aurreranzko noranzkoa y ardatz positiboa izan dadin)

Exekutatu eta ikusi ea dena ondo doan.  Niri erakutsi amaituta daukazunean.

OHIKO ARAZOAK ETA KONPONBIDEAK
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,
       alda ezazue Orientation.DefaultOrientationBases eta aukera ezazue ForwardYUpZ, goian esan bezala...

Esteka honetan daukazue azalduta ingeleraz (FRAME BASED MOVEMENT ataletik aurrera) egin beharreko guztia. Bukaeran, Orientation osagaiaren konfigurazioaz hitz egiten du, beraz, hemen azaldutakoarekin ez baduzue lortzen hegazkina ondo mugitzea, kontsultatu bertan.


ALDAKETAK ZURE KABUZ

  1. 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 aldagai erabili (Abiadura eta RotationAngle ) eta kodean aldatu aurreko aldagaien izenak aldagai berrien izenekin. (this.)

Erakutsi niri nola funtzionatzen duen eta positiboa lortuko duzu!

aurrera (talkak lantzera)


iruzkinik ez:

Argitaratu iruzkina

Idatzi zure komentarioa. Laster argitaratuko dut. Mila esker!