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:
-
5. září 2024
Matrixmedia - Obsluha a tisk na velkoformátových digitálních tiskárnách
-
30. září 2024
-
4. října 2024
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":
- je-li
podmínka splněna...
if (Key.isDown(Key.RIGHT)) {
- další podmínka:
- změna pozice na ose Y
if (this._x<300) {
this._x += 5;
}
}
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) {
-
pokud není splněna podmínka...
} else {
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):
- Flash 5: škola hrou
- Flash 5: Škola hrou II.
- Flash 5: Škola hrou III.
- flash 5: Škola hrou IV
- Flash MX: škola hrou V.
- Flash MX: Škola hrou VI.
- Flash MX: Škola hrou VII.
-
14. května 2014
Jak vkládat snímky do galerií a soutěží? Stručný obrazový průvodce
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
12. června 2012
-
9. dubna 2014
-
29. listopadu 2013
-
6. září 2004
OKI snižuje ceny barevných laserových tiskáren C3100 a C5200n
-
13. května 2004
-
19. ledna 2004
QuarkXPress Passport 6: předvedení nové verze na konferenci Apple Forum 27.1.2004
-
6. února 2001
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
5. srpna 2024
Bubnový scanner na 4000dpi optické rozlišení + PC + software
-
8. září 2024
-
14. října 2024
-
5. listopadu 2024