Autor Zpráva
Tonny
Profil *
Ahoj,

snažím se o vytvoření izometrického enginu v HTML5 (Canvas) a už mi to docela funguje, nicméně jsem narazil na problém, který zatím nejsem schopen vyřešit (ač jsem googlil):

V tomto problému figurují dvě funkce. jednak drawAll(); pomocí které se vykreslí všechny dlaždice a potom pushHero();, která má za úkol správně umístit hrdinu na mapě.

Funguje to správně v případě, že je hrdina v popředí a není třeba aby byl zastíněn nějakým blokem:

V opačném případě to už tak dobrý není - kostka co je před ním by mu měla zakrývat kus těla (snad je to z toho obrázku trochu patrný):



Chci se zeptat, je-li možné docílit správného překreslování, aniž bych modifikoval tu funkci drawAll(). (Bojím se, že není...)
Máte-li někdo nějaký nápad, jak to řešit, budu vděčný za jakoukoli radu :)

Díky moc
Tonny
Radek9
Profil
Tonny:
Asi ji nemusíš nějak extra modifikovat, ale pushHero bych volal před ní a až potom bych vykresloval bloky včetně postavičky.
Tonny
Profil *
Asi to dělám moc jednoduše, ale mám tyhle dvě funkce jsou zatím úplně odděleny a funguje to asi takhle:

dawAll() - postupně projde dvojrozměrné pole, ve kterém jsou uloženy instance s informacemi o dané buňce (obrázek, offset_x, offset_y), a na jejich základě je vkreslí do canvasu.

potom volám pushHero(), která vezme souřadnice na kterých by měl být hrdina, přepočítá je do izometrického zobrazení a pak ho na tyto souřadnice vykreslí.

Pokud bych funkce volal v opačném pořadí, hrdina by byl vždy překryt krajinou :(
Radek9
Profil
Tonny:
Při volání pushHero zařaď postavičku na správnou pozici do onoho pole mezi buňky. Při vykreslování v drawAll pak rozlišuj, jestli jde o buňku, nebo postavičku. Jinak není nic potřeba měnit.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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