Bukatzen goaz...
Orain objektuak kodearen bidez sortzen ikasiko dugu.
Hasteko, tekla bat sakatzerakoan bola bat botatzen duen ZilchScript bat egingo dugu (ButtonSpawner) eta ondoren, automatikoki eta aldiro objektuak jaurtitzen dituen ZilchScript bat egingo dugu (TimedSpawner).
Gure jokuetan seguru erabiltzen ditugula, beraz ondo ulertu egiten duguna gero erabili eta egokitu ahal izateko zure beharrizanetara.
Lehenengoa, ButtonSpawner, gure jolaseko pertsonaiak tekla bat sakatzerakoan zerbait jaurtitzea nahi badugu erabiliko dugu eta bigarrena aldiz, etsaiek aldiro objektuak jaurti ditzaten erabiliko dugu.
Ariketa honetarako level berri bat sortuko dugu LEVEL5 izenekoa.
Bertan Jaurtitzailea izeneko sprite bat sortuko dugu. Karratu zuria izan daiteke momentuz eta (0,0,0) an kokatuta egongo da.
BolaGorria izeneko sprite bat ere sortuko dugu:
Sprite=> SpriteSource :Sphere
Sprite=>VertexColor: Gorria
Esleituko diogu Collider bat (Sphere Collider-a) eta RigidBody osagaiak.
Objektu hau Arketipo bihurtuko dugu.(Ikusi eskuineko irudia)
ButtonSpawner izeneko ZilchScripta idatziko dugu hau egiteko.
class ButtonSpawner : ZilchComponent
{
function Initialize(init : CogInitializer)
{
//Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
/* Objektu honek jasoko du teklatuak bidalitako KeyDown ebentua (Tekla bat sakatu dela adierazten duen mezua)eta OnKeyDown funtzioa exekutatuko du */
Zero.Connect(Zero.Keyboard, Events.KeyDown, this.OnKeyDown);
}//Initialize funtzioaren bukaera
function OnKeyDown(event : KeyboardEvent)
{
// Sakatutako tekla Espazioa bada...
if(event.Key == Keys.Space)
{
// Bilatu jaurtitzailearen posizioa eta gorde spawnPosition aldagaian
var spawnPosition = this.Owner.Transform.Translation;
// "BolaGorria" izeneko arketipoa gorde archetypeToSpawn aldagaian
var archetypeToSpawn = Archetype.BolaGorria;
/* Ondoko kodearen bidez, Space objektuari esaten zaio arketipo horretako elementu bat sor dezala esandako posizioan eta objektu berria createdBall aldagaian izango dugu*/
var createdBall = this.Space.CreateAtPosition(archetypeToSpawn, spawnPosition);
/* createdBall aldagaiaren bidez, sortutako objektuaren ezaugarriak aldatu ahal izango ditugu, adibidez, bere abiadura. Kontuz, BolaGorria arketipoak RigidBody osagaia izan behar du! */
createdBall.RigidBody.Velocity = Real3(0,10,0);//Gora!
}// if bukatu
} //OnKeyDown bukatu
function OnLogicUpdate(event : UpdateEvent)
{
}
}
Exekutatu (noski, Jaurtitzaileari scripta esleitu ondoren) eta ikusi nola funtzionatzen duen.
Bola gorri bat jaurti dezan espazio tekla sakatu beharko duzu.
TimedSpawner izeneko ZilchScripta idatziko dugu hau egiteko. Kasu honetan denbora kudeatu beharko dugu guk zehaztutako denbora pasatu ondoren jaurtiketa automatikoki egin dezan, teklarik sakatu gabe.
class TimedSpawner : ZilchComponent
{
//Kanpotik aukeratu ahal izango dugu zer jaurti behar duen
[Property]
var WhatToSpawn : Archetype = null;
function Initialize(init : CogInitializer)
{
// Kasu honetan, LogicUpdate ebentoa jaso eta OnLogicUpdate funtzioa exekutatuko da (segunduko 60 aldiz gutxigorabehera!)
Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
}
function OnLogicUpdate(event : UpdateEvent)
{
var spawnPosition = this.Owner.Transform.Translation;
//Ondoko komandoak jaurtiketa egingo du
this.Space.CreateAtPosition(this.WhatToSpawn, spawnPosition);
}
}
Aurreko bertsioan segunduko 60 objektu jaurtitzen zituen, ARINEGI!
Oraingoan denbora neurtzen joango gara eta SpawnTime izeneko propertyan zehaztutako segunduak pasatu direnean soilik egingo da jaurtiketa. Oso garrantzitsua ikustea nola egiten den denboraren kudeaketa, interesgarria izango da beste edozein kasutan denbora bat pasatu ondoren zerbait gertatzea nahi baduzu...
ALDAKETAK URDINEZ. Beharbada errezago kopiatzea kodea osorik eta aurreko kode osoa honekin ordezkatzea. Hori bai, saiatu zaitez kodea ulertzen!
class TimedSpawner : ZilchComponent
{
/*Kanpotik aukeratu ahal izango dugu zer jaurti behar duen*/
[Property]
var WhatToSpawn : Archetype = null;
[Property]
var SpawnTime : Real = 1.0; //Kanpotik aldatu ahal izango dugu honen balioa. Segunduetan dago.
//Aldagai honen bidez jaurtiketa batetik besterako denbora neurtzen joango gara
var TimeSinceLastSpawn : Real = 0.0;
function Initialize(init : CogInitializer)
{
// Kasu honetan, LogicUpdate ebentoa jaso eta OnLogicUpdate funtzioa exekutatuko da (segunduko 60 aldiz gutxigorabehera!) :
Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);
}
function OnLogicUpdate(event : UpdateEvent)
{
// Aurreko jaurtiketatik pasatutako denborari, pasatutakoa gehitu (Delta Time=Dt=1/60)
this.TimeSinceLastSpawn += event.Dt;
// SpawnTime denbora pasatu bada, jaurti bola
if (this.TimeSinceLastSpawn > this.SpawnTime)
{
var spawnPosition = this.Owner.Transform.Translation;
//Jaurtiketa egin
this.Space.CreateAtPosition(this.WhatToSpawn, spawnPosition);
// Jaurti ondoren, berriro denbora zeroan ipini edo reseteatu
this.TimeSinceLastSpawn = 0.0;
}
}
}
+ Egizuz beste bi arketipo. Beste bi jaurtitzaile sortu eta jaurtitzaile bakoitzak arketipo desberdina jaurti dezala. Lehenak segunduro, bigarrenak bi segunduro eta hirugarrenak hiru segunduro jaurti ditzatela objektuak. Niri erakutsi!
+ Aldaketak egizuez TimedSpawner ZilchScriptean jaurtitutako objektuaren hasierako abiadura property baten bidez konfiguratu ahal izateko.
+ Aldaketak egizuez ButtonSpawner ZilchScriptean konfiguragarria izan dadin(PROPERTY!) zer arketipo jaurtiko den espazio tekla sakatzerakoan eta baita jauritutako objektuaren hasierako abiadura. Askoz erabilgarria izango da!
EXTRA(edo +): eta.... nahi izango bagenu tekla bat sakatuz objektuak jaurtitzea norabide aleatorioetan? Ez aldatu ButtonSpawner. Egizu ZilchScript berri bat ButtonSpawnerRandom.
Hau EXTRA baten modura baloratuko dut baina soilik egiten duen lehenengoaren kasuan. Besteek positiboa jasoko duzue.
Aurrera jarraitu baino lehen, programatzen ibili garen bitartean egindako ZilchScript (eta bestelako elementuak) berrerabilgarriak esportatuko ditugu, gure ondoko proiektuetan inportatu eta erabili ahal izateko.
Horretarako, Resources=>Export ContentPackage sakatu.
Irekiko den leihoan ondoko datuak jarri:
Name: AbizenaIzena-ZS
Author: Izena Abizena (zurea, noski!)
Orain Library-tik arrastatu hona esportatu nahi dituzun objektuak, berreralbilgarriak direnak. Zilchscript guztiak aukeratu.
Bukatzeko Export Package botoia sakatu.
Fitxategiak .zeropack luzapena izango du. Igo ezazu Drivera, PROGRAMAZIOA=>ENTREGATU karpetara, gaurko azken backuparekin batera.