ZyperPL Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 Yo! Czy istnieje w GMie jakaś sprawna komenda, dzięki której mógłbym przy kolizji obiektu ze ścianą przesuwać ten obiekt po krawędzi. Tzn. gdy używam znanych mi komend postać, albo odskakuje (move_bounce), albo haczy się jak o papier ścierny (np. x=xprevious). Dlatego pytam jak zrobić jakieś płynne spowalnianie gdy idzie się na ścianę w grze TOPDOWN. Jest jakaś sprytna funkcja? Z góry dzięki za pomoc. Jeszcze jedno, jak można sprawdzić czy obiekt koliduje z pathem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 if place_free(x+speed,y){ speed-=1} to do sciany ktora jest na prawo od postaci, innego sposobu nie znam a kolidacje z pathem trzeba zrobic za pomoca collision_line Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 Mógłbyś bardziej wytłumaczyć to z tym collision_line? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zelman Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 collision_line jest ######ste, bo jak kiedyś zrobiłem wrogów z tym, w chwilę po uruchomieniu gry kręcili się w kółko wokół własnej osi :D E: https://gmclan.org/index.php?wiki=article&zm=61 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 Wielkie dzięki ;) Szkoda tylko, że nie ma jakiegoś rozwiązania dla mojego głównego, ważniejszego problemu. Musiałbym jakoś sprawdzać direction... Hmm... Moja gra jest gość prosta, bo ściany z którymi koliduje gracz są kwadratowe a nie różnego kształtu. Więc jeśli postać nie idzie wprost na ścianę to powinna iść jakoś wolniej. Pomoże ktoś? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zelman Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 Zrób tak, że jeśli odległość do ściany jest ileśtam to prędkość obiektu jest dzielona przez ileśtam albo mniejsza i tyle Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 https://gmclan.org/up6357_12_projekt.html trzeba to jeszcze dopracowac, bo klikajac ciagle do przodu postac i tak przejdzie przez sciane, ale nie mam na to czasu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 Dobra, dzięki, właśnie tak zrobiłem, że zmniejszam prędkość, ale męczę się jeszcze z collision_line. Co niby jest nie tak w tym kodzie, że nie działa? GML if collision_line(randompunkt2.x,randompunkt2.y,randompunkt1.x,randompunkt1.y,self,1,0) {instance_destroy();} EDIT: Chciałem zrobić, żeby między randompunktem1 a randompunktem2 kasowały się blocki. :P Jednak nie wiem czy dobrze tej funkcji użyłem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zelman Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 A gdzie to wpisałeś? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 A gdzie to wpisałeś? W Create. Ale chyba kolejność zdarzeń jest dobra i to się dzieje jak już są te punkty. Czekajcie sprawdzę... Nom... to się dzieje, kiedy już wszystko jest na mapie. Czyli we właściwej kolejności :P Dałem w Create zamiast tego distance_to_object cośtam to instance_destroy() i takie coś działa. Tylko nie wiem dlaczego z tym collision_line nie :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 Co do kolizji ze ścianami (zapomniałem odświeżyć stronki :D ) Spróbuj ten kod wstawić do obiektu bohatera to zdarzenia kolizji ze ścianą: GML // zapisanie informacji o kącie zderzenia var dir; dir = point_direction(x, y, other.x, other.y); // podział na poszczególne reakcje if ((dir >= 45 && dir <= 135) || (dir >= 225 && dir <= 315)) y += abs(vspeed)*sin(degtorad(dir)); if ((dir >= 135 && dir <= 225) || (dir >= 315 || dir <= 45)) x -= abs(hspeed)*cos(degtorad(dir)); Mam nadzieję, że o to chodzi. Działa na zasadzie odbicia, ale tylko składowej prędkości i tylko o wymaganą wartość. Ale musisz mieć do tego originy w środku ścian i w miarę kwadratowe maski (obrazki do sprawdzania kolizji). Tylko wtedy działa, za to efekt jest taki jak powinien być. Co do kolizji ze ścieżką - niestety nie pomogę, nie znam się na ścieżkach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 bo create wykonuje się tylko przy stworzeniu... przenies np., do stepa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 Chciałem zrobić, żeby między randompunktem1 a randompunktem2 kasowały się blocki GML with(all){ if collision_line(randompunkt2.x,randompunkt2.y,randompunkt1.x,randompunkt1.y,self, 1,0) {instance_destroy();} } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 GML with(all){ if collision_line(randompunkt2.x,randompunkt2.y,randompunkt1.x,randompunkt1.y,self, 1,0) {instance_destroy();} } Jak to wstawiam to nic się nie dzieje :/ Dawać to z Create czy nie? Edit: Daje w Step, to zalagowuje grę. ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 moze zamiast self powinno byc other, nie pamietam juz tych wszystkich gm'owych funkcji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 Hmm... Nic nie działa. Pomoże mi ktoś jeszcze? Nawet jak nie czytałeś tego tematu.. pomóż mi. Pobierz to i spróbuj coś zrobić. https://gmclan.org/up5269_12_collisionlineblock.html Nie możliwe, że nie można tego zrobić :D Przecież musi być jakieś rozwiązanie. Specjalnie okrajałem moją grę, żebyście mogli pobrać i sprawdzić. Więc proszę spróbujcie coś wykombinować, bo ja się męczę cały dzień i nic :P https://gmclan.org/up5269_12_collisionlineblock.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 3 Maja 2011 Udostępnij Opublikowano 3 Maja 2011 https://gmclan.org/up6357_12_jestem_######s...rogramista.html lol, ocenzurowalo mi link :D powinno byc jestem_zaj!ebi!stym_programista bez ! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 3 Maja 2011 Autor Udostępnij Opublikowano 3 Maja 2011 No, wystarczyło powiedzieć, że trzeba "id" wpisać. To ja się tak głowie, a to wina dwóch literek? :D Dzięki, Zajeb!sty programisto! Podwójnie bo za kolizję też. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi