Ice Cube Opublikowano 23 Grudnia 2018 Udostępnij Opublikowano 23 Grudnia 2018 Siema w mojej grze pociski wystrzelone przez gracza bardzo zwalniają gre ,czy macie jakieś pomysły jak to rozwiązać? pocisk/step: //potwor 1 // sprawdzamy kolizje z wrogami with (obj_potwor1) { if (place_meeting(x, y, other.id)) { // kolizja nastąpiła, ale w 2D, sprawdźmy wysokość pocisku if (other.z < 24) { with (other) { // niszczymy pocisk instance_destroy(); } // niszczymy wroga atak=1 // przerywamy blok 'with' break; } }} //potwor 2 // sprawdzamy kolizje z wrogami with (obj_potwor1) { if (place_meeting(x, y, other.id)) { // kolizja nastąpiła, ale w 2D, sprawdźmy wysokość pocisku if (other.z < 24) { with (other) { // niszczymy pocisk instance_destroy(); } // niszczymy wroga atak=1 // przerywamy blok 'with' break; } }} takich potworów mam 20 sztuk kod jest bardzo podobny próbowałem to rozwiązać : if distance_to_object(potwór1)<5 or distance_to_object(potwor2)<5 {kod kolizji} ale to także nie przyniosło efektów.. proszę o pomoc Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 23 Grudnia 2018 Udostępnij Opublikowano 23 Grudnia 2018 W poprzednim temacie napisałem co można by zrobić, ale powtórzę: Dnia 11.12.2018 o 21:18, Konrad-GM napisał: Widzę, że wkraczasz w bardziej złożone kwestie z programowaniem fizyki w grach Podejrzewam, że problem jest z dużą ilość wrogów na mapie - albo użyj dezaktywacji obiektów poza pewnym rejonem dookoła gracza funkcjami z rodziny instance_(de)activate_*, albo porzuć stosowanie flagi solid i oprogramuj swoją obsługę kolizji w Collision Event-ach. Nie mam pojęcia, jak GameMaker obsługuje kolizje i czy stosuje coś na wzór spatial partitioning - quadtree, spatial hash itp., może ktoś bardziej obeznany w tych kwestiach z GMem by podpowiedział. Ale mógłbyś też posilić się własną implementacją sprawdzania kolizji używając quadtree czy prostszym w implementacji spatial hashing (quadtree vs spatial hashing). PS. Możesz skrócić swój kod with(obj_potwor) do with(obj_potwory) ustawiając wrogom tego samego rodzica parent obj_potwory. BTW. Nazwa tematu nie jest dostatecznie opisowa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Grudnia 2018 Administratorzy Udostępnij Opublikowano 23 Grudnia 2018 Czy dobrze rozumiem że w obiekcie "obj_potwor1" masz kod "with (obj_potwor1)" ? No to tworzy jakąś niezłą pętelkę samą do siebie i tutaj może być problem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 24 Grudnia 2018 Autor Udostępnij Opublikowano 24 Grudnia 2018 12 godzin temu, gnysek napisał: Czy dobrze rozumiem że w obiekcie "obj_potwor1" masz kod "with (obj_potwor1)" ? No to tworzy jakąś niezłą pętelkę samą do siebie i tutaj może być problem. to jest cały kod pocisku /step i tam w step jest umieszczone 20 potworów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 24 Grudnia 2018 Autor Udostępnij Opublikowano 24 Grudnia 2018 15 godzin temu, Konrad-GM napisał: W poprzednim temacie napisałem co można by zrobić, ale powtórzę: BTW. Nazwa tematu nie jest dostatecznie opisowa. jest deaktywacja/aktywacja potworów ,ale problemem jest obj_pocisk . przy wystrzeleniu ponad 40 pocisków(karabin) zwalnia z fps50 do fps 10 ,nawet jak potworów nie ma w pobliżu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 24 Grudnia 2018 Autor Udostępnij Opublikowano 24 Grudnia 2018 problem pojawił się jak zamiast collision zrobiłem w stepie placemeeting Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 24 Grudnia 2018 Autor Udostępnij Opublikowano 24 Grudnia 2018 pomijając temat ZDROWYCH,WESOŁYCH ŚWIĄT dla całej Game Makerowej rodziny Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 25 Grudnia 2018 Administratorzy Udostępnij Opublikowano 25 Grudnia 2018 Może w drugą stronę jednak zrób, że pocisk sprawdza if place_meeting(x,y,obj_potwor) ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rozwiązanie Konrad-GM Opublikowano 27 Grudnia 2018 Rozwiązanie Udostępnij Opublikowano 27 Grudnia 2018 Pomysł @gnysek może się sprawdzić, ale zamiast with i place_meeting spróbuj użyć collision_circle w step event obj_pocisk: var potwor = collision_circle(x, y, 8, obj_potwor, true, true); if (potwor != noone) { if (z < 24) { with (potwor) { instance_destroy(); } } } Wartość parametru rad = 8 możesz modyfikować wedle uznania, żeby dostosować promień kolizji. Ice Cube 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 31 Grudnia 2018 Autor Udostępnij Opublikowano 31 Grudnia 2018 Po wielkich testach stwierdzam,że place_meeting bardzo obciaża procesor w porównaniu do collision_circle i to prawie dziesięciokrotnie!! dzięki za pomoc i dosiego roku Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Stycznia 2019 Udostępnij Opublikowano 1 Stycznia 2019 Jak masz ustawione jakieś precyzyjne maski kolizji to może obciążać bardzo mocno. place_meeting bazuje na porównywaniu masek ze sobą. 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ę