Flash MX: Škola hrou VI. - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Go verze

Flash MX: Škola hrou VI.

25. dubna 2003, 00.00 | Pokračujeme s výrobou hry typu "střílečka". Tentokrát hlavně Actionscriptem.

Tento tutoriál navazuje na předchozí díl a bude hlavně o Actionscriptu. Dnes budeme tvořit toto:

Zdrojový soubor je zde.

Ovládání letadla je zabezpečeno scriptem uloženým přímo na objektu LETADLO. Každý takto umístěný script musí začínat frází onClipEvent (), což je velmi praktická pomůcka, určující vlastnosti scriptu:

 Z obrázku je patrná možnost výběru. Nejpoužívanějšími jsou:

    onClipEvent (Load) {
       
- script bude proveden pouze jednou - v okamžiku načtení objektu
    }

    onClipEvent (EnterFrame) {
       
- akce v každém snímku
    }

        případně kombinace Mouse nebo Key pro spuštění AS při stisku/pohybu myši nebo kláves.

Objekt LETADLO tedy obsahuje:

onClipEvent (enterFrame) {
    if (Key.isDown(Key.RIGHT)) {
        if (this._x<300) {
            this._x += 5;
        }
    }
    if (Key.isDown(Key.LEFT)) {
        if (this._x>15) {
            this._x -= 5;
        }
    }
    if (Key.isDown(Key.UP)) {
        if (this._y>10) {
            this._y -= 5;
        }
    }
    if (Key.isDown(Key.DOWN)) {
        if (this._y<390) {
            this._y += 5;
        }
    }
    if (nabito<1) {
        if (Key.isDown(Key.SPACE)) {
            nabito=8;
            _root.objekty.strela.gotoAndPlay (3);
            _root.objekty.strela._y=_root.objekty.letadlo._y;
            _root.objekty.strela._x=_root.objekty.letadlo._x;
        }
    } else {
        nabito--;
    }
}

- programový obsah závorek se provede každý snímek:
onClipEvent (enterFrame) {
}

- podmínka zjišťující stav klávesy "šipka vpravo":
    if (Key.isDown(Key.RIGHT)) { 
- je-li podmínka splněna...

- další podmínka:
        if (this._x<300) {
            this._x += 5;        
- změna pozice na ose Y
        }
    }

Nic složitého, podobný způsob jsme již použili při tvorbě minulé hry. Pro pochopení principů AS mají tyto jednoduché příklady ohromný význam a pokud sledujete náš seriál od začátku, asi jsem vás tímto moc neoslnil.

    if (nabito<1) {
        if (Key.isDown(Key.SPACE)) {
            nabito=8;
            _root.objekty.strela.gotoAndPlay (3);
            _root.objekty.strela._y=_root.objekty.letadlo._y;
            _root.objekty.strela._x=_root.objekty.letadlo._x;
        }
    } else {
        nabito--;
    }

Podmínka if (nabito<1) je pouhou redukcí rychlosti střelby. Protože pro střelbu použijeme pouze jednu kulku, je třeba zabezpečit, aby nevylétla dříve, než předchozí střela zmizí ze scény. Proto řádek s nabito-- provádí každý snímek snížení této proměnné o hodnotu 1. Odpočet je proveden v případě, že proměnná nabito >=1, a to díky části } else { :

    if (nabito<1) {
    } else {       
- pokud není splněna podmínka...
        nabito--;
    }

Pro střelbu je nabito v případě, že proměnná nabito=0, a je-li nabito, může dojít k výstřelu:

    if (Key.isDown(Key.SPACE)) {
        nabito=8;
        _root.objekty.strela.gotoAndPlay (3);
        _root.objekty.strela._y=_root.objekty.letadlo._y;
        _root.objekty.strela._x=_root.objekty.letadlo._x;
    }

Splněním podmínky, zjišťující stav klávesy SPACE, dojde k:
- momentálnímu vybití (nabito=8),
- spuštění akce na smínku č. 3 v objektu střela,
- umístění střely na pozici letadla.

Co se děje v objektu střela? Co jiného, než že vyletí kulka...

... akce na snímku č. 3 zastaví přehrávání (mohli jsme tedy klidně použít odkaz typu gotoAndStop místo gotoAndPlay - to nic) a hlavně načte objekt KULKA, který na tomto snímku čeká. No a následujícím scriptem umístěným na objektu KULKA mu udělíme zrychlení:

onClipEvent (enterFrame) {
    if (this._x+_root.objekty.letadlo._x>370) {
        _root.objekty.strela.gotoAndStop(5);
    }
    this._x+=40;
}

Každým snímkem se pozice na ose X změní o hodnotu 40. Vložená podmínka zajistí účinnost střely pouze na ploše scény.

Na časové ose MC OBJEKTY je na snímku č. 5 toto:

i==1 ? i=4 : i=1;
if (letadlo.hitTest(vyber.form["v"+(i)]) || letadlo.hitTest(vyber.form["v"+(i+1)]) || letadlo.hitTest(this.vyber.form["v"+(i+2)])) {
    vybuch.gotoAndPlay(2);
    vybuch._x=letadlo._x;
    vybuch._y=letadlo._y;
    letadlo._y=-1000;
    vyber.form.stop();
}

V podstatě se jedná o to, že každým snímkem se testuje kontakt letadla se třemi vetřelci z dané formace. Formací je vždy objekt FORM, což je název instance některého z objektů f1 až f5. Všechny tyto objekty mají stejný název instance, a proto stačí odkázat script na FORM.

Kontakt je testován pokaždé s jinou trojicí vetřelců. Důvodem je snížení nároků na výkon procesoru. Frame rate je nastaven na 30 FPS, takže kontakt s každým vetřelcem je testován 15x do vteřiny.

Nejprve je provedena výměna hodnot proměnné I.
Následuje podmínka: je-li letadlo v kontaktu s vetřelcem v1 nebo v2 nebo v3 ...
MC vybuch je přesunut na souřadnice letadla
letadlo je odklizeno někam stranou
a formace vetřelců jsou zastaveny.

Pozn.: Syntaxe hranatých závorek umožňuje zapsat script ve zkrácené podobě. Pokud i=1, potom vyber.form["v"+(i+1)] není nic jiného, než vyber.form.v2.

V objektu VYBUCH je letadlo rozděleno na 4 MC a každý obsahuje tento script:

onClipEvent (load) {
    rotace = 50*Math.random()-25;
    smerX = 6*Math.random()-3;
    smerY = 4*Math.random()-3;
}
onClipEvent (enterFrame) {
    this._rotation += rotace;
    this._x += smerX;
    this._y += smerY+pad;
    pad += 0.1;
}

takže nejprve je proměnné rotace přiřazena hodnota z intervalu <-25,25> dle náhodného výběru atd.

a následně jsou trosky letadla vymrštěny náhodným směrem s náhodnou rotací a díky pad += 0.1 padají k zemi.

Zatím toho moc nesestřelíte - možná tak sami sebe. Příště to ale bude rozhodně lepší a vetřelci to poznají na vlastní kůži!

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Webdesign  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: