Python týden Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python

Diskuze: Problém se sekáním o zdi při klasickém řešením pohybu postavy

Aktivity (1)
Avatar
Bartoloměj Ikrop:30.1.2018 11:40

Dobrý den,

dobrý den mám takový problém který se mi nedaří vyřešit ani najít odpověď. Vysvětlím na přiloženém obrázku...

Pohyb hráče řeším tak, jak je ukázáno na obrázku A... a kolizi se zdí jak je ukázáno na obrázku B ... a pokud je to takto a nebo i jakkoliv jinak, tak pokud hráč přichází ze šikmého směru a narazí do zdi uplně se zastaví. Chtěl bych aby pokud třeba hráč přicházel z prava dolů a narazil do zdi vlevo, tak aby se jeho pohyb dolů nezastavil ale pokračoval už jen ne směru dolů... takhle to funguje tak, že se postava uplně zasekne, protože má kolizi s tou zdí, která jí udává že má stát. Prosím jak to mám vyřešit. děkuji.

 
Odpovědět 30.1.2018 11:40
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Bartoloměj Ikrop
TomBen:30.1.2018 23:22

GM základní systém kolizí je trochu neohrabaný a hodí se pouze pro nejjednodušší případy. Jinak se obvykle používá Box2D fyzika, která je v GM defaultně k dispozici od verze GM Studio. Tvůj případ by měl jít ale i tím základem. Jen to nedělej kolizním eventem. Uvědom si, že ten nastane až tehdy, když se objekty překrývají - čili pozdě. Určitě to půjde líp pomocí predikce pohybu. Než se objekt skutečně pohne, otestuješ jestli na jeho budoucí pozici něco leží a podle toho ten pohyb dovolíš nebo ne. Tak to je u většiny řešení, která najdeš na netu. Přibližný princip je podobný této ukázce z manuálu GM:

if keyboard_check(vk_left) { if !place_meeting(x - 5, y, obj_wall) x -=5; } //zeď brání pohybu vlevo

Teoreticky můžeš taky použít návrat na pozici xprevious, yprevious. Něco jako toto ve Stepu:

if place_meeting(x, y, obj_wall) { x=xprevious; y=yprevious; }  //kontakt se zdí vrátí původní polohu

Ale nehodí se to na složitější pohyby, protože to vrátí jakoukoliv předchozí pozici ( i špatnou ). Takže náraz do více zdí najednou ( roh ) může přinést nečekané problémy. Nicméně některé věci jdou šikovně ošéfovat až při leveldesignu například vzdálenostmi překážek.

Nahoru Odpovědět 30.1.2018 23:22
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Bartoloměj Ikrop:3.2.2018 16:51

Děkuji :) púomohlo to. Zahrnu tě do titulků jako odbornou konzultaci u hry která bude tak těžká že jí stejně nikdo nedohraje. Ještě jednou děkuju.

 
Nahoru Odpovědět  +1 3.2.2018 16:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.