. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .


 
 
SEGÉDLETEK Komponensek

Flash Plugin detektáló komponens programozása
  feltöltve: 2005.03.28 | szerző: ismeretlen | olvasva: 3796 alkalommal

   
 

Kódolás


A Library-ből nyisd meg a "detector" nevü mc-nket és az első frame-jére írd a következő összes kódot. Hasznos lehet, ilyenkor a Pin current script gombot benyomni a megnyitott Actions paletta jobb felső sarkában, mert így bármikor nézelődünk valami után a mozinkban, mindig ennek a frame-nek a script-jét látjuk majd, ha megnyitjuk az akciószkript:) ablakot.

INICIALIZÁLÁS:

#initclip
//Konstruktor
function detector() {
this.control();
}

//Objekt registration
detector.prototype = new MovieClip();
Object.registerClass("detector_mc", detector);


A konstruktor függvényben meghívjuk a "control" nevü függvényünket.
Utána definiáljuk a "detector" osztályt és persze az Object.registerClass utasítást nem felejtjük ki. Itt lesz fontos, hogy a "Linkage..." menüben elneveztük az mc-nket "detector_mc"-nek.

//control fv.
detector.prototype.control = function() {
var verzio = getVersion();
var split1 = verzio.split(" ");
var split2 = split1[1].split(",");
detector.prototype.verzioszam = split2[0];
if (this.verzioszam < this.cversion) {
this.noSuper();
} else {
this.Super();
}
};


Itt megadunk a konstruktor függvény prototype tulajdonságával, egy új metódust, a "detector" osztályunknak, ez lesz a "control". Nem győzöm hangsúlyozni, hogy aki szeretné hogy ne csak lemásolni tudja ezt a segédletet, hanem meg is érteni, az olvassa el tenegri OOP-ról szóló segédletét itt.

Ebben függvényben történik az egész detektálás lényege. Ekkor a getVersion() paranccsal lekérdezzük a F.P. verziószámát. Ez azonban egy ilyet ad vissza:

WIN 6,0,21,0

Ez mutatja a user op.rendszerét és a F.P. pontos alvázszámát, nekünk azonban csak az első számjegy az érdekes. Ezt kell kibogarásznunk.

Ez egy String, melyet aprítanunk kell. Erre való a String osztály split metódusa. Ez egy megadott szeparátor szerint aprítja fel a stringet és egy tömböt ad vissza. Így a var split1=verzio.split(" ") sor érthetően egy két elemű tömböt készít, mely neve split1, és melynek nulladik eleme: WIN, az első meg: 6,0,21,0.

Így egyszerűen egy split2 tömböt készítünk, mely a split1 tömb első elemét (6,0,21,0) aprítja tovább. Itt azonban a "," a szeparátor. Ergo kapunk egy tömböt, melynek neve split2 lesz és melynek négy eleme lesz. Ebből a nulladik az ami nekünk kell. Ezt gyorsan el is mentjük "verzioszam" változóban. Ez egy olyan mező, mely minden példányában jelen lesz az osztálynak.

Itt jön az ominózus döntő pillanat. Vagyis nagyobb-e a user F.P. száma, mint a paraméterként beállított szám vagy nem. Ha nagyobb, akkor királyság van, vagyis jöhet a "Super" metódus. Ez fogja majd a _root. x.-edik frame-jére repíteni a mozit.

Ám, ha nem így van akkor jön a "noSuper" metódusa a detector osztálynak. Ez foggja kirajzolni a feliratunkat és figyelni hogy kattintson a felhasználó.

//noSuper fv.
detector.prototype.noSuper = function() {
//Egér figyelő
this.mListener = new Object();
var l = this.clink;
var w = this.cwindow;
this.mListener.onMouseDown = function() {
getURL(l, w);
};
Mouse.addListener(this.mListener);

//textfield létrehozása
this.createTextField("myText", 3, 0, 0, 0, 0);
//textFormat stílus definiálása
this.mStyle = new TextFormat();
this.mStyle.font = this.cfont;
this.mStyle.size = this.csize;
this.mStyle.color = this.ccolor; //Textfield beállítás
this.myText.autoSize = true;
this.myText.text = this.ctext;
this.myText.setTextFormat(this.mStyle);
//Max szélesség ellenőrzése
if (this.myText.textWidth>Stage.width) {
this.myText.removeTextField();
this.createTextField("myText", 4, 0, 0, this.ctxtw, this.ctxth);
this.myText.wordWrap = true;
this.myText.multiline = true;
this.myText.text = this.ctext;
this.myText.setTextFormat(this.mStyle);
}

//TextBox középre helyezése
this.point = new Object();
this.point.x = (Stage.width-this.myText.textWidth)/2;
this.point.y = (Stage.height-this.myText.textHeight)/2;
this.globalToLocal(this.point);
this.myText._x = this.point.x;
this.myText._y = this.point.y;
};


Először létrehozunk egy eseményfigyelő objektumot, mely a mouseDown eseménykor fejti ki hatását, vagyis meghívja az eseménykezelő függvényt, mely megnyitja a linket a param.-ként megadott ablaktípusban. Ezután hozzáadjuk az egérhez a figyelőnket.

Jöhet a textField létrehozása. Nem szorul magyarázatra szerintem. Miután ez megvan, létrehozunk egy új textFormat-ot, melyet majd hozzárendelünk a "this.myText"-hez. Ebben a format-ban használjuk fel a param.-ként megadott betűtípust, betűszínt és betűméretet. Ezután átadjuk a szöveget a "this.myText"-nek.

És akkor itt jön egy közbeékelt kis kellemetlenség, mely abból adódik, hogy olyanra akartam írni ezt kis komp.-t hogy ha lehet minél kevesebb param-t használjon. Így nem akartam kötelezően megadni a textbox magasságát és szélességét. Gondoltam, ha nem lóg túl a színpadunkon a szöveg, akkor simán jó, ha az autosize metódus elintézi a méretezését a szövegdoboznak. És ha túllóg?

Nos, ezért jön ide ez a kódrész. Először letöröljük a színpadról az egysoros és ezáltal túl hosszú szövegdobozt, majd létrehozunk egy újat, melyben felhasználjuk a copy+paste-s paramétereinket:) Ez a két paraméter tehát a komp. testreszabásánál opcionális és csak akkor van szükség a beállításukra, ha nem fér ki az általad megadott szöveg. Ezt érdemes ellenőrizni mondjuk úgy, hogy cversion-nak beállítasz 11-et, majd futtatod a mozit.
Tehát megvan az új fix méretű dobozunk. Ezt be kell állítani többsorosra. Erre van a multiline és a wordWrap metódusa a TextField osztálynak. Így most megint van egy "myText" nevű szövegdobozunk a színpadon, csak éppen mostmár nem fog kilógni a szövegünk.

Meg van a listener mely csak arra vár hogy kattintson a user és már repíti is a megadott oldalra, megvan a szöveg is mely tájékoztatja őt erről. Mostmár csak egyetlen apró, esztétikumot emelő kozmetikázásra van szükség, ez a szöveg középre helyezése. Erre van a következő //TextBox középre helyezése rész alatti kódrészlet. Szerintem nem szorul magyarázatra. Talán annyit érdemes hozzáfűzni, hogy szükségünk van a movieClip.globalToLocal(point) metódusra. Ezt teszi meg nekünk azt, hogy kiszámol egy adott pontot, mely a _root.on, a színpadon van, a mi mc-ünkben. Vagyis megnézi mondjuk hogy az A (12; 15) pont, hol van a mi komp-ünkben.

Ehhez szüksége van egy pont objektumra. Ezt mi létrehozzuk és két változót (x és y) definiálunk benne. Ezekben tároljuk el azt a két koordinátát, mely a _root-on a jó pozíciót jelenti egy ekkora szövegdoboznak, ahhoz hogy középen legyen. Ezt pedig átalakítjuk az említett paranccsal és kész is.

//Super fv.
detector.prototype.Super = function() {
_root.gotoAndStop(this.cjumper);
};
#endinitclip


Ez pedig a "noSuper" metódusa a detector osztálynak, mely akkor hívódik meg ha minden rendben van. Nem szorul magyarázatra azt hiszem.


Záró gondolatok


Hát elkészült ez az igen egyszerű és remélhetőleg hasznos komp.-ünk. Mostmár bármikor csak kidobjuk a mozink elejére és megszabadulhatunk a "Flash Plugin letöltése" gombtól. Biztosan lehetne még tovább paraméterezni, további funkciókkal bővíteni, de nekem ennyi is elég volt, remélem nektek is hasznos lesz.

Ha letöltitek a forrásfájlt látjátok majd, hogy a Library-ban szép (? :)) ikonja van a komp-nek. Ez egy 24*20 pixeles JPEG, GIF, PNG lehet, melyet a fCustomIcons nevü (általunk létrehozott) mappába kell tenni és a komp. nevére keresztelni. Ekkor automatikusan kicseréli a default ikont. Ez azért jó mert könnyen fel tudod ismerni a komp-eid, ha sokat használsz belőlük egy munkádban.

Jó munkát!

 
   
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .