Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
daw-5
Člen
Avatar
daw-5:14.11.2013 16:51

Ahoj všichni,

chtěl jsem se zeptat, mám takový problém, dělám jednoduchou hru, ve které potřebuji, aby se dvě kuličky(kruhy je to ve 2D) od sebe odrážely.
Při kolizi jsem použil tuto funci:

{
move_bounce_so­lid(true);
}

Ale občas se mi stane např. v rohu, že se ty objekty o sebe zaseknou a už se nerozjedou:(

Myslíte, že byste mi s tím mohl někdo pomoci?
Děkuji

 
Odpovědět
14.11.2013 16:51
Avatar
Odpovídá na daw-5
Zdeněk Pavlátka:14.11.2013 16:52

Co máš nastavené u kolize s krajem? A jak rychle se kuličky pohybují?

Nahoru Odpovědět
14.11.2013 16:52
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
daw-5
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
daw-5:14.11.2013 16:55

U kolizí mám nastavený klasický bounce a rychlost mám od 5 do 10 postupně se zrychlují

 
Nahoru Odpovědět
14.11.2013 16:55
Avatar
Odpovídá na daw-5
Zdeněk Pavlátka:14.11.2013 17:42

Mám na mysli kraj okna(obrazovky, room)

Nahoru Odpovědět
14.11.2013 17:42
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na daw-5
TomBen:14.11.2013 19:45

Bounce je jednoduchá funkce a má svá omezení. Zasekávání je jedno z nich.
Existují cesty jak z toho ven, ale jednak není žádná snadná a většinou zas přinášejí jiné potíže.
Například když máš rychlost vyšší než 1, vždycky může nastat situace, že se budou objekty zasekávat. Je to tím, že jeden step pohybu je schopen dostat objekt dovnitř jiného objektu o více než jeden pixel a při výpočtu odrazu se objekt není schopen posunout z dosahu kolize.

Editováno 14.11.2013 19:45
Nahoru Odpovědět
14.11.2013 19:45
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
daw-5
Člen
Avatar
daw-5:14.11.2013 20:02

Aha, takže z toho prostě není cesty ven? :/

Nastavení kolize s okrajem nemám žádnou, udělal jsem si objekt jako stěnu takže jsem neřešil co se jinak stane :/

 
Nahoru Odpovědět
14.11.2013 20:02
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na daw-5
TomBen:14.11.2013 20:21

Jak jsem už psal, cesty jsou.
Nejlepší a taky nejtěžší způsob je externí dll.
Např.: http://www.maartenbaert.be/extremephysics/
Další cestou je napsat skript nahrazující funkci bounce přímo v gml.
Lze tak pracovat s odrazem detailněji i když oproti dll pomalu.
Pak lze taky bounce ponechat a snažit se likvidovat kritické situace
buď předcházením nebo korekcí pohybu po odrazu.
Většinou se ale lidi spokojí s vestavěnou funkcí. Při správném
nastavení masek spritů dochází k zasekávání jen málokdy.

Editováno 14.11.2013 20:21
Nahoru Odpovědět
14.11.2013 20:21
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
daw-5
Člen
Avatar
daw-5:14.11.2013 22:15

Tak děkuji moc vyzkouším to

 
Nahoru Odpovědět
14.11.2013 22:15
Avatar
Odpovídá na daw-5
Zdeněk Pavlátka:15.11.2013 16:48

Zaseknutá kolečka od sebe můžeš ručně oddálit přes zjištění směru k druhému kolečku a použití

lengthdir_x() a lengthdir_y()

pro opačný směr. Funguje to dobře a je to jednoduché. Že se zasekli poznáš podle toho, že se jejich pozice nemění.

Nahoru Odpovědět
15.11.2013 16:48
Kolik jazyků umíš, tolikrát jsi programátor.
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 9 zpráv z 9.