dolaran Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Witam Potrzebuje pomocy w pewnej sprawie. Mam dwa obiekty „a” i „b” obiekt „a” jest wystrzeliwany w kierunku obiektu „b” i w czasie kolizji chcę aby obiekt „a” zatrzymał się w wewnątrz obiektu „b” jak mam to zrobić. Do dam, że zwykła kolizja z kodem stop daje zły efekt bo obiekt „a” zatrzymuje się przed obiektem „b”. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 jak to przed obiektem? obiekt ma ustawioną jakaś maskę? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kargul Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Przed obiektem czyli tuż jak się zderzy to się zatrzymuję. Aby zrobić że "wewnątrz" to hm... czy obiekt "b" to kółko z pustym środkiem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 wstaw to do kolizji: GML if x<other.x+abs(hspeed) and x>other.x-abs(hspeed) and y<other.y+abs(vspeed) and y>other.y-abs(vspeed) { speed=0; x=other.x; y=other.y; } nie jest to zbyt dobra metoda, lecz powinna działać. origin spritów obiektów powinien być w środku jeśli ten kod jest dla ciebie za mało precyzyjny, możesz również zastosować to: GML if speed!=0 direction=point_direction(x,y,other.x,other.y); if x<other.x+abs(hspeed) and x>other.x-abs(hspeed) and y<other.y+abs(vspeed) and y>other.y-abs(vspeed) { speed=0; x=other.x; y=other.y; } jeśli obiekt 1 będzie przelatywał obok środka obiektu 2, skręci do niego i dopiero w środku obiektu 2 się zatrzyma. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 To może sprawdzaj X i Y tego obiektu "a"? I jeśli są równe X i Y obiektu "b" to zatrzymuj go. O to chodziło? @UP: Szybsi :P Obiekt A E: GML if ((x == obj_b.x) && (y == obj_b.y)) { speed = 0; } ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 jak to przed obiektem? - stkają się obiekt ma ustawioną jakaś maskę? - oiekt b jest jako solid obiekt a jest o wiele mniejszy od b czy obiekt "b" to kółko z pustym środkiem? jest pełen, obiekt b jest kwadratem w obiekt a- ma Event, kolizja z b Action, Move Fixet, Stop, Relative Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 dzieki za bardzo szybkie odpowiedzi sprawdze to i dam odpowiedz Jest opcja edytuj, nie trzeba pisać postów w odstępie 2 minut. Złamanie regulaminu - doublepost. Warn+1 gnysek Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 w obiekt a- ma Event, kolizja z b Action, Move Fixet, Stop, Relative daj screenshota. spróbuj zastosować mój kod, bo będzie działał, ale jeśli koniecznie chcesz to zrobić na klockach, jest tam jakiś klocek "check if the expression is true" czy jakoś tam, to wrzuć do niego: x<other.x+abs(hspeed) and x>other.x-abs(hspeed) and y<other.y+abs(vspeed) and y>other.y-abs(vspeed) i nie doublepostuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szpaq99 Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Sorka że tu ale czemu wyskakuje błąd do tej linijki ? GML o = replace(6) instance_create(obj_hero.x+lengthdir_x(45,direction-20),obj_hero.y+lengthdir_y(45,direction-20),obj_bullet) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Sorka że tu ale czemu wyskakuje błąd do tej linijki ? GML o = replace(6) instance_create(obj_hero.x+lengthdir_x(45,direction-20),obj_hero.y+lengthdir_y(45,direction-20),obj_bullet) bo nie ma czegoś takiego jak replace? i dawaj treść błędu na przyszłość, NIE JESTEŚMY JASNOWIDZAMI Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szpaq99 Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Sorka chodziło mi o "repeat". Ale co zrobiłem źle. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Sorka chodziło mi o "repeat". Ale co zrobiłem źle. ctrl+c is your friend co to ma być o=repeat(6)? ty rozumiesz swój kod? GML repeat(6) { o=instance_create(obj_hero.x+lengthdir_x(45,direction-20),obj_hero.y+lengthdir_y(45,direction-20),obj_bullet); o.costam=costam; } nie wiem jaki był cel tamtego kodu, więc musiałem coś wymyśleć samemu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szpaq99 Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Bo ja chciałem zrobić shotguna. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 omg. no to zapamiętaj że jak chcesz repeat uzyc to dajesz GML ilosc=5; //np repeat(ilosc) { //kod ktory tu wstawisz wykona sie ilosc razy (w tym przypadku 5 razy) //podczas jednego stepa } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 Na szybko zrobiłem w Paint jak to ma wyglądać. 1 przykład jest zły bo obiekt zatrzymał się przed obiektem. 2 jest poprawny bo obiekt "a" jest w obiekcie "b" i tak samo 3 Tu jest link do przykładu https://gmclan.org/uploader/1167/bez_tytu_u.jpg Może źle się wyraziłem w pierwszym poście bo generalnie chodzi mi o to by obiekt wszedł do drugiego w całości i się zatrzymał nie koniecznie do samego środka. Sorry za duble zapędziłem się. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 GML collision_rectangle ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 GML if x<other.x+other.sprite_width/2-sprite_width/2+abs(hspeed) and x>other.x-other.sprite_width/2+sprite_width/2-abs(hspeed) and y<other.y+other.sprite_height/2-sprite_height/2+abs(vspeed) and y>other.y-other.sprite_height/2+sprite_height/2-abs(vspeed) { speed=0; } szybko zedytowałem swój kod. edit: trochę bardziej manualna metoda niż collision_rectangle, ale powinna działać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 GML if ( collision_rectangle( other.x - sprite_get_bbox_left( other.sprite_index ), y - sprite_get_bbox_top( other.sprite_index ), x + sprite_get_bbox_right( other.sprite_index ), y + sprite_get_bbox_bottom( other.sprite_index ), self, 1, 0 )) speed = 0 o ile czegoś nie pomieszałem, to powinno być ok :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 GML if x<other.x+other.sprite_width/2-sprite_width/2+abs(hspeed) and x>other.x-other.sprite_width/2+sprite_width/2-abs(hspeed) and y<other.y+other.sprite_height/2-sprite_height/2+abs(vspeed) and y>other.y-other.sprite_height/2+sprite_height/2-abs(vspeed) { speed=0; } szybko zedytowałem swój kod. edit: trochę bardziej manualna metoda niż collision_rectangle, ale powinna działać ok rozumiem, że w obiekcie "a" tylko w jaki Event? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 ok rozumiem, że w obiekcie "a" tylko w jaki Event? takie fajowe dwie strzałeczki skierowane ku sobie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 w kolizji z obiektem b Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 Sprawdziłem i nadal to samo zatrzymuje się na zewnątrz obiektu „b” Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 jeśli skorzystałeś z mojego kodu, upewniłeś się, że originy obu spritów są na środku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 na pewno żaden z obiektów nie ma ustawionej maski? spróbuj do każdej z tych wartości odjąć 10: GML if ( collision_rectangle( other.x - sprite_get_bbox_left( other.sprite_index ) + 10, y - sprite_get_bbox_top( other.sprite_index ) + 10, x + sprite_get_bbox_right( other.sprite_index ) - 10, y + sprite_get_bbox_bottom( other.sprite_index ) - 10, self, 1, 0 )) speed = 0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 Zrobiłem w obu obiektach arigin 0 0 i nie działa W następnej próbie zrobiłem tak jak Marek.S napisał i też nie działa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 5 Listopada 2009 Udostępnij Opublikowano 5 Listopada 2009 Zrobiłem w obu obiektach arigin 0 0 i nie działa W następnej próbie zrobiłem tak jak Marek.S napisał i też nie działa zamiast origina 0,0 kliknij center i spróbuj znowu mojej metody. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dolaran Opublikowano 5 Listopada 2009 Autor Udostępnij Opublikowano 5 Listopada 2009 zamiast origina 0,0 kliknij center i spróbuj znowu mojej metody. Zrobiłbym tak ale nie mogę to mi zepsuje całą grę musze mieć „b” na 0,0 a „a” na 6, 6 na pewno żaden z obiektów nie ma ustawionej maski? Za bardzo nie wiem o co chodzi z tą maską? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 6 Listopada 2009 Udostępnij Opublikowano 6 Listopada 2009 Spróbuj: if ( x - 6 > other.x and x - 6 < other.x + other.sprite_width and y - 6 > other.y and y - 6 < other.y + other.sprite_height )) speed = 0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 6 Listopada 2009 Udostępnij Opublikowano 6 Listopada 2009 wersja dla spritów z originami 0,0. GML if x<other.x+other.sprite_width-sprite_width/2+abs(hspeed) and x>other.x+sprite_width/2-abs(hspeed) and y<other.y+other.sprite_height-sprite_height/2+abs(vspeed) and y>other.y+sprite_height/2-abs(vspeed) { speed=0; } spróbuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
donway Opublikowano 6 Listopada 2009 Udostępnij Opublikowano 6 Listopada 2009 COLLISION "a" z "b" GML speed=0 ?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się