In deze tutorial ga je leren hoe je dingen kan bewegen of roteren
als je deze tutorial leest, veronderstel ik dat je
Deze tutorial ook hebt gelezen.
Heb je dit niet gedaan, raad ik sterk aan om dit eerst wel te doen (tenzij je de basis van het scripten al kent, maar dan las je dit niet ;-) )
Om dingen in je map te laten bewegen (wat dan ook) moeten we een simpel scriptje samestellen.
in onze thread (die ik
blokje1 ga noemen) moeten we eerst en vooral onze entities aangeven (zie:
Deze Tutorial )
natuurlijk komt hier ook een while loop bij(tenzij je wil dat het script maar 1 keer kan uitgevoerd worden, of de thread meerdere keren aangeroepen wordt,...)
vervolgens laten we het wachten tot de speler in een trigger loopt.
blokje1()
{
blokje_trig = getent("blokje","targetname");
blokje = getent(blokje_trig.target,"targetname");
while(1)
{
blokje_trig waittill("trigger",player);
nu hebben we een waaier van opties, allereerste kun je jou blokje naar een stel coördinaten laten bewegen.
Coördinaten kan je vinden door in radiant te kijken, of nog simpeler door in call of duty /viewpos in je console te doen
dan zou je zoiets moeten krijgen (500,300,100) ; 52
die 52 kan je vergeten, alles wat we nodig hebben is dat wat tussen haakjes staat
coördinaten worden voorgesteld als (
X,
Y,
Z)
dus zo: (
500,
300,
100)
doordat we ingame /viewpos hebben gebruikt hebben we niet de exacte hoogte. speel hier een beetje mee.
je kan natuurlijk altijd eerst ingame kijken wat het doet, dan een beetje met de coordinaten spelen, tot je de gewenste positie hebt bereikt.
om ons blokje naar coordinaten te laten bewegen gebruiken we deze functie:
blokje moveTo((500,300,100),Tijd);
"
Tijd" vertegenwoordigd het aantal seconden dat "blokje" erover doet om zich naar die coördinaten te bewegen.
we kunnen ook ons blokje over 1 as laten bewegen (X-as, Y-as of Z-as)
dit doen we zo:
blokje moveX(units, tijd);
blokje moveY(units, tijd);
blokje moveZ(units, tijd);
"
units" vertegenwoordigd het aantal units dat je entity naar boven moet bewegen, volgens de as (X, Y of Z)
"
tijd" is ALTIJD het aantal seconden dat "blokje" erover doet om tot z'n positie te komen.
natuurlijk kunnen we de move functie nog uitbreiden met
Acceleratie en
Deceleratie
"
Acceleratie": hoe lang het duurt om van 0 naar een constante snelheid te gaan, deze constante snelheid hangt af van de tijd die jij hebt ingesteld (hoelang het blokje erover doet om tot z'n positie te komen)
"
Deceleratie": hoe lang het duurt om van die constante snelheid naar 0 te gaan.
dit bepalen we zo in onze fucties:
blokje moveTo((X,Y,Z), tijd, acceleratie, deceleratie));
blokje moveX(units, tijd, acceleratie, deceleratie);
blokje moveY(units, tijd, acceleratie, deceleratie);
blokje moveZ(units, tijd, acceleratie, deceleratie);
met als voorbeeld:
blokje moveTo((-1000,300,-20), 5, 1, 1));
blokje moveZ(300, 7, 2, 2);
acceleratie + deceleratie mag
nooit meer zijn dan de totale tijd!
je kan natuurlijk ook nog dingen roteren, mits ze een origin hebben (in je script_brushmodel, xmodels hebben van hun eigen al een origin (dat paarse blokje), als deze niet goed is zul je er zelf wel een moeten maken)
iets laten roteren doen we zo:
blokje rotatePitch(graden, tijd);
blokje rotateYaw(graden, tijd);
blokje rotateRoll(graden, tijd);
Pitch, Yaw en Roll roteren elk naar een verschillende kant, speel hier een beetje mee tot ze naar de juiste kant roteren(als je niet weet naar waar ze draaien met bv rotatePitch)
rotatePitch = y-as
rotateYaw = z-as
rotateRoll = x-as
graden: de hoeveelheid graden je object moet draaien van -360 tot 360. (het kan alles hier tussen zijn, als je iets bijvoorbeeld 90 graden wil laten draaien doe je dit zo: blokje RotatePitch(
90,tijd);
tijd is steeds weer de hoeveelheid seconden het duurt.
natuurlijk kunnen we dit weer uitbreiden met acceleratie en deceleratie, op dezelfde manier zoals bij move functie
blokje rotatePitch(graden, tijd, acceleratie, deceleratie);
blokje rotateRoll(graden, tijd, acceleratie, deceleratie);
blokje rotateYaw(graden, tijd, acceleratie, deceleratie);
op het einde zou je een script moeten krijgen zoals dit (dit is zeer simpel, natuurlijk kan het helemaal anders zijn)
blokje()
{
blokje_trig = getent("blokje","targetname");
blokje = getent(blokje_trig.target,"targetname");
while(1)
{
blokje_trig waittill("trigger",player);
blokje moveto((X,Y,Z),Tijd);
wait Tijd;
blokje moveto((X,Y,Z),Tijd); // terug naar vorige positie
wait Tijd;
}
}
Deze tutorial is gemaakt door HuRRaCaNe, exclusief voor Modbase.be.
Als je nog opmerkingen hebt, of vragen, aarzel dan niet om een PM te sturen!
Met dank aan Derix.