Ice Cube Opublikowano 6 Grudnia 2020 Udostępnij Opublikowano 6 Grudnia 2020 Cześć w moim obiekcie pocisk muszę zmienać maske kolizji w zależności od kierunku w którym stoi gracz. pocisk to długa linia jest sprite_pocisk,który ma 360 klatek i to będzie służyć jako maska kolizji Draw pocisku nie będzie się zmieniał bo to mała kulka,ale ze względu,ze pocisk ma lecieć szybko i kosić wszystko po drodze jego speed musi być równe 30 dlatego linia długości 30 pix. obj_pocisk/create: tutaj muszę nadać numer maski 0-360 w zależności od direction playera sprite_collision_mask(spr_pocisk ... i co dalej maska musi być precyzyjna dodam,ze gra 3d Help Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Grudnia 2020 Administratorzy Udostępnij Opublikowano 7 Grudnia 2020 360 klatek? Moim zdaniem, wystarczy jedna. Jeśli obiekt nie ma innej maski niż sprite, to za pomocą image_angle możesz obracać zarówno sprite jak i maskę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 7 Grudnia 2020 Autor Udostępnij Opublikowano 7 Grudnia 2020 dobra mała zmiana koncepcji a gdybym pominął spritea i dał zwykły pixel jako maske i draw speed pocisku np. 20 i zrobił to na collision line to jak napisać aby pocisk kosił wszystko w promieniu 20pixeli niezależnie od obrotu playera bo narazie kosi tylko wszystko co 20 pixeli a reszte omija. pocisk /step collision_line(x,y,x+20 ??,y+20??,1,1) - to nie działa,ale dałem poglądowo chodzi o to by pocisk był cienki na pixel,a długi na 20 pixeli Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Grudnia 2020 Administratorzy Udostępnij Opublikowano 8 Grudnia 2020 to nie może być tak, ze jest długi na 20 pikseli, gdyż pocisk ma też swój "speed", który jeśli jest większy niż 20px, to wtedy "przeskoczy" niektóre obiekty. Wybierzmy więc to, co akurat jest większe: var _list = ds_list_create(); var _num = collision_line_list(x, y, x + lengthdir_x( max(20, speed), direction), y + lengthdir_y( max(20, speed), direction), all, false, true, _list, false); if (_num > 0) { for (var i = 0; i < _num; i++;) { instance_destroy(_list[| i]); } } ds_list_destroy(_list); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 8 Grudnia 2020 Autor Udostępnij Opublikowano 8 Grudnia 2020 1 godzinę temu, gnysek napisał: to nie może być tak, ze jest długi na 20 pikseli, gdyż pocisk ma też swój "speed", który jeśli jest większy niż 20px, to wtedy "przeskoczy" niektóre obiekty. Wybierzmy więc to, co akurat jest większe: var _list = ds_list_create(); var _num = collision_line_list(x, y, x + lengthdir_x( max(20, speed), direction), y + lengthdir_y( max(20, speed), direction), all, false, true, _list, false); if (_num > 0) { for (var i = 0; i < _num; i++;) { instance_destroy(_list[| i]); } } ds_list_destroy(_list); to jak to jest z tym speed ?, myślałem, że jeżeli speed=1 to obiekt co takt przesuwa się o jeden pixel.. dlatego zwiększając speed,zwiekszałem maskę kolizji aby łącznie na drodze pocisku tworzyła sie jedna linia,która kolidowała by z kazdym obiektem bez "przeskakiwania" to pierwszy sposób w jaki chciałem to rozwiązać. Drugi sposób to sprite pocisku ma 1 pixel łącznie z maską,ale kolizje wyłapywała by funkcja collision line z tym, że jak napisałem wyżej nie wiem jak obliczyć wektor x2,y2 w tej funkcji,aby wydłużyć kolizje do 20 lub więcej pixeli w zależności ile pixeli musiała by wyłapywać funkcja przy speed=20 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Grudnia 2020 Administratorzy Udostępnij Opublikowano 8 Grudnia 2020 Ok, jeśli zwiększyłeś jedno i drugie równo, to problemu nie będzie i wtedy collision line nie jest potrzebne, o ile korzystasz z image_angle, zeby obrócić i grafikę i maskę. Wtedy wystarczy zwykły event kolizji, z jakimś obiektem-rodzicem wszystkich przeciwników. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 8 Grudnia 2020 Autor Udostępnij Opublikowano 8 Grudnia 2020 Teraz, gnysek napisał: Ok, jeśli zwiększyłeś jedno i drugie równo, to problemu nie będzie i wtedy collision line nie jest potrzebne, o ile korzystasz z image_angle, zeby obrócić i grafikę i maskę. Wtedy wystarczy zwykły event kolizji, z jakimś obiektem-rodzicem wszystkich przeciwników. a jak obliczyć te x2,y2 w funkcji collision_line by działała analogicznie do pierwszego przykładu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 8 Grudnia 2020 Administratorzy Udostępnij Opublikowano 8 Grudnia 2020 To zależy gdzie będzie origin. Jeśli po lewej w środku, to tak jak wyżej (ew. zrezygnuj z max(a,b) i wstaw liczbę). Jeśli nie, no to trzeba dwa razy lenghtdir dać, w przeciwne strony. 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ę