Maak uw eigen ActionScript 3.0-pixelexplosie-effect

In deze tutorial leer je hoe je een effect creëert dat je zeker in de gaten heeft (bijvoorbeeld in bestanden zoals deze), de Pixel Explosion. Tijdens het maken van het proces leren we hoe we BitmapData kunnen extraheren uit een MovieClip, hoe een tweening-engine kan worden gebruikt en hoe gebeurtenislisteners kunnen worden gebruikt.

Laten we beginnen!




Stap 1: Het werkgebied instellen

Het eerste wat we zullen doen is een AS3 flash-bestand maken. Daarna zullen we onze fase instellen op 400 px x 400 px en 30 fps. We zullen coderen op de tijdlijn om dingen eenvoudig te maken, maar degenen die in OOP programmeren, zijn welkom om deze code in klassen te schrijven. Je hebt een basiskennis van AS3 nodig om alle processen te begrijpen die deze tutorial met zich meebrengt; ik zal echter proberen het heel eenvoudig te houden. De blauwe zwevende knoppen zijn degene die je moet indrukken in je IDE. Het lijkt misschien eerst heel veel werk, maar het is echt heel simpel ...

Stap 2: Het tekenen van ons hoofdbeeld

We tekenen nu een vectorafbeelding van wat we nodig hebben. Je kunt echt elke afbeelding instellen met dit effect (.jpg, .png), maar vectoren zijn cooler. Zoals je zult opmerken, ben ik niet zo'n groot ontwerper. Het enige wat u hoeft te doen is uw afbeelding tekenen (of een jpg importeren van uw computer), selecteer het en converteer het naar een MovieClip (druk op F8 op Windows).

Stap 3: Voorbereiding op de code

Zodra u uw afbeelding in een Movieclip hebt omgezet, kunt u deze voorbereiden op de code die erop is gericht. We maken een nieuwe laag voor de acties (1.) en geven deze een instantienaam van mcLogo (2.). Vervolgens importeren we de klassen voor gebruik in onze actieslaag. Voor dit effect hebben we een goede tweening-engine nodig. De beste die ik vond die zowel snelheid als stabiliteit aanpakt, is TweenMax. Je kunt het downloaden van http://blog.greensock.com/tweenmaxas3/ (doneer als je het leuk vindt). Vergeet niet de klassendirectory in dezelfde map als uw .fla te kopiëren (zoals u kunt zien in het blauwe vak). Importeer ten slotte de klasse TweenMax in uw tijdlijn (3.).

Stap 4: Voorbereiden op de actie

We gaan nu het stadium en onze belangrijkste variabelen instellen. We brengen de stage in lijn met de TOP_LEFT-hoek en stellen deze zo in dat de inhoud niet wordt geschaald. Aan de kant van de variabelen maken we een container die alle pixels bevat die zullen exploderen. We zullen ook een GlowFilter maken, dit is natuurlijk optioneel, maar het zal de awesomeness van het effect verbeteren. "Animeren" is een schakelaar die waar wordt wanneer het effect plaatsvindt en "pixelBMP" de bitmapgegevens van uw afbeelding is.

 stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var pixelContainer: MovieClip = nieuwe MovieClip (); var glow: GlowFilter = new GlowFilter (0xFFFF00, 1, 10, 10,5,2); var animating: Boolean = false; var pixelBMP: BitmapData;

Vervolgens maken we herhaalvariabelen en wijzen we de positie van de pixelcontainer gelijk aan die van uw afbeelding.

 var i: int = 0; var j: int = 0;

Stap 5: Maak de Pixel-houders

We extraheren nu de bitmapgegevens (pixelkleuren) uit de afbeelding die u hebt ingesteld (1.). Onthoud deze twee regels, ze helpen je ook bij andere projecten. We maken een nieuw symbool in de bibliotheek (2.) en klikken op de knop Geavanceerd. Eenmaal erop geklikt, selecteert u Exporteren voor Actionscript (3.). Zoek naar het Class-tekstveld en typ "myPixel".

Stap 6: Stel de MyPixel-klasse in

Nu stellen we de pixelcontainer in. We voeren ons nieuw gemaakte pixeleffect in en maken een laag met de naam "actie".

Stap 7: De pixels instellen om kleuren te ontvangen

Op de actielaag stellen we de bitmap in. Dit kleine stuk code helpt je elke keer dat je de bitmapData van een object wilt manipuleren (bijvoorbeeld met andere nuttige effecten zoals desaturatie en onscherpte).

pixelBMP = nieuwe BitmapData (mcLogo.width, mcLogo.height, true, 0x000000) pixelBMP.draw (mcLogo)

Ik heb een cirkel gemaakt die de kleur van elke pixel bevat, maar je kunt deze aanpassen aan wat je maar wilt; vierkant, driehoek of zelfs een eenvoudige pixel. We voegen het pixelgloedeffect toe vanuit de functieparameter:

var orgX: int = 0; var orgY: int = 0; var bmpImg: Bitmap; functie setUpPixel (bdData: BitmapData, glow: GlowFilter) var mc: MovieClip = new MovieClip (); mc.graphics.beginFill (bdData.getPixel (0,0)); mc.graphics.drawCircle (0,0,2) mc.graphics.endFill (); mc.filters = [glow]; addChild (mc); 

Stap 8: Alle pixels overschrijden

We maken twee "voor" -instructies om alle pixels van onze afbeelding te dekken. De eerste voor (i) is voor verticaal en de tweede (j) voor horizontaal. De methode getPixel retourneert een eenheid die de kleur van de pixel op die positie weergeeft. Als het niet nul is, worden de bewerkingen in stap 9 gestart. We zullen de pixels twee voor twee overschrijden vanwege geheugenbeheer.

 voor (i = 0; i < mcLogo.height; i+=2) for(j = 0; j < mcLogo.width; j+=2)

Stap 9: Kleur geven aan de pixels

We beginnen met het toewijzen van de pixelkleur aan het gloeifilter. Vervolgens maken we een nieuwe myPixel die we pixel_mc noemen. We zullen de functie "setUpPixel" noemen die we tijdens stap 7 hebben gedefinieerd. Dit geeft de bitmapData door - 2 pixels breed, 2 pixels lang, de kleur van de huidige pixel, originalX, originalY en de glow-filter. Ten slotte voegen we deze pixel toe aan de pixelcontainer (regel 12)

voor (i = 0; i < mcLogo.height; i+=2) for(j = 0; j < mcLogo.width; j+=2)  if(pixelBMP.getPixel(j, i)>0) glow.color = pixelBMP.getPixel (j, i); var pixel_mc: myPixel = new myPixel () pixel_mc.setUpPixel (nieuwe BitmapData (2, 2, false, pixelBMP.getPixel (j, i)), glow) pixel_mc.y = i; pixel_mc.x = j; pixelContainer.addChild (pixel_mc); pixelContainer.visible = false; 

Stap 10: Testen wat we tot nu toe hebben gedaan.

Kleine fouten zijn heel gebruikelijk bij het programmeren, daarom moeten we onze filmclip van tijd tot tijd testen. Dit geeft ons ons beeld, maar ook wat onscherpte. De waas is vanwege het gloeifilter, dus maak je daar geen zorgen. Zoals je misschien al weet, hebben we deze pixels niet nodig om zichtbaar te zijn, behalve wanneer ze ons effect hebben toegepast. Tot die tijd hebben we onze mooie afbeelding. Dus alles wat je moet doen in deze stap is regel 13 voor commentaar - pixelContainer.visible = false; en je krijgt je originele afbeelding terug.

Stap 11: Het explosie-effect instellen

We hebben de pixels op hun plaats, het enige dat we nu hoeven te doen, is hen animeren. Dit is waar TweenMax de scène betreedt. We starten de functie door het originele beeld onzichtbaar te maken en de pixels zichtbaar te maken. Vervolgens stellen we de originele afbeelding en de knop in die we later zullen maken (om de functie in te schakelen) bovenaan de index. Onthoud deze functie - setChildIndex (yourmc, numChildren-1) het zal je helpen bij andere projecten.

 function explode () pixelContainer.alpha = 1; mcLogo.visible = false; setChildIndex (mcLogo, numChildren - 1) setChildIndex (btn_mc, numChildren-1) pixelContainer.visible = true; 

Stap 12

Dit is waar de pixels tot leven komen. Het "voor" kruist elk kind van de pixelContainer. De pixel wordt geëxtraheerd via de getChildAt (i) methode. De xdest en ydest zijn enkele willekeurige bestemmingen waarnaar onze pixels zullen vliegen (omdat Math.random () een getal tussen 0 en 1 retourneert, is het nodig om het te vermenigvuldigen). Ten slotte voegen we de overgang en een type gemak toe via TweenMax.

 function explode () pixelContainer.alpha = 1; mcLogo.visible = false; setChildIndex (mcLogo, numChildren - 1) setChildIndex (btn_mc, numChildren-1) pixelContainer.visible = true; for (var i: int = 0; i 

Stap 13: Implosie

Voor implosie moeten we natuurlijk onze beginwaarden opslaan. We maken (1.) 2 arrays - xArray en yArray waarin deze waarden worden opgeslagen. Hierna (2.) zullen we invoegen in de voor (j = 0; j de code om de waarden in de volgende index te pushen.

var xArray: Array = new Array (); var yArray: Array = new Array (); voor (i = 0; i0) glow.color = pixelBMP.getPixel (j, i); var pixel_mc: myPixel = new myPixel () pixel_mc.setUpPixel (nieuwe BitmapData (2, 2, false, pixelBMP.getPixel (j, i)), glow) pixel_mc.y = i; pixel_mc.x = j; xArray.push (j); yArray.push (i); pixelContainer.addChild (pixel_mc); pixelContainer.visible = false; 

Stap 14

Nu voegen we ook een intrekeffect toe. Het is meestal hetzelfde als het explosie-effect, alleen gebruikt het de waarden die zijn opgeslagen in de eerder gemaakte array.

Stap 15: De knop

Laten we onze knop maken. Begin met tekenen (1.). Maak er een filmclip van (zoals je in stap 2 hebt geleerd. Een nieuwe actielaag maken en stop () typen; (2.). Dit voorkomt dat onze mc een lus maakt. We zullen nu een keyframe invoegen voor wanneer de knop is ingedrukt ( 3.). Dit zal de tekst veranderen en tonen dat nu, wanneer je erop klikt, het proces zal worden omgekeerd.

Stap 16: onze knop voor ActionScript exporteren

We moeten hetzelfde doen als in onze afbeelding, waarbij we de knop een instantienaam geven.

Stap 17: De knop instellen

Met de eigenschap buttonMode wordt de normale cursor ingesteld om in de actie één te wijzigen.

De eigenschap mouseChildren wanneer deze is ingesteld op false, verbiedt de knoppen waarmee kinderen mouseEvents kunnen stelen.

Met de methode addEventListener kan de knop de functie clickHandler starten wanneer erop wordt geklikt (MouseEvent.CLICK).

 function initbutton () btn_mc.buttonMode = true; btn_mc.mouseChildren = false; btn_mc.addEventListener (MouseEvent.CLICK, clickHandler);  initbutton ();

Stap 18: De detonator

We zullen nu de functie instellen die de explosie veroorzaakt. "Animatie" is de waarde die aangeeft of de pixels moeten exploderen of imploderen.

 function clickHandler (e: MouseEvent) if (animating == false) explode (); animating = true; btn_mc.gotoAndStop (2);  else implode () btn_mc.gotoAndStop (1); 

Stap 19: aanpassen

Filters toevoegen, de waarden van de filters wijzigen en de easing-typen van de overgangen aanpassen, zijn geweldige dingen om mee te spelen. Voor het wijzigen van de easing-typen moet u de easing-klassen importeren. U kunt hier een voorbeeld van de tweening-typen bekijken.

 import gs.easing. *;

Stap 20: De overgang gladstrijken

Als je de film hebt getest terwijl we zijn meegegaan, is het je misschien al opgevallen dat de overgang tussen pixels en het werkelijke beeld behoorlijk hard is. We kunnen een onComplete -parameter toevoegen aan de implode-tween om een ​​functie aan te roepen die die overgang effent:

onComplete: smoothit-functie smoothit () mcLogo.visible = true; TweenMax.to (pixelContainer, 1, alpha: 0, onComplete: function () pixelContainer.visible = false; mcLogo.visible = true; animating = false;

Stap 21: Bekijken

Wat hebben we vandaag besproken??

  1. Onze hoofdklassen importeren.
  2. De stage uitlijnen.
  3. De belangrijkste variabelen aangeven.
  4. Een pixelcontainer op het podium toevoegen.
  5. De bitmapgegevens uit onze afbeelding extraheren.
  6. Een MyPixel-klasse maken en de kleur van elk van de afbeeldingspixels naar die pixels verzenden.
  7. Een functie maken die alle pixels selecteert en vervolgens tweens naar een willekeurige positie.
  8. Een functie maken die de pixels terugvoert naar de oorspronkelijke positie.
  9. Een knop maken die deze functies oproept.

Eindcode

 importeer gs.TweenMax; import gs.easing. *; stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var pixelContainer: MovieClip = nieuwe MovieClip (); var glow: GlowFilter = new GlowFilter (0xFFFF00, 1, 10, 10,5,2); var animating: Boolean = false; var pixelBMP: BitmapData; var i: int = 0; var j: int = 0; var xArray: Array = new Array (); var yArray: Array = new Array (); addChild (pixelContainer) pixelContainer.x = mcLogo.x; pixelContainer.y = mcLogo.y; pixelBMP = nieuwe BitmapData (mcLogo.width, mcLogo.height, true, 0x000000) pixelBMP.draw (mcLogo) for (i = 0; i0) glow.color = pixelBMP.getPixel (j, i); var pixel_mc: myPixel = new myPixel () pixel_mc.setUpPixel (nieuwe BitmapData (2, 2, false, pixelBMP.getPixel (j, i)), glow) pixel_mc.y = i; pixel_mc.x = j; xArray.push (j); yArray.push (i); pixelContainer.addChild (pixel_mc); pixelContainer.visible = false;  functie initbutton () btn_mc.buttonMode = true; btn_mc.mouseChildren = false; btn_mc.addEventListener (MouseEvent.CLICK, clickHandler); function clickHandler (e: MouseEvent) if (animating == false) explode (); animating = true; btn_mc.gotoAndStop (2);  else implode () btn_mc.gotoAndStop (1);  initbutton (); function explode () pixelContainer.alpha = 1; mcLogo.visible = false; setChildIndex (mcLogo, numChildren - 1) setChildIndex (btn_mc, numChildren-1) pixelContainer.visible = true; for (var i: int = 0; i 

Ik hoop dat je deze tutorial leuk vond. Bedankt voor het lezen!