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




 
 
SEGÉDLETEK ActionScript

hitTest() - Ütközés ellenőrzés Flash-ben
  feltöltve: 2003.09.22 | szerző: Ducky | olvasva: 5566 alkalommal

   
 

A hitTest() függvény segítségével figyelhetjük két objektum ütközését. Ha a függfényben megadott hit area objektum és a hitter objektum érintkezik egymással, akkor a visszakapott érték true (igaz), ellenkező esetben false (hamis). Remekül alkalmazható a flash animációk készítésének számtalan területén. Elsősorban játékprogramok fejlesztésénél lehet rá szükség, de akár komplett interface-ek felépítése során is hatékonyan alkalmazhatjuk. Pl.: ha egy területet, vagy egy gombot szeretnénk figyelni, hogy az egér vagy más objektum fölötte van-e vagy sem, stb... A hitTest() függvényben a hitter adatait megadhatjuk egy objektum instance nevének formájában, vagy akár _x,_y érték definiálásával is. A következőkben négy egyszerű példa segítségével nézzük meg a gyakorlati alkalmazást.

Érzékelés, kijelzés

A következő animációban egy egyszerű feladatot oldunk meg. Adott egy drag-elhető button (gomb) és ennek a gombnak az ütközését figyeljük, kijelezzük a hitarea_mc -vel.

Lássuk mi is a lényeg. Az összes forráskódot nem vezetjük le, mert az nem tartozik a tárgyhoz. Csak a lényeggel foglalkozunk. A letölthető forrásanyagban az összes fla megtalálható, ha valakinek esetleg nem teljesen tiszta minden. Ebben a kis animációban szerepel egy drag-elhető button, ami a mozink határain belül mozgatható. Instance neve: dragbut_btn. A feladat az, hogy ha a gomb érintkezik (ütközik) a hitarea_mc -vel (zöld négyzet), akkor a hitarea_mc hit kiírása legyen true. Ha nem érintkeznek, akkor false. Van még ezen kívül egy hittest_mc instance nevü movie clip -ünk, ami egy villogó hit felirattal jelzi az ütközést. Erre a megfelelő script (frame action) a következő :

_root.onEnterFrame = function() {
if (hitarea_mc.hitTest(dragbut_btn)) {
hitest = true;
hittest_mc._visible = true;
} else {
hittest_mc._visible = false;
hitest = false;
}
};

Mint láthatjuk, a függvényben meghatároztuk a két objektum instance nevét, amik részt vesznek az ütközés vizsgálatában.
hitarea_mc.hitTest(dragbut_btn) : Tehát ha a dragbut_btn objektum érintkezik a hitarea_mc-vel, akkor kijelzi a true értéket és láthatóvá teszi a hittest_mc-t.

Érzékelés és akció

Ebben az animációban már nem csak az érzékelés a cél, hanem bizonyos akciókat, eseményeket teszünk függővé az ütközéstől.

Mint láthatjuk, ha a célkereszt érintkezik a hitarea_mc -vel, akkor a kék golyó követi a célkeresztet, ellenkező esetben a piros golyó veszi üldözőbe az egér kurzort. Lássuk a megvalósításhoz írt scriptet :

_root.onEnterFrame = function() {
celk_mc._x += Math.round(_xmouse-celk_mc._x)/3;
celk_mc._y += Math.round(_ymouse-celk_mc._y)/3;
if (celk_mc.hitTest(hitarea_mc)) {
golyo1_mc._x += Math.round(celk_mc._x-golyo1_mc._x)/3;
golyo1_mc._y += Math.round(celk_mc._y-golyo1_mc._y)/3;
hittest = true;
} else {
golyo2_mc._x += Math.round(celk_mc._x-golyo2_mc._x)/3;
golyo2_mc._y += Math.round(celk_mc._y-golyo2_mc._y)/3;
hittest = false;
}
};

A második és harmadik sorban a célkeresztet ragasztjuk az egér kurzorhoz. Persze nem a szokványos módon, egy kicsit másként :) ez is egy lehetőség a sok közül. Bár a legegyszerűbb azt hiszem ez lenne:
celk_mc._x = _xmouse; és selk_mc._y = _ymouse;
Ezután a hitTest() következik, amiben figyeljük, hogy a célkereszt érintkezik-e a hitarea_mc -vel, vagy sem. Ha érintkezik, akkor a golyo1_mc fogja követni a célkeresztet, ha nem érintkezik, akkor a golyo2_mc. Ez már egy kész példa arra, hogyan tegyük függővé bizonyos események lezajlását az ütközés (érintkezés) megtörténésétől.

 
   
 
 

© 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 >>> : .. .