Event’ai ( Part II )

// August 3rd, 2008 // AS3

Key Events

Toliau peržvelgsime dar kelis Event’us:

stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPressed );
stage.addEventListener( KeyboardEvent.KEY_UP, onKeyReleased );

Funkcijai bus peduodama informaciją apie mygtuko paspaudimą, priklausomai nuo to ko jums reikės galite naudoti kelis parametrus:

keyCode – kiekvieno mygtuko kodas, “S” ir “s” duos tą pati rezultatą.

charCode – jeigu reikia išsiaiškinti ar paspaustas mygtukas yra “S” ar “s”.

keyCode ne tik gali savyje laikyti numeruotą mygtuko kodą bet taip pat ir tiesioginį mygtuko pavadinimą:

function onKeyPressed ( evt:KeyboardEvent ) : void {

switch ( evt.keyCode ) {

case Keyboard.ENTER:
myMovie.gotoAndPlay ( "pradzia" );
break;

case Keyboard.BACKSPACE:
myMovie.stop ();
break;

case Keyboard.LEFT:
myMovie.prevFrame ();
break;

case Keyboard.RIGHT:
myMovie.nextFrame ();
break;

case Keyboard.SPACE:
myMovie.gotoAndStop ( "pabaiga" );
break;

default:
trace ( “keyCode : ”, evt.keyCode );
}
}

Frame Events

FrameĘvent’as turėtų būti žinomas kiekvienam, kuris programuoja Flash AS2. Taigi šis mažas stebuklas liko ir AS3 tik truputėlį patobulintas.

Tiems kas nežino kas tai yra:

FrameEvent’ai yra vykdymi skirtingu principu negu MouseEvent’ai arba KeyEvent’ai. Jie suveikia naturaliai kaip tik flash dokumentas pradeda veikti ( aišku galima pasidaryti kad jie FrameEvent’as pradėtų veiksmą tik po to kai bus įvykdyta kokia nors sąlyga ( pvz.: mygtuko paspaudimas ) ). Taigi funkcija kuri bus priskirta prie FrameEvent’o suveiks kas kartą kai flash dokumentas įeis į naują Frame’ą. Priklausomai nuo to kiek FPS jūsų SWF nustatytą. Jeigu 12, reiškia funkcija bus įvykdomą 12 kartų, jeigu 30, reiškia 30 kartų ir t.t.

Jeigu seniau ( ant AS2 ) vienam objektui galima buvo prikabinti tik 1-ą onEnterFrame veiksmą, tai dabar galime prikabinti kiek tik norime ENTER_FRAME Event’ų.

public var ball    : MovieClip;

public function TimerEvents() {

ball = this["ballMC"];

ball.addEventListener ( Event.ENTER_FRAME, rotateObject );
ball.addEventListener ( Event.ENTER_FRAME, moveObject );

}

public function rotateObject ( evt : Event ) : void {

evt.target.rotation++;

}

public function moveObject ( evt : Event ) : void {

evt.target.x++;

}

Timer Events

Tai yra alternatyva ENTER_FRAME eventui. AS2 – ame buvo naudojamas setInterval() metodas, AS3 tam dalykui turi visiškai naują klasę – Timer.

var timer : Timer = new Timer ( uzlaikymas : Number, kartojimasis : int );

Timer klasė reikalauja dviejų kintamųjų: kas kiek laiko bus įvykdoma funkciją ( p.s. pirmas įvykdymas irgi įvyks po tiek laiko ), kartojimasis – kiek kartų kartosis dabartiniai klasei priskirta funkciją. Taip pat yra labai patogus dalykėlis – start, Timer klasės metodas kuris paleidžia skaitliuką.

var timer : Timer = new Timer ( 1000 );

timer.addEventListener ( TimerEvent.TIMER, onTimer );

timer.start ();

function onTimer ( evt : TimerEvent ) : void {

laikrodis.sRodykle.rotation += 6;

}

Objekto eksportavimas į klasę ( arba klasės pririšimas prie objekto ):

Pirmas žingsnis: Library paspaudžiame ant objekto kurį norime eksportuoti klasei – Linkage…

Tada prie Class nurodome pilną kelia iki tos klasės ( be galūnės ).

ir viskas, turime objektą pririšta prie klasės.

Parsisiųsti: TimerEvents

EventListener’ių pašalinimas

Palikti EventListener’į, tada kai jau nereikalingas nėra labai protingas dalykas. Tvarka turi būti!

Taigi po to kai EventListeneris atliko davo darbą, tarkim patikrino per kiek laiko nuo puslapio užkrovimo vartotojas pirmą kartą spregtelėjo pelės klaviša.

stage.addEventListener ( MouseEvent.CLICK, onFirstMouseClick );

Jis tampa nereikalingas, nes užduotis yra įvykdyta. Taigi mums reikia jį pašalinti. Jis yra pašalinamas tokiu pat būdu kaip ir uždedamas ( turi išlikti tas pats objektas, tas pats Event’as kurio mes klausėmes, ta pati funkcija kurią mes buvome priskirę  )

stage.removeEventListener ( MouseEvent.CLICK, onFirstMouseClick );

Visa tai yra skirta tam kad valdytume atminties užkrovimą, įsivaizduokite kad pas jus yra kelios dešimtys Event.ENTER_FRAME listener’ių, kurių kiekvienas atlieka po kelius šimtus eilučių kodo. Visa tai stabdys CPU ir apkraus atmintį, nors iš visų listener’ių, konkrečiu momentu mums reikės tik po vieną.


Leave a Reply