Skocz do zawartości

FPS zwalnia!


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

Rekomendowane odpowiedzi

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

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

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

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

  • Rozwiązanie

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.

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ę...