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

   
 

Példa játék 1

Ez első példa "játék". Azért van idézőjelben, mert csak az oktatóanyag kedvéért készült és a szemléltetésen kívül semmi más értelme nincs. Lényege, hogy adott egy objektum, ami y tengelyen folyamatosan mozog és golyókat lő ki, amiket az egérrel vezérelhető másik objektummal el kell kapni.

A kilövő szerkezetet nem magyarázom el, számtalan segédletben olvashattuk már, de a forrást leírom. A magyarázó commenteket zöldel emeltem ki. Az egész játék egyetlen frame actionban van, ami a következö scriptsort tartalmazza:

/*A pont változó a szerzett pontokat tárolja,
a speed változó a golyó sebességét határozza meg.*/

pont = 0;
speed = 15;
/*A golyó első kilővésének pozíciója a
kilövő egység pozíciójával megegyezik.*/

golyo_mc._y = kilov_mc._y;
golyo_mc._x = kilov_mc._x+10;
/*Enterframe function*/
_root.onEnterFrame = function() {
/*A golyó állandóan mozog,sebességét a speed szabályozza*/
golyo_mc._x += speed;
/*A fogó mc-t hozzákötjük az egérhez.*/
fogo_mc._y += Math.round(_ymouse-fogo_mc._y)/2;
/*Ezeken a sorokon definiáljuk a kilövő mozgásához szükséges scripteket*/
if (lefele == true) {
kilov_mc._y += 8;
} else if (felfele == true) {
kilov_mc._y -= 8;
}
if (kilov_mc._y<25) {
lefele = true;
felfele = false;
}
if (kilov_mc._y>160) {
felfele = true;
lefele = false;
}
/*Végre a hitTest :) Ha a golyót elkaptuk, akkor visszamegy a kilövő
pozíciójába, és újra elindul. A pontot növeljük 15-tel és a sebességet
is növeljük 0.5-el, a játékot nehezítendő.*/

if (golyo_mc.hitTest(fogo_mc.kishit_mc)) {
golyo_mc._y = kilov_mc._y;
golyo_mc._x = kilov_mc._x+10;
pont += 15;
speed += 0.5;
}
/*Ha a golyó kimegy a pályáról, tehát nem kaptuk el,
akkor vége a játéknak.*/

if (golyo_mc._x>450) {
gotoAndStop(3);
}
};

A comment-eknek köszönhetően ez már nem szorul több magyarázatra. Meg lehet ezt a kis játékot csinálni a hitTest() nélkül is, de jó pár sorral hoszabb lenne... így egyszerűbb.

Példa játék 2

Az előzőtől eltérően itt most az ütközéssel törölni fogunk duplikált objektumokat. Persze, aki szereti a felesleges munkát és sok ideje van, az külön minden kis téglát megrajzolhat.

Egyszerűbb és gyorsabb megoldás, ha a téglákat duplikáljuk akár soronként, akár mindet. Erre is van segédlet itt az swf.hu-n, tehát átlépjük. Ebben az esetben csak a hitTest() et tárgyaljuk ki. A hitTest függvényt a duplikált tégla mc-re írjuk, mint object action-t és így az összes duplikáció megörökli ezt a kódsort. Fontos, hogy ha a duplikált tégla is szerepel a játékban, akkor azt removeMovieClip("")- el nem tudjuk eltüntetni. Ezt a főtéglát láthatatlanná tesszük és kihelyezzük a pályán kívülre. Tehát a téglára megírt scriptsor :

onClipEvent (enterFrame) {
if (this.hitTest(_root.shot_mc)) {
_root.bumm_mc._x = this._x;
_root.bumm_mc._y = this._y;
_root.bumm_mc.gotoAndPlay(2);
removeMovieClip("");
this._visible = false;
this._x = -20;
_root.shot_mc._x = 460;
_root.shot = false;
_root.end += 1;
}
}

Mit is takar ez: ha a téglát eltalálja egy lövedék, akkor a bumm_mc, ami egy pici robbanás, fölveszi a megsemmisülő tégla helyét, és a lejátszás elindul. Azután jön a removeMovieClip(""), ami akkor lép életbe, ha egy duplikációról van szó, egyszerően eltörli. Következő két sorban, ha a főtéglát éri találat, akkor eltűnik, és a pályán kívülre kerül. A lövedéket visszadobjuk a kiinduló pontra. A shot változó legyen false, ez azt jelzi, hogy nincs lövés folyamatban, így mehet az új lövés. Az end változó a kilőtt téglákat számolja, ha eléri a duplikációk+főtégla számát, akkor vége a játéknak. Persze, aki a többi részre is kíváncsi, az nézze át a forrás fla-t, de az eddigiekből már minden művelet nyilvánvaló.

Csak töredékét soroltam fel a lehetőségeknek. Mindenkinek saját kreativitása és képzelete fog határokat szabni, semmi más. A gombok és az interface-ekben szereplő animációk hitTest-el történő vezérlése teljesen hasonló a fentiekhez. Mindenkinek jó használatot.

 
   
 
 

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