Legelőször is had ragadjam meg az alkalmat, hogy minden kedves olvasómnak Kellemes Karácsonyi Ünnepeket kívánjak.

A tartalom megtekintéséhez Flash Player-re van szükség.

Karácsony alkalmával a fenti kis hóesés effekttel készültem. Ezt a kódot nem fogom teljes egészében bemutatni, csak bizonyos részleteire hívom fel majd a figyelmet. Részletek a tovább után.

Legelsőnek nézzük a kódot:

package {
	import flash.filters.BlurFilter;
	import flash.filters.BitmapFilterQuality;
	import flash.display.MovieClip;
	import flash.events.*;

	public class SnowFlake extends MovieClip {
		private static var Width:int;
		private static var Height:int;
		private var speedVari:int=Math.random()*10;
		private var speed:int=Math.random()*5;
		private var wind:int;

		function SnowFlake(w:uint,h:uint) {
			Width=w;
			Height=h;
			setSpeed(speed);
			createFlake();
			moveFlake();
		}

		private function setSpeed(n:uint):void {
			speed=n*speedVari;
		}

		private function moveFlake():void {
			this.addEventListener(Event.ENTER_FRAME,everyFrame);
		}

		private function everyFrame(evt:Event):void {
			x+=wind;
			y+=speed;
			if (x<0||x>Width||y>Height) {
				createFlake();
			}
		}

		private function createFlake():void {
			getWind();
			x=Math.random()*Width;
			y=Math.random()*Height*-1;
			var blur:BlurFilter=new BlurFilter(wind,speed/2,BitmapFilterQuality.HIGH);
			filters=[blur];
			if (speedVari>speed/2) {
				scaleX=scaleY=.6;
			}
		}

		private function getWind():void {
			wind=Math.random()*3;
			var windDirection:int=Math.random()*10;
			if (windDirection<5) {
				wind*=-1;
			}
		}
	}
}
//példányosítás
function flakes():void {
	var flake:SnowFlake=new SnowFlake(420,450);
	addChild(flake);
}

var numofFlakes:uint=150;

for (var i:uint=0; i<numofFlakes; ++i) {
	flakes();
}

Úgy gondolom a példányosításban semmi érdekes, vagy meglepő nincs szóval azt skippelem.

Az első, amire felhívnám a figyelmet, az az hogy a MovieClip osztályból származatom a SnowFlake-et. Tehát rendelkezni fogok az összes olyan tulajdonággal, amivel az MovieClippek (x – y koordináták, filterek, stb.) az öröklődés részleteit majd egy későbbi postban részletesen kitárgyaljuk, most csak az a fontos, hogy lássuk honnan is származnak azok az X-ek és Y-ok és a többi általunk nem definiált adattag és tagfüggvény.

Most nézzük meg a konstruktor paramétereit. Két integert vár: szélesség, magasság. Ez a két változó azért elengedhetetlen kis programunk számára, mert így képesek vagyunk figyelni, hogy mikor fújta ki a „szél” az ablakból kis hópelyheinket, ill. mikor estek le a „földre”.

A moveFlake() függvényben használom a this kulcsszót, ezzel mindig az aktuális objektumra tudunk hivatkozni. Az esetek nagy többségében a this nyugodtan elhagyható, mert a fordító kikövetkezteti, hogy mi mit is szeretnénk. Én is így tettem, hisz rengeteg helyre kiírhattam volna (pl.: this.x, this.scaleX), de mivel a programozók lusták, ezt gyakran elhagyjuk, az eseményfigyelő hozzáadásakor is csak a példa kedvéért tüntettem fel.

Többször is használom a Math.random() statikus függvényt, amit véletlen x számot generál nekünk, ahol 0 <= x < 1. Ha mondjuk 0 és 9 között szeretnénk számokat kapni, akkor csak fel kell szoroznunk a random számot 10-zel, bár gondolom ez természetes. Viszont arra érdemes figyelni, hogy lebegőpontos számot ad vissza a random függvény, tehát ha egész számokat szeretnénk kapni, akkor vagy kerekítünk (round() ), vagy felveszünk egy int típusú változót és ebben az esetben a kerekítés automatikus (valójában típuskonverzió megy végbe) én is ezt az utat választottam. A Math osztályban található az összes matematika függvény és néhány nevezetesebb állandó pl.: pi, sin, cos, sqrt.

És végül még érdemes megemlíteni a filtert, amit használok. Mint említettem a MovieClipből származtattam, tehát képes vagyok szűrőket hozzáadni a hópelyhekhez. A BlurFilter-t használom ezzel szimulálva a pelyhek sebességét. 3 paramétert vár: x irányú elmosás mértéke, y irányú elmosás mértéke, végül az elmosódás minősége, vagy megadhatjuk hányszor alkalmazza az adott filtert.

Használok statikus változókat, illetve a cikkben is említettem statikus függvényeket, de ez egy kimerítőbb téma, ezért ezt egy külön postban taglalom majd részletesen.

Még egyszer mindenkinek nagyon boldog karácsonyt kívánok.

source



Szólj hozzá a posthoz