pomoc se stěnou

Pokud si nevíte s něčím rady ohledně tvorby v Game Makeru - pište sem!
Odpovědět
filtr
Příspěvky: 6
Registrován: listopad 19, 2014, 8:58 pm
Facebook: http://facebook.com/

pomoc se stěnou

Příspěvek od filtr » únor 11, 2017, 6:24 pm

Zdravím vás,dělám hru kde jezdí lodě mezi meteority a mám jeden problém, když loď najede do meteoritu ,tak se odrazí s tím problém není ,ale když loď stojí u meteoritu a zmáčknu D nebo A

Kód: Vybrat vše

if keyboard_check(ord('A')) { image_angle+=3}
if keyboard_check(ord('D')) { image_angle-=3}
tak loď najede do stěny meteoritu a nemůže vyjet ven.
Všechny mé pokusy to vyřešit skončily jen polovičním úspěchem ,tak prosím pomozte .Na hře pracuji už 4 měsíce a nerad bych zasekl na takové prkotině.Děkuji předem za odpověď.

Uživatelský avatar
ipq
Příspěvky: 924
Registrován: srpen 15, 2011, 7:31 pm
Bydliště: Petržalka

Re: pomoc se stěnou

Příspěvek od ipq » únor 11, 2017, 6:50 pm

Skús použiť tento script pri kolízií:

Kód: Vybrat vše

x=xprevious
y=yprevious
V prípade, ak je to s opačnej strany ako toho asteriodu, tak tam pred x a y doplň other. pred nimi.

A tak tiež si skontroluj masku, pravdepodobne objekt používa masku lode a tá keď je nepravidelná, tak samozrejme pri otáčaní spritu sa mení maska a môže dojsť k zaseknutiu, bolo by dobré spraviť na mieru toho spritu sprite masky vo tvare gule so stredových originom alebo obdĺžnik a na objekt lode to aplikovať ako samostatnú masku.

filtr
Příspěvky: 6
Registrován: listopad 19, 2014, 8:58 pm
Facebook: http://facebook.com/

Re: pomoc se stěnou

Příspěvek od filtr » únor 11, 2017, 7:05 pm

Děkuji za radu, bohužel to chybu dělá pořád

Uživatelský avatar
katarina.ptg
Příspěvky: 38
Registrován: prosinec 7, 2016, 5:35 pm
Facebook: https://www.facebook.com/katarina.ptg

Re: pomoc se stěnou

Příspěvek od katarina.ptg » únor 11, 2017, 8:09 pm

Asi by to chcelo ukázať viac z kódu.

Goblin
Příspěvky: 136
Registrován: červenec 2, 2014, 2:42 pm

Re: pomoc se stěnou

Příspěvek od Goblin » únor 11, 2017, 10:28 pm

Existuje několik způsobů jak tohle obejít. Nejjednodušší asi je vůbec nepoužívat image_angle, který otáčí nejen spritem, ale i kolizní maskou (x_previous a y_previous fungovat nemohou, protože v samotné pozici objektu není problém). Místo toho měj v objektu rakety proměnnou "Angle", kterou v Create nastav na 0.

Ve stepu:

Kód: Vybrat vše

if keyboard_check(ord('A')) { Angle+=3}
if keyboard_check(ord('D')) { Angle-=3}
V drawu:

Kód: Vybrat vše

draw_sprite_ext(x,y,sprite_index,image_index,image_xscale,image_yscale,Angle,c_white,1)
Nezapomeň používat Angle i v kódu svého pohybu (předpokládám, že používáš "W" ke zrychlení daným směrem).

To, co tohle udělá je, že otáčet se bude jen obrázek, ale kolizní maska zůstane nastavená stejně. I tak bude ale nejlepší použít kruhovou masku, jak už napsal ipq. Jinak hrozí, že budou kolize pro hráče dost neintuitivní vzhledem k tomu, co uvidí na obrazovce.

Další možností by bylo nahradit metody kolizí tak, aby se v každém stepu ověřovala kolize s překážkou a loď by se v případě takové kolize přesunula nejkratší možnou cestou mimo. Takovéto "gumové kolize" už jsou ale těžší na implementaci a můžou dělat problémy při vyšších rychlostech...
"Understanding is not required. Only obedience."

chain
Příspěvky: 98
Registrován: leden 2, 2013, 3:41 pm
Facebook: http://facebook.com/

Re: pomoc se stěnou

Příspěvek od chain » únor 12, 2017, 8:53 am

Skusil by som to jednoduchsie, zmenil by som koliznu masku na kruh.Viem ze je to niekedy nevhodne ale vyriesi to s koliziou a pri zmene uhla spritu cely kopec problemov.
Okrem toho nebolo by zle tak ako tu bolo pisane pouzivat kazdy krok podmienku pre kontrolu blizkosti solid objektu a pri vzdialenosti od neho mensej ako 1 hned krok spat...

Goblin
Příspěvky: 136
Registrován: červenec 2, 2014, 2:42 pm

Re: pomoc se stěnou

Příspěvek od Goblin » únor 12, 2017, 9:50 am

Kruhová maska bohužel sama o sobě nic neřeší. Ani ona totiž není dokonale "kulatá" (je přeci jen složená z pixelů) a při otáčení bude pořád způsobovat zasekávání (i když pochopitelně o poznání méně než čtverec).


https://www.dropbox.com/s/57fbhefpmoszp ... a.gmz?dl=0
"Understanding is not required. Only obedience."

Uživatelský avatar
ipq
Příspěvky: 924
Registrován: srpen 15, 2011, 7:31 pm
Bydliště: Petržalka

Re: pomoc se stěnou

Příspěvek od ipq » únor 12, 2017, 6:58 pm

Solid by radšej vypol, pretože môže robiť komplikácie i napriek tomu, že tam je funkcia na odrazenie. Ešte keď som robil v GM, tak som sa naučil používať nesolidné objekty, nakoľko som zistil, že ten solid nerobí nejako dobre tomu, keď koliduje s predmetom, aj keď do objektu neuvediete, že má kolidovať s iným, stále sa môže stáť, že môže aj keď nechcete, tak som radšej začal preferovať non-solid metódu i keď je trochu zložitejšia ale fungovalo to.

Pri odraze by bolo dobré aj kontrolovať napr. smer toho dotyčného objektu, do ktorého narazil a potom pomocou toho zmeniť smer:

Kód: Vybrat vše

direction=point_direction(other.x,other.y,x,y);
Alebo spraviť kontrolu kolízie vo stepu pomocou:

Kód: Vybrat vše

if(distance_to_object(obj_kamen) < 16){//16 je veľkosť polomeru od originu
vspeed=-vspeed;
hspeed=-hspeed;
}
Ale aj tak, pokiaľ sa loď odrazí a dotyční dá znovu klávesu na pohyb dopredu, tak samozrejme dôjde k prudkej zmene a preto napr. môže dôjsť k nekontrolovanému záseku, dobré by bolo nastaviť postupný rozbeh na ten daný smer od odrazu ale tutorial, v ktorom to bolo už nemám.

Inak v Studio verzií sa dá kolízia pekne riešiť i za pomocou box2D. Možno to znie čudné ale ozaj s 2D fyzikou sa dajú robiť aj top-down hry napr. Angry Birds Space(žiadna gravitácia len na planétach v závislosti na dĺžke pola).

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti