Maak een regeneffect in Flash met ActionScript 3.0

In deze zelfstudie maken we een dynamisch regeneffect met ActionScript 3.0. Het effect kan op verschillende manieren worden aangepast door slechts enkele regels code te wijzigen. Laten we beginnen!


Eindresultaat voorbeeld

Laten we eens kijken naar het uiteindelijke effect waar we naartoe zullen werken:

Stap 1 - Kort overzicht

We zullen een eenvoudige regendruppel tekenen en dan zullen we met behulp van onze ActionScript-vaardigheden de MovieClip dupliceren, verplaatsen en positioneren om een ​​mooi regenachtig effect te krijgen.

Stap 2 - Het .fla-document

Maak een nieuw ActionScript 3-document (Bestand> Nieuw ...). Stel de Stage-maat in op de gewenste afmetingen, ik heb 600 x 300 px gebruikt.

Stap 3 - Kies een afbeelding

Voeg toe of teken een afbeelding om als achtergrond te gebruiken. Ik heb een aangepaste afbeelding van JinThai gebruikt, gelicenseerd onder Creative Commons.

Stap 4 - Lagen

Hernoem de eerste laag naar "Achtergrond" en maak een nieuwe laag met de naam "Code" (we zullen deze gebruiken om onze ActionScript aan te zetten). U kunt de laag "Code" vergrendelen om te voorkomen dat er ongewenste tekeningen in worden geplaatst.

Stap 5 - De drop maken

Maak een afbeelding om te gebruiken als de regendruppel. Zet de kleur op wit en gebruik een lineair verloop voor de alpha, mijn is 40 tot 15. Converteer het naar een MovieClip en noem het "Drop", vergeet niet om het selectievakje "Exporteren voor ActionScript" aan te vinken.

Stap 6 - Vereiste klassen importeren

Laten we beginnen met wat code in een apart ActionScript-bestand:

package Classes / * Importeer vereiste klassen * / import flash.display.MovieClip; import flash.events.Event;

Hier importeren we de klassen die we zullen gebruiken. Vergeet niet dat het woord naast 'pakket' de naam is van de map waarin onze klasse zich bevindt.

Stap 7 - De klasse uitbreiden

// We moeten de klasse uitbreiden, zodat we de methode addChild () kunnen gebruiken. public class Rain verlengt MovieClip 

Door de klasse MovieClip uit te breiden, kan onze klasse alle methoden, eigenschappen en functies overnemen die de MovieClip heeft. In dit geval gebruiken we het om toegang te krijgen tot de methode addChild ().

Stap 8 - De variabelen

Hier gebruiken we een exclusieve Flash Player 10 Klasse "Vector". Simpel gezegd, de Vector Class werkt als een array, maar is aanzienlijk sneller.

private var offset: int = 50; // Dit is het offset-gebied in pixels dat het effect zal hebben. Zonder dit, zullen de hoeken van het effectgebied regenvrij zijn private var drops Number: int; // Het aantal regendruppels; de waarde ervan is ingesteld in de parameters private var dropsVector: Vector. = nieuwe Vector.(); // De vector die elke regendruppel opslaat

Stap 9 - Hoofdfunctie

openbare functie init (drops: int, fallSpeed: int, windSpeed: int, hArea: int, vArea: int, dir: String): void dropsNumber = drops;

De hoofdfunctie, met enkele parameters waardoor het effect eenvoudig aan te passen is aan uw behoeften. Je kunt het aantal druppels, de snelheid waarmee de druppels vallen, de snelheid waarmee de druppels horizontaal bewegen, de grootte van het effectgebied en de richting van de regen (links of rechts) veranderen.

We stellen de dropsNumber-waarde hier in.

Stap 10 - Links of Rechts?

Standaard is de offset var ingesteld om met de linkerkant te werken, dus we moeten controleren waar de regen zal komen en de offset veranderen als de richting goed is.

if (dir == "right") offset * = -1; 

Stap 11 - Gebruik de Drop MovieClip

Om verschillende exemplaren van de Drop MovieClip te tonen, moeten we een nieuw Drop-object maken in een "For" -instructie:

for (var i: int = 0; i < drops; i++)  var drop:Drop = new Drop(); drop.fallSpeed=fallSpeed; drop.windSpeed=windSpeed; drop.dir=dir; drop.hArea=hArea; drop.vArea=vArea;

We gebruiken de variabele "drops" om het door de gebruiker gedefinieerde aantal drops te krijgen en de variabelen in de MovieClip in te stellen voor later gebruik.

Stap 12 - Positie

Stel een initiële willekeurige positie in voor de Drops.

drop.x = Math.random () * (hArea + offset); drop.y = Math.random () * Varea;

Stap 13 - Schaal

drop.scaleX = Math.round (((Math.random () * 0.8) + 0.3) * 10) / 10; drop.scaleY = drop.scaleX;

Hiermee wordt de schaal van de druppels ingesteld tussen 0,3 en de oorspronkelijke grootte.

Stap 14 - De druppels toevoegen aan het werkgebied

dropsVector.push (drop); addChild (drop);  // End of For inTheDirection ();  // Einde van init-functie

Deze code voegt de Drop MovieClip toe aan de Vector en vervolgens aan het werkgebied. Het roept ook de functie "richting" op.

Stap 15 - Richting

private function inTheDirection (): void for (var i: int = 0; i < dropsNumber; i++)  switch (dropsVector[i].dir)  case "left" : dropsVector[i].addEventListener(Event.ENTER_FRAME, moveLeft); break; case "right" : dropsVector[i].scaleX*=-1; //Our Drop was created going to the left, so we flip it to make it look like it's going to the right dropsVector[i].addEventListener(Event.ENTER_FRAME, moveRight); break; default : trace("Error");   

In deze functie gebruiken we een ander "Voor" om toegang te krijgen tot de MovieClips in de Vector. Vervolgens controleren we de richtingparameter en voegen een luisteraar toe aan de overeenkomstige functie. Dit zal allemaal zorgen voor de beweging en de positie.

Stap 16 - Verplaats functies

private function moveLeft (e: Event): void e.target.x- = e.target.windSpeed; e.target.y + = Math.random () * e.target.fallSpeed; if (e.target.y> e.target.vArea + e.target.height) e.target.x = Math.random () * (e.target.hArea + (offset * 2)); e.target.y = - e.target.height;  private functie moveRight (e: Event): void e.target.x + = e.target.windSpeed; e.target.y + = Math.random () * e.target.fallSpeed; if (e.target.y> e.target.vArea + e.target.height) e.target.x = Math.random () * (e.target.hArea - offset * 2) + offset * 2; e.target.y = - e.target.height; 

Dit verplaatst de Drops op basis van de parameters van de hoofdfunctie. Vervolgens wordt de positie opnieuw ingesteld wanneer druppels buiten het effectgebied bewegen.

Stap 17 - De klas gebruiken

Dat is de klas klaar, om er gebruik van te maken gaan we terug naar de Flash IDE, open het Actions Panel en schrijf:

importeer klassen. Regen; var rain: Rain = new Rain (); rain.init (200, 50, 5, 600, 300, "left"); addChild (regen);

Hiermee wordt een nieuw regenobject gemaakt en wordt de hoofdfunctie aangeroepen om het effect te starten. Uiteindelijk voegen we het effect toe aan de fase.

Conclusie

Vergeet niet dat je met de parameters kunt spelen om verschillende effecten te krijgen en dat je de druppels ook kunt veranderen door te tekenen wat je maar wilt. Blijf verschillende combinaties proberen om het exacte effect te krijgen dat je wilt.

Ik hoop dat je net zo veel genoten hebt van het lezen van de tut als ik het heb geschreven. Bedankt voor het lezen!