Autor Zpráva
petr
Profil *
Dobrý den, zalíbila se mi jedna hra s autíčkem(ovládání: Y - doleva, X - doprava, R - restartování hry), která je součástí ukázkových souborů knihy Programujeme hry v HTML5. Tato hra využívá herní engine Box2D. Chtěl bych si ji přepracovat do suchého javascriptu bez enginu.
Ježdění autíčka po rovných "površích" je to jednoduché: při stisku klávesy se přičte poloha autíčka na souřadnici x, ale jak je to u členitých? Tam se očekává, že autíčko bude "ležet" na zemi, ale vůbec nevím, jak toho dosáhnout.

Díval jsem se do kódu a hledal jsem po internetu, ale z kódu moc moudrý nejsem a na internetu jsou jen míčky (např. tady), které se odrážejí od země, a to asi není vhodným řešením problému.

Mohli byste mi poradit nebo mi alespoň říct, že to nejde? :D
_es
Profil
petr:
Chtěl bych si ji přepracovat do suchého javascriptu bez enginu.
Nevieš do hry „zapracovať“ jednoduché rovnice gravitácie, trenia, odporu vzduchu a pod. a pritom chceš nahradiť knižnicu na prácu s tým za vlastnú?

ale jak je to u členitých?
Veď tá hra je tiež „členitá“ a gravitáciu uvažuje. Ak vozík rozbehneš len pomaly, tak sa na svahu zastaví a rozbehne späť.

Mohli byste mi poradit nebo mi alespoň říct, že to nejde? :D
Samozrejme, že to ide, záleží aj na tom, čo všetko sa do toho zapracuje: gravitácia, valivý odpor, trenie, odpor vzduchu, ...

Díval jsem se do kódu a hledal jsem po internetu, ale z kódu moc moudrý nejsem a na internetu jsou jen míčky
Skús nejaké učebnice fyziky :-)
Chamurappi
Profil
Reaguji na petra:
Box2D je docela schopný a komplikovaný bumbrlíček, tuto knihovnu používají i známé hry (třeba Angry Birds, Limbo,). Zreprodukovat všechno, co umí, není práce na pár minut :-)
Ale základní jednoduchá fyzika pohybů, kterou bys asi chtěl, zase tak složitá není.

při stisku klávesy se přičte poloha autíčka na souřadnici x
Ne, přičte se rychlost. Ta bude vektor (tzn. sama bude mít složky x a y).
A gravitace nebude nic víc než další síla, která na autíčko působí… respektive zrychlení, které se ti každý herní snímek přičte k rychlosti.

ale jak je to u členitých?
Budeš si muset napsat jednoduchou detekci kolizí. Není to zase tak velká věda, jak to na první pohled vypadá.
petr
Profil *
_es:
Nevieš do hry ‚zapracovať‘ jednoduché rovnice gravitácie, trenia, odporu vzduchu a pod. a pritom chceš nahradiť knižnicu na prácu s tým za vlastnú?
Asi jsem se špatně vyjádřil. Nejde mi přesně o gravitaci jako takovou, nejde mi ani o žádnou sílu větru nebo co. Jde mi jen o to, aby autíčko nejelo tvrdohlavě "do terénu", ale po terénu: aby prostě neprojelo kopcem jako duch a aby nelétalo. Doufám, že jsi si nemyslel, že chci udělat sám celou knihovnu! Takový blázen snad ještě nejsem. :D

Chamurappi:
Budeš si muset napsat jednoduchou detekci kolizí.
Úplně nechápu, k čemu detekce kolizí? Nevidím dva objekty, které by se měly srazit. Ledaže by to bylo auto a jednotlivé části země, a kdyby došlo ke kolizi na některé z nich, tak by se auto více natočilo nahoru: ovšem to neřeší, aby auto "nelétalo".
Chamurappi
Profil
Reaguji na petra:
Viz reálný svět. Předpokládám, že tvé tělo se teď nejspíš také nevznáší ve vzduchu, ani neprochází skrz podlahu – což je důsledek kolize tvé hmoty s hmotou židle, na které sedíš, a gravitační síly, která tě trvale tlačí do středu planety. Nepředstavuj si kolizi jako ničivou srážku, ale jako přesah dvou objektů přes sebe. Pokud po výpočtu pozice autíčka dochází k přesahu s částí země, musí se pozice upravit tak, aby k němu nedocházelo. Mnou odkázaný návod od Metanetu ti vysvětlí, jak to udělat správně.

Pro začátek můžeš na gravitaci zapomenout, zkus si vyrobit obecně pohyb předmětu v obou osách, při němž budeš narážet do věcí. Až budeš mít tohle zmáknuté, přičtení gravitace bude hračka.
petr
Profil *
Chamurappi:
..., musí se pozice upravit tak, aby k němu nedocházelo. Mnou odkázaný návod od Metanetu ti vysvětlí, jak to udělat správně.
Ten návod je moc pěkný, jen tam není popsáno, jak ty pozice upravit. Je to opravdu jen obecná kolize.

zkus si vyrobit obecně pohyb předmětu v obou osách
Mohlo by to být takhle? Je to upravená verze tohoto skriptu.
Chamurappi
Profil
Reaguji na petra:
jen tam není popsáno, jak ty pozice upravit
Je. V tamních flashových ukázkách (s nimiž můžeš hýbat) bývá potřebný posun znázorněný fialovou šipkou.

Mohlo by to být takhle?
Pokud chceš mít jen obdélníky a žádný nebude natočený, tak pro začátek ano – ještě tam nemáš to vystrčení pozice tak, aby ke kolizi nedocházelo.
petr
Profil *
Chamurappi:

Pokud chceš mít jen obdélníky a žádný nebude natočený
Obdélníky mi k vytvoření terénu stačí, ale natočené. Našel jsem podle mě dobrý návod, ale moc tomu nerozumím. Potřeboval bych asi nějaký příklad použití.

ještě tam nemáš to vystrčení pozice tak, aby ke kolizi nedocházelo.
Opraveno.
petr
Profil *
Řekl jsem si, že by bylo docela jednoduché si takovou kolizi udělat podle sebe. Rozhodl jsem se, že budu kontrolovat jednotlivé vrcholy. Nejprve je třeba vypočítat souřadnice jednotlivých bodů. Pokoušel jsem se otočený obdélník nejprve nakreslit, ať vím, na čem jsem.
Ano, to je sice pěkné, že to vypadá jako 3d, ale já bych chtěl raději 2d. Zkoušel jsem zaměnit šířku a výšku u points[2]. Pravé rohy jsou tam vždy, ale z nějakého důvodu mi tam funguje jen čtverec a když se zadají délky pro obdélník, tak to navíc ještě dělá divné věci jako zpomalování, zrychlování otáčení a zvětšování, zmenšování čtverce. (viz. odkaz)
Proč a jak to opravit?

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: