Een inleiding tot tweening met ActionScript 3.0

Flash staat bekend om het leveren van rijke interactieve ervaringen met veel "eye-candy". Vaak wordt dit eye-candy bereikt door middel van animatie en Flash heeft geweldige animatievaardigheden. Tijdens deze tutorial bespreken we tweening; De geautomatiseerde animatie van Flash.


Invoering

In deze tutorial zal ik het volgende bespreken:

  • Wat is een tween?
  • De klasse Tween gebruiken.
  • Tips en trucs voor het gebruik van de Tween-klasse.
  • Tunnelklassen van derden.

Stap 1: Wat is een Tween?

Wikipedia legt tweening als volgt uit:

Tussentussen of tweening is het proces van het genereren van tussenliggende frames tussen twee afbeeldingen om het uiterlijk te geven dat het eerste beeld vloeiend in het tweede beeld evolueert. Inbetweens zijn de tekeningen tussen de keyframes die helpen de illusie van beweging te creëren. Inbetweening is een sleutelproces in alle soorten animatie, inclusief computeranimatie.

De meeste mensen die Flash hebben gebruikt, hebben eerder een Tween ontmoet. Sinds het begin van Flash, is er de mogelijkheid om te tweenen met behulp van de tijdlijn.

We zullen niet bespreken hoe we kunnen tween met behulp van de tijdlijn, we zullen bespreken hoe tween met behulp van ActionScript 3.0!


Stap 2: De Tween-klasse

De Tween-klasse is de klasse die alle animaties verwerkt en alle eigenschappen met een numerieke waarde kan animeren. Deze eigenschappen kunnen zijn:

  • x positie
  • y positie
  • alpha (opacity)
  • enz

Hoewel de klasse Tween meestal wordt gebruikt om weergaveobjecten te animeren (objecten die kunnen worden gezien), kunt u deze net zo effectief gebruiken om het volume van een geluidskanaal tween te gebruiken (bijvoorbeeld).


Stap 3: Syntaxis van de Tween-klasse

De constructor van de Tween-klasse is behoorlijk lang, maar maak je geen zorgen, het is heel eenvoudig.

 var tween: Tween = nieuwe Tween (obj: Object, prop: String, func: Functie, begin: Number, finish: Number, duration: Number, useSeconds: Boolean = false)

Laten we de parameters één voor één bekijken. We willen een filmclip laten vervagen plein als voorbeeld. OK, laten we dit doen:

  • De eerste parameter is het object dat we gaan tweenen, dit kan een filmclip zijn met de naam square.
  • De tweede parameter is de eigenschap die we gaan tweenen. Deze eigenschap moet een tekenreeks zijn, dus als we de alfa van ons vierkant tweenen, gebruiken we 'alpha'.
  • De derde parameter is de overgang die de tween zal gebruiken. Een overgang geeft ons meer controle over hoe de tween de eigenschap zal animeren (bijv.) Dat het geleidelijk versnelt. We bespreken de overgangen in de volgende stap.
  • De vierde parameter is de waarde waarmee de eigenschap begint. Als we iets vervagen, zou de alpha beginnen bij 0 (anders zouden we het vierkant al zien).
  • De vijfde parameter is de waarde waarmee de eigenschap eindigt. We vervagen ons vierkant, dus aan het einde is de alpha 1 (1 alpha = 100% dekking).
  • De zesde parameter is de duur van de tween. Dit kan in frames of in seconden zijn. Standaard wordt de duur in frames gemeten.
  • De zevende en laatste parameter is een boolean. Deze boolean definieert of we seconden willen gebruiken als de duurmeting. Als het waar is, wordt de duur in seconden gemeten. Standaard is deze parameter onwaar.

Stap 4: Overgangen

Overgangen zijn al genoemd in stap 3, maar laten we verder gaan in meer detail. Een overgang is een functie die beschrijft hoe een eigenschap naar een eindwaarde toe beweegt. Deze overgangen kunnen ook bepaalde effecten creëren, bijvoorbeeld een stuitering of een elastisch effect.

Er zijn heel veel overgangen en ze zijn als volgt in verschillende klassen verdeeld:

  • Terug
    de overgangen zorgen ervoor dat het object teruggaat, voordat getweend wordt tot de eindwaarde. Denk aan een katapult, het begint bij 0, trekt terug tot -20 en schiet daarna vooruit naar 200.
  • Stuiteren
    de overgangen laten het object stuiteren.
  • Elastisch
    de overgangen maken het object elastisch.
  • Geen
    de overgangen doen niets, de eigenschap bereikt de eindwaarde in een constante beweging.
  • regelmatig
    de overgangen hebben een kleine opbouw tot een constante snelheid. Denk aan een auto, hij moet eerst versnellen voordat hij op snelheid komt.
  • Sterk
    de overgangen hebben een veel grotere opbouw tot een constante snelheid. Denk aan een spaceshuttle, hij accelereert ook, maar nog veel langer.

Stap 5: easeIn, easeOut and easeInOut

Dus wat doe je als je niet geleidelijk wilt versnellen, maar geleidelijk wilt vertragen? Alle overgangsklassen hebben drie functies:

  • easeIn
    de overgang beïnvloedt het eigendom aan het begin.
  • easeOut
    de overgang beïnvloedt het eigendom aan het einde.
  • easeInOut
    de overgang beïnvloedt het eigendom aan het begin en het einde.

Deze overgangen kunnen worden getekend als een functie (en met functie bedoel ik een wiskundige functie, een lijn). Bekijk deze transitie-spiekbrief om een ​​idee te krijgen van wat elke overgang doet. Sommige overgangen zijn niet genoemd, dit komt omdat deze overgangen afkomstig zijn van de Tweener-klasse, die ik in stap 18 zal noemen..

Probeer de demo en controleer hoe elke overgang een eigenschap beïnvloedt. Dit is de beste manier om een ​​idee te krijgen van wat overgangen doen met een tween.


Stap 6: Onze eerste Tween

Laten we nu eindelijk aan het werk gaan! We gaan onze allereerste tween maken. Teken een vierkant en converteer het naar een filmclip en geef het daarna een instantienaam van plein.

Nu we onze filmclip hebben, laten we een tween maken! Eerst moeten we de benodigde klassen importeren, omdat deze niet tijdens runtime worden geïmporteerd.

 // importeer de Tween-klasse import fl.transitions.Tween; // importeer de overgangen import fl.transition.easing. *;

Maak daarna een variabele met de naam tween, van het type Tween.

 // importeer de Tween-klasse import fl.transitions.Tween; // importeer de overgangen import fl.transition.easing. *; // maak een var tween var tween: Tween;

Geef nu de parameters door aan de constructor. De waarden voor onze parameters zijn:

  • Het object dat we tweenen is vierkant.
  • De eigenschap die we tweenen is x.
  • De overgangsfunctie die we zullen gebruiken is: Regular.easeInOut.
  • De startpositie van vierkant is 0.
  • De finishpositie van vierkant is 400.
  • De tween duurt 1,5 seconden.
  • Dus dat betekent dat useSeconds waar zal zijn.

Onze code ziet er als volgt uit:

 // importeer de Tween-klasse import fl.transitions.Tween; // importeer de overgangen import fl.transitions.easing. *; // maak een var tween var tween: Tween = nieuwe Tween (vierkant, 'x', Regular.easeInOut, 0, 400, 1.5, waar);

Als je de flitsfilm test (Besturing> Film testen), zie je het volgende:


Stap 7: Inzicht in onze app

Nu is het tijd om onze demo te bouwen. Omdat deze tutorial over tweening gaat, zal ik niet bespreken hoe de interface gemaakt moet worden. Open step7.fla, dat zich in de bronbestanden bevindt.

Voordat we beginnen met het schrijven van een regel code, laten we eens kijken hoe het bestand is opgebouwd. Er zijn 4 lagen: Acties, UI, Konijn en BG. We zullen al onze code in de laag schrijven acties. De UI-laag bevat alle componenten van onze gebruikersinterface. Bekijk alle instantienamen van alle componenten goed. De konijnenlaag bevat een filmclip met de naam van het exemplaar konijn, we tweening deze filmclip. De BG-laag bevat simpelweg een achtergrond, die simpelweg niets doet. We moeten ons mooie konijn een mooie plek geven waar hij alles kan doen wat hij wil, toch??


Stap 8: Variabelen declareren

Een goede gewoonte is om eerst alle (globale) variabelen die we zullen gebruiken te declareren. De code is zwaar becommentarieerd, om u een idee te geven wat elke variabele doet.

Opmerking van de uitgever: Ik ben bang dat de ActionScript-code in deze stap ervoor zorgt dat onze syntaxis-markeerstift Firefox overstuurt (dit gebeurt soms en ik heb geen idee waarom). Voor nu is het het beste om het te downloaden om er een kijkje te nemen. Excuses voor het ongemak.

Zoals je misschien hebt gemerkt, gebruiken we een tweedimensionale array. Als je nog niet zo ervaren bent met Arrays, bekijk dan de geweldige tutorial van Dru Kepple over arrays - AS3 101: Arrays. Deze tweedimensionale array bevat alle mogelijke overgangen.


Stap 9: Event-luisteraars toevoegen

Hoewel we knoppen hebben, moeten we gebeurtenislisteners toevoegen, anders zullen onze knoppen niets doen. Als u niet begrijpt hoe gebeurtenislisteners werken, of als u meer wilt weten over het gebeurteniskader, controleer dan mijn andere zelfstudie Een kijkje nemen in het ActionScript 3.0 Event Framework.

 // wanneer op tweenButton wordt geklikt, begin met animeren (activeer de functie animeren) tweenButton.addEventListener (MouseEvent.CLICK, animeren); // resetAlle eigenschappen van konijn opnieuw instellen (reset de functie reset) resetButton.addEventListener (MouseEvent.CLICK, reset);

Stap 10: De animatiefunctie creëren

Wanneer tweenButton is geklikt, we willen beginnen met animeren. Om dit te doen, moeten we een behoorlijk aantal taken uitvoeren:

  • Haal alle waarden van alle componenten op.
  • Stel de juiste waarden in voor transitionPos en easePos.
  • Wijs de juiste functie toe aan de overgangsarray.
  • Laat tween zijn constructor en tween konijn noemen.
 // wordt aangeroepen door de gebeurtenislistener gekoppeld aan tweenButton-functie animeren (event: MouseEvent): void // haalt de tijdwaarde op uit timeBox time = timeBox.value; // haal de beginwaarde op from beginBox beginValue = beginBox.value; // haal de eindwaarde op uit endBox endValue = endBox.value; // de eigenschap ophalen uit eigenschap propertyBox = propertyBox.value; // zet de overgang naar de juiste waardenswitch (transitionBox.value) case "Back": transitionPos = 0; breken; case "Bounce": transitionPos = 1; breken; case "Elastic": transitionPos = 2; breken; case "Geen": transitionPos = 3; breken; case "Regular": transitionPos = 4; breken; case "Strong": transitionPos = 5; breken;  // stel gemak in op de juiste waardenswitch (easeBox.value) case "easeIn": easePos = 0; breken; case "easeOut": easePos = 1; breken; case "easeInOut": easePos = 2; breken;  // overgang naar de precieze overgang in de overgangen instellen arrayovergang = overgangen [easePos] [transitionPos]; // tween! tween = nieuwe Tween (rabbit, property, transition, beginValue, endValue, time, true); 

Stap 11: De reset-functie maken

Wanneer reset knop is geklikt, we willen alle eigenschappen van opnieuw instellen konijn. Dit is gelukkig veel gemakkelijker dan het creëren van de animatiefunctie.

 function reset (event: MouseEvent): void // reset alle eigenschappen van rabbit rabbit.alpha = START_ALPHA; rabbit.x = START_X; rabbit.y = START_Y; rabbit.rotation = START_ROTATION; rabbit.scaleX = START_SCALEX; rabbit.scaleY = START_SCALEY; rabbit.width = START_WIDTH; rabbit.height = START_HEIGHT; 

Stap 12: Voel je trots op jezelf!

Als je alles goed hebt gedaan, dan heb je de demo met succes gebouwd. Gefeliciteerd, je hebt het gedaan!

Download de volledige code en bewonder alles wat we hebben geschreven:


Stap 13: Wacht, er is meer!

Natuurlijk, weten hoe te tween is niet genoeg. We moeten het volgende nog bespreken:

  • Tweendere eigenschappen tweenen.
  • Hoe kettingen van tweens te maken.
  • Hoe u een vertraging voor uw tweens hebt.
  • Tunnelklassen van derden.

Alle volgende voorbeelden worden gedaan met een filmclip, met een instantienaam van plein.


Stap 14: Startwaarde

Soms is het geweldig om een ​​startwaarde voor een tween in te stellen, maar de meeste keren wilt u tween vanaf de huidige positie van het object. Gebruik gewoon de eigenschap van het object als startwaarde.

 // importeer noodzakelijke klassen import fl.transitions.Tween; import fl.transitions.easing. *; var tween: Tween = nieuwe Tween (vierkant, "alpha", square.alpha, .75, 1, true);

Stap 15: Meerdere eigenschappen

Tweening van meerdere eigenschappen is heel eenvoudig, gebruik de constructor meerdere keren.

 // importeer noodzakelijke klassen import fl.transitions.Tween; import fl.transitions.easing. *; var tween: Tween; tween = nieuwe Tween (vierkant, "x", Regular.easeOut, 0, 400, 1.5, waar); tween = nieuwe Tween (vierkant, "y", Elastic.easeOut, 30, 200, 3.5, true); tween = nieuwe Tween (vierkant, "rotatie", Bounce.easeOut, 0, 90, 3, waar);

Stap 16: Chain of Tweens

Een keten van tweens is dat er meerdere tweens zijn, die elk beginnen wanneer de vorige is afgelopen. We moeten dit doen door het evenement te gebruiken TweenEvent.MOTION_FINISH. Deze gebeurtenis treedt op wanneer een tween de tweening voltooit.

 // importeer noodzakelijke klassen import fl.transitions.Tween; import fl.transitions.easing. *; import fl.transitions.TweenEvent; // maak de tweens var tween1: Tween = nieuwe Tween (vierkant, "x", Strong.easeInOut, 0, 400, 1.5, waar); var tween2: Tween = nieuwe Tween (vierkant, "y", Bounce.easeOut, square.y, 200, 1, true); var tween3: Tween = nieuwe Tween (vierkant, "alpha", None.easeNone, square.alpha, 0, 2, true); // voorkom tween2 en tween3 om tweening te starten tween2.stop (); tween3.stop (); // voeg gebeurtenislisteners toe aan tween1 en tween 2 tween1.addEventListener (TweenEvent.MOTION_FINISH, startTween2); tween2.addEventListener (TweenEvent.MOTION_FINISH, startTween3); // maak de functies startTween2 en startTween3 function startTween2 (event: TweenEvent): void // make tween2 start tween2.start ();  function startTween3 (event: TweenEvent): void // make tween3 start tween3.start (); 

U kunt de gebeurtenis TweenEvent.MOTION_FINISH ook gebruiken voor andere dingen dan het maken van een reeks tweens. Denk aan een flash-site, nadat een pagina is getweend, zal een functie worden aangeroepen, die tekst laadt om weer te geven.


Stap 17: Tweens met vertraging

Het maken van een tween met een vertraging lijkt veel op het maken van een tweens-reeks. We gebruiken een timer en wanneer het evenement plaatsvindt TimerEvent.TIMER treedt op, waarna de tween start.

 // importeer noodzakelijke klassen import fl.transitions.Tween; import fl.transitions.easing. *; // maak onze timer var timer: Timer = new Timer (3000); // start de timer timer.start (); // maak onze tween var tween: Tween = nieuwe Tween (vierkant, "x", Strong.easeInOut, square.x, 300, 2, true); // voorkom tween van onmiddellijk tweening tween.stop (); // voeg een gebeurtenislistener toe aan timer timer.addEventListener (TimerEvent.TIMER, startTween); // create the function startTween function startTween (event: TimerEvent): void // make tween start tween.start (); 

Stap 18: Controleer de documentatie

De Tween-klasse heeft nogal wat methoden, bijvoorbeeld de jojo-functie zorgt ervoor dat de tween in de achteruit speelt. Zie ook de documentatie over de Tween-klasse.


Stap 19: Tweening Classes van derden

Soms is de Tween-klasse voldoende voor je project, maar het gebruik van de Tween-klasse kan een hele klus zijn als je veel eigenschappen gaat tweenen, veel vertragingen hebt, enz..

Gelukkig zijn er verschillende (gratis) klassen van derden, die veel meer geavanceerde tween-mogelijkheden hebben. Laten we eens kijken naar de voors en tegens van het gebruik van een derde klas.

De voors:

  • De ontwikkeltijd is veel sneller.
  • Tweening gebeurt veel efficiënter dan de Tween-klasse. De prestaties zullen meestal worden verbeterd tijdens het gebruik van klassen van derden.

De nadelen:

  • Aangezien deze klassen niet zijn ingebouwd, moet u ze importeren. Dit neemt ruimte in beslag en je flash-project zal meer moeten laden (houd er rekening mee dat momenteel deze klassen zijn uiterst klein.
  • Sommige klassen hebben geen goede documentatie.

De meest gebruikte klassen voor tweening van derden zijn:

  • tweener
  • TweenLite
  • GTween
  • Tweensy

Ik zal niet bespreken hoe elke klas te gebruiken, kijk gewoon op de links en ontdek welke het beste werkt voor jou.


Dank je

Bedankt voor het lezen van deze tutorial. Ik hoop dat je een goed inzicht hebt gekregen in het gebruik van de Tween-klasse. Het was een genoegen om te schrijven voor Flashtuts +! Waarom volg je me niet op Twitter, @DanielApt?