Konrad-GM Opublikowano 16 Listopada 2018 Udostępnij Opublikowano 16 Listopada 2018 Wyrażenie other jest tak jakby referencją na instancję, także każdy parametr instancji jest dostępny poprzez other.parametr_instancji, polecam przejrzeć dokumentację: https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml language overview/keywords.html Ice Cube 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 11 Grudnia 2018 Autor Udostępnij Opublikowano 11 Grudnia 2018 Halo halo! musze jeszcze o coś zapytać w związku z powyższym. obj_naboj strasznie spowalnia mi gre ,fps spada z 40 do 10 gdy na planszy jest ok 40 pocisków(karabin),jeżeli jest wiecej to juz wogóle tragedia. ;/ obj_naboj/step : 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 live-=1 instance_create(x,y,obj_WYBUCH) // normalizujemy wektor 2D motion_xy motionlen = sqrt(other.motion_x*other.motion_x + other.motion_y*other.motion_y); xdir = other.motion_x / motionlen; ydir = other.motion_y / motionlen; // teraz przesuwamy wroga x += xdir * 10; y += ydir * 10; // przerywamy blok 'with' break; } } } tutaj jest kolejny taki sam kod na potwora nr2 tutaj jest kolejny kod na potwora nr3 itd. ok. 20 potworów x += motion_x; y += motion_y; z += motion_z; if z<0 or z>200{instance_destroy()}// jezeli pocisk trafi w podloge lub w niebo -destroy próbowałem zrobić coś w stylu : if distance_to_object( obj_potwor1) or distance_to_object(obj_potwor2)or distance_to_object(obj_potwor3) itd <30{ i tutaj dopiero kod na sprawdzanie place_meeting} to też nie dawało efektów.. idzie jakoś oszukać by step nie musiał sprawdzać ciągle wszystkiego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 11 Grudnia 2018 Udostępnij Opublikowano 11 Grudnia 2018 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. 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ę