Skocz do zawartości

Strzał 3d


Ice Cube
Przejdź do rozwiązania Rozwiązane przez Konrad-GM,

Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...