Autor | Zpráva | ||
---|---|---|---|
Jarek286 Profil * |
#1 · Zasláno: 22. 8. 2011, 17:22:55
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 * |
#2 · Zasláno: 23. 8. 2011, 19:17:58
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 * |
#3 · Zasláno: 23. 8. 2011, 22:05:20
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 * |
#4 · Zasláno: 24. 8. 2011, 09:12:51
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 * |
#5 · Zasláno: 24. 8. 2011, 14:09:23
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 * |
#6 · Zasláno: 24. 8. 2011, 16:46:36
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 * |
#7 · Zasláno: 24. 8. 2011, 16:59:12
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 * |
#8 · Zasláno: 25. 8. 2011, 21:07:51
DoubleThink:
Hm, i když jsi mi moc nepomohl, díky za snahu. J |
||
Časová prodleva: 1 měsíc
|
|||
nepřihlášený XXX Profil * |
#9 · Zasláno: 4. 10. 2011, 10:21:20
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 |
||
Časová prodleva: 13 let
|
0