Autor Zpráva
Jarek286
Profil *
Ahoj,
snažím se vytvořit jednoduché bludiště (zdi = obdélníky, pohyb kulička), žádné složitosti. Ale nastal problém, když jsem chtěl testovat kolizi kuličky se zdí. Zkoušel jsem hittest, ale vůbec se mi nedaří. Nemáte někdo takovýdle bludiště hotový? Nebo odkaz na nějaký tutoriálek? Rada? Dělám v AS2 (nejsem programátor, jenom nadšenej taťka malýho luštitele). Jarek
Jarek286
Profil *
Prosím, prosím, to tu nikdo není, aby poradil???
Celý ten problém je v tom, že těch zdí je tam moc a není možné ten hitTest dělat na 200 objektů - potřeboval bych poradit, jak udělat kolizi jenom na nakreslený objekt (MC), který bude obsahovat celý bludiště. Nebo by šlo do toho testu nějak vložit cyklus - pokud bych ty zdi všechny pojmenoval (instance) a lišily by se jenom pořadovým číslem. Jarek286
DoubleThink
Profil *
Nemusíš ověřovat 200 objektů - můžeš je vložit do dalšího o ověřovat jen jeho kolizi.

Viz metodu flash.display.DisplayObject.hitTestPoint s parametrem shapeFlag = true, která zjistí, jestli je daný bod nad neprázdným pixelem onoho DisplayObjectu.

Ekvivalentně funguje v AS2 metoda hitTest objektu MovieClip.
Jarek286
Profil *
Díky za snahu. Ta metoda, na kterou ses odkázal je pro AS3 (jestli to dobře chápu). V AS2 je to jinak – ten hitTest(), ale nemůžu najít referenční příručku pro AS2, abych se mrknul jak to napsat. Na adob.com pro AS2 už nejde. Takže podrobněji, prosím.

Mám kuličku MC (charakter) - kterou ovládám stiskem kláves (UP, DOWN, LEFT, RIGHT). Mám MC bludiste (který obsahuje těch 200 zdí - taky MC (zed1-zed200). Když napíšu (do AS instance toho charakteru):

on (keyPress "<left>"){
pozice_x = getProperty(this,_x);
krok = 1;
if (hitTest(_root.bludiste)) {
setProperty(this,_x,pozice_x+2);
}else{
setProperty(this,_x,pozice_x-krok);
}
}

….(ekvivalentně pro další klávesy….)

tak mi to nefunguje, protože to testuje kolizí s celým tím rámečkem (ohraničením celýho bludiště). Takže prosím, prosím, co tam vorám, nebo co mi tam ještě chybí, jak by ten kód měl být? Díky předem Jarek
DoubleThink
Profil *
Jarek286:
nemůžu najít referenční příručku pro AS2, abych se mrknul jak to napsat. Na adob.com pro AS2 už nejde
Nesmysl, ActionScript 2.0 Language Reference.

Zaměř se na parametr shapeFlag, který existuje i v 2.0 verzi. Metoda s ním funguje jinak (bere v úvahu obsah objektu, ne jen bounding box).
Jarek286
Profil *
DoubleThink:
Hm.... s tvým odkazem jsem už příručku otevřel - ale moc mi to nesdělilo. A ten kód, co tam uváděj mi taky nejde. Jinak dobrý....Nejvíc by mi ale pomohlo, kdybys mi třeba kousek kódu napsal. Jarek
DoubleThink
Profil *
Promiň, nepamatuji si přesně, jak to bylo v AS2. Musel bych otevřít Flash a zkusit to - a to už by tě stálo nejmíň pětistovku.
Ten příklad v manuálu je určitě funkční, prostuduj si ho pečlivěji.
Jarek286
Profil *
DoubleThink:
Hm, i když jsi mi moc nepomohl, díky za snahu. J
nepřihlášený XXX
Profil *
Jarek286:
Pokud se snažíš vytvořit opravdu jen klasické bludiště, které je tvořeno mřížkou, jinými slovy je tvořeno buď čtverci nebo obdelníky, neřeš to vůbec testováním kolizí s objekty, ale vytvoř si pole, např. dvojrozměrné, které ti bude sloužit jako taková skrytá mapa pro testy kolizí. Pozice, kde má být zeď budou v poli např. jako číslo jedna, volný prostor nula. Kulička bude např na pozici [2,2], je tedy jasné, že tato pozice v poli má hodnotu 0. Pro další pohyb připadají v úvahu pozice [1,2], [2,1], [3,2] a [2,3], což jsou zároveň čtyři směry, do kterých se může kulička pohybovat. Pokud je stisknuta šipka do leva, uživatel se snaží dostat na pozici [1,2], stačí jen otestovat, jestli na této pozici je v poli nula. Pokud ne, nemůže se tímto směrem pohnout. Abych to shrnul, stačí ti v každém pokusu o změnu směru otestovat jen jedno číslo v poli ;)

XXX

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0