Legelőször is had ragadjam meg az alkalmat, hogy minden kedves olvasómnak Kellemes Karácsonyi Ünnepeket kívánjak.
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.
Author: Stewen
2010. december. 14th
at 11:05
hát ez inkább havaseső lehetne…