Kartofelek Opublikowano 18 Grudnia 2008 Udostępnij Opublikowano 18 Grudnia 2008 Witam. Zaimplementowalem w swojej grze dynamiczna mgle. Polega to na tym, ze tworze w grze obiekty, ktore sprawdzaja odleglosc komandosa od siebie i w zaleznosci ustawiaja swoje image_alpha. Dla wiekszej realnosci dodalem collision_line, chociaz zauwazylem, ze to dosc wolna funkcja. var dist; if (instance_exists(obj_commando)) { dist = distance_to_object(obj_commando) if (dist<100) { image_alpha = (100-(100-dist))/100 } if (collision_line(x,y,obj_commando.x,obj_commando.y,obj_podlogaSolid,false,false)) { image_alpha = 1 } } else { image_alpha = image_alpha + 1; if (image_alpha>1) image_alpha = 1; } alarm[0] = global.jakCzestoAktualizowacMgle; Moje pytanie jest takie: Taki kod ma zaimplementowana kazda instancja mgly, wiec dosc sporo obliczen to zabiera (bo takich instancji jest tyle ile kratek 16x16). Jest mozliwosc by to nie instancje a sam komandos pobieral odpowiednie kawalki mgly? Funkcja typu - "pobierz TYLKO elementy znajdujace sie w polu widzenia (kolko np o r=100)" Probowalem z collision_circle, czy distance_to_object, ale nie za bardzo mi to wychodzilo. Robilem to tak, ze wczesniej wykonywalem petle po instancjach mgly (instance_count) i pobieralem kazdy taki obiekt. Potem podstawialem go do tego collision_circle, ale to dzialanie nie jest takie jak w powyzszym zdaniu (brakuje tego TYLKO) ^^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Grudnia 2008 Udostępnij Opublikowano 18 Grudnia 2008 Hmm, kiedys uzylem tej metody na mgle w swojej pierwszej gierce i... musze przyznac ze to byl niewypal - najlepiej zrobic taka mgle na surfaces, i jesli chcesz zachowac podobna metode to wykonywac te obliczenia i rysowac petla poszczegolne kwadraciki mgly w tej petli, tylko w obszarze viewa. To znacznie zwiekszy predkosc gry. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 18 Grudnia 2008 Udostępnij Opublikowano 18 Grudnia 2008 Albo zrób tak, jak masz teraz, ale walnij to do osobnego wątku... :P (oczywiście, jeśli bohater się nie rusza to mgła nie oblicza się po raz kolejny). Co do tematu: GML with(obj_mgla) { if(point_distance(obj_hero.x, obj_hero.y, x, y) <= 100) { //kod } } Choć dodam tylko, że to niewiele da... nie w GM'ie... :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kartofelek Opublikowano 19 Grudnia 2008 Autor Udostępnij Opublikowano 19 Grudnia 2008 Próbowałem wczoraj z tym surface ale mi w ogole nie wychodzilo. Pewnie zapytam pana Google. Do tej pory rysowało mi śmiecie... Pierwsze co mi świta: - Podzielenie romu na siatkę (pewnie cos z room_width DIV cos tam) - pobranie pierwszej "komorki grida" ktorego fragment jest w gornym rogu view (tutaj pewnie bede musial pobrac kawalek za, bo sa emitery i swiatlo moze byc emitowane poza viewem) - pobranie reszty komorek - a reszta podobna jak w tamtym, czyli sprawdzanie kolizji tego grida z komandosem itp. - po obliczeniach i narysowaniu na surface wrzuta na ekran ^^ O ile to bedzie szybsze tego nie wiem, bo w tamtym deaktywowalem obiekty mlgy poza viewem... Swoja droga - znacie inne sposoby tworzenia oswietlenia? Chociaz szczerze mowiac ten mi calkiem odpowiada bo daje taki klimat starych gierek ^^ 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ę