Skocz do zawartości

Zablokowane Oszczędność


Will

Rekomendowane odpowiedzi

Mam pytanie. Czy jest możliwe wczytywanie części mapy. Tzn wchodzimy w nowy room i wczytuje się on po części. W zasięgu wzroku, pozwoli to chyba na wyciągnięcie dużej ilości FPS. Czy jest to wogule możliwe a jeśli tak to bardzo proszę o informacje o tym :)

Odnośnik do komentarza
Udostępnij na innych stronach

Oczywiście że jest. =) Trzeba tylko opracować odpowiedni system zapisu/odczytu takiej mapy.

 

Choć nie wydaje mi się że jest to dobry pomysł, lepszym jest załadowanie całej mapy i zdezaktywowanie obiektów niewidocznych. To najlepsze rozwiązanie. =)

Odnośnik do komentarza
Udostępnij na innych stronach

Mógłbyś mniej więcej opisać na czym to polega? Ten system deaktywacji. Chodzi o to że jeżeli obiekt nie jest widoczny na ekranie nie jest aktywny? Jeśli o to to czy mógłbyś mniej więcej opisać jak to osiągnąć. Mam problem gdyż jestem dopiero przy drugiej mapce w mojej grze a wyciągam max 30fps. Kompa nie mam jakiegoś super (Duron 1.8 256ramów i karta 64 mb) ale nie przesadzajmy żeby sie 2d gierka rwała xD

Odnośnik do komentarza
Udostępnij na innych stronach

Chodzi o to że jeśli obiekt jest zdezaktywowany to nie wykonuje swoich eventów, włącznie z rysowaniem - więc nie jest też widoczny. Więc zamiast niszczyć obiekt gdy nie jest potrzebny i tworzyć go/ładować z pliku gdy znowu powinien się pojawić na ekranie gracza po prostu go wyłączasz bądź włączasz. Masz funkcje z rodziny instance_deactivate_... i instance_activate_.... I wszystko sprowadza się tylko do ich użycia, więcej w helpie. =)

Odnośnik do komentarza
Udostępnij na innych stronach

Może być tak:

xx = obj_bohater.x;
yy = obj_bohater.y;
instance_deactivate_region( xx - 300, yy - 300, 600, 600, false, 1 );
instance_activate_region( xx - 300, yy - 300, 600, 600, true );

//Aktywacja obiektow ktorych dzialanie jest niezbedne
instance_activate_object( obj_bohater );

Wtedy tworzysz listę obiektów które muszą być aktywne (na dole ten dopisek), albo tak:

xx = obj_bohater.x;
yy = obj_bohater.y;

for( n = 0; n < instance_count; n += 1 )
{
     i = instance_id[n];
     if( !instance_exists( i ) )
          continue;
     
//   Typ obiektu do dezaktywacji
     if( !object_index == o_fog )
          continue;

     if( point_distance( i.x, i.y, xx, yy ) > 300 )
          instance_deactivate_object( id );
}

instance_activate_region( xx - 300, yy - 300, 600, 600, true );

I robisz listę do dezaktywacji ( patrz ten dopisek w kodzie ).

Odnośnik do komentarza
Udostępnij na innych stronach

O Boże. Nieźle uprościłeś xD Teraz z tego nic nie czaje ale przyznam że działa świetnie ;P Napracowałeś się i trzeba to przyznać wielkie dziex za pomoc!

 

Jednakże zauważyłem mały problem wyskakuje błąd Data structure with index does not exist (czasem tylko wyskakuje a czasem nie 0o)

Odnośnik do komentarza
Udostępnij na innych stronach

Opiszę:

 

- Create:

-- Określenie viewa w zmiennej global._fogView

-- Badanie czy ustawiono -1 w global._fogView, jeśli tak to ustawia rozmiary surface na rozmiary rooma, jeśli nie to sprawdza czy view istnieje jeśli tak to ustawia rozmiary surface na rozmiary viewa jeśli nie to na rozmiary rooma.

-- Pozycja rysowania surface w global._fogX i global._fogY, domyślnie 0, 0.

-- Tworzenie surface o określonych wcześniej rozmiarach.

-- Tworzenie listy jeśli jeszcze nie istniej i listy priorytetów.

 

- Step:

-- Przekazywanie wszystkich stworzonych świateł z listy do listy priorytetowej razem z jego depth w postaci priorytetu pod warunkiem że światło jest widoczne w okienku, w przeciwnym wypadku jest pomijane.

-- Rozpoczęcie rysowania i wyczyszczenie całego surface kolorem czarnym.

-- Rysowanie świateł znajdujących się na liście priorytetowej uwzględniając depth ( priorytet ) oraz jego typ.

-- Zakończenie rysowania na surface.

 

- Draw:

-- Update pozycji surface jeśli view został ustalony.

-- Rysowanie wszystkiego.

 

- fogLightAdd...:

-- Tworzenie mapy (światła).

-- Dodanie podstawowych kluczy takich jak typ, x, y, r ( rozmiar maksymalny ) i depth.

-- Dodanie innych kluczy ( tylko w przypadku fogLightAddNormalExt, fogLightAddSprite, fogLightAddSpriteExt ).

-- Zapisanie identyfikatora do listy.

 

- fogLightMove:

-- Tylko i wyłącznie zmiana pozycji światła.

 

- fogLightUpdate...:

-- Zmiana wartości wszystkich kluczy dla stworzonego wcześniej światła.

 

EDIT

Dziwne, u mnie nie ma błędów. :/ A jaka treść?

Odnośnik do komentarza
Udostępnij na innych stronach

Sprubuję jeszcze raz wszystko skopiować. Jakbym nie mógl dać sobie rady mógłbys looknąć na plik?

 

Jasne. =)

Tymon

 

Nie wiem co jest nie tak 2 razy kopiowałem i nic ;/ Jakbyś podał e-mail o ile możesz to bym Ci plik wysłał.

 

Napisz na PW, albo GG. :3

Tymon

Odnośnik do komentarza
Udostępnij na innych stronach

Problem rozwiązany. Z racji iż nie istnieje funkcja sprawdzająca czy lista istnieje używam variable_global_exists, a Will miał zaznaczone ustawianie wszystkich nieistniejących zmiennych na 0 co powodowało błąd ( zmienna istnieje, ale lista nie ).

 

Proste jak drut. =P

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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