Lordis Opublikowano 21 Listopada 2009 Udostępnij Opublikowano 21 Listopada 2009 Witam! Dawno nie pisałem ale znów napotkałem problem na swej drodze przy robieniu małej gierki (platformówki). Wracając do tematu problem tkwi w tym że ciągle powtarza mi się kod który niezauważalnie spowalnia gre alecz gdy jest takich obiektów np. 50 czy 100 to gra już praktycznie stoi (fps=1 do 3) :P Sytuacja wygląda tak mam dwa obiekty "obj_wall" i "obj_menu" w "obj_menu" jest kod który tworzy "obj_wall" w miejscu który nakierójemy myszką (room jest podzielony na siatke 32x32). Gdy klikniemy tworzy nam się jedna kostka 32x32 naszej ściany, następnie gdy postawimy jeszcze jedną ściane obok poprzedniej one się łączą i jest tak jakby jedna ściana (zmienia się sprite obydwóch "obj_wall") może dam kawałek mojego przykładu byście zrozumieli, ale to potem. w obiekcie "obj_wall" mam taki kod (dam część bo jest troche długi). GML if position_meeting(x+32,y,obj_wall) { prawo=1 } if position_meeting(x-32,y,obj_wall) { lewo=1 } if position_meeting(x,y-32,obj_wall) { gora=1 } if position_meeting(x,y+32,obj_wall) { dol=1 } if position_meeting(x+32,y+32,obj_wall) { pdol=1 } if position_meeting(x-32,y+32,obj_wall) { ldol=1 } if position_meeting(x+32,y-32,obj_wall) { pgora=1 } if position_meeting(x-32,y-32,obj_wall) { lgora=1 } if prawo==0 && lewo==0 && gora==0 && dol==0 && lgora==0 && pgora==0 && ldol==0 && pdol==0 then image_single=0 if prawo==0 && lewo==0 && gora==1 && dol==1 then image_single=1 if prawo==1 && lewo==1 && gora==0 && dol==0 then image_single=2 if prawo==1 && lewo==1 && gora==1 && dol==0 && lgora==0 && pgora==0 then image_single=3 if prawo==1 && lewo==1 && gora==0 && dol==1 && ldol==0 && pdol==0 then image_single=4 if prawo==1 && lewo==0 && gora==1 && dol==1 && pgora==0 && pdol==0 then image_single=5 if prawo==0 && lewo==1 && gora==1 && dol==1 && lgora==0 && ldol==0 then image_single=6 if prawo==1 && lewo==1 && gora==1 && dol==1 && lgora==0 && pgora==0 && ldol==0 && pdol==0 then image_single=7 Ten kod powoguje "dopasowywanie się mojego muru i tworzy jedną całość lecz kod wykonuje się ciągle i gdy jest takich obiektów 50+ w roomie to fps wachają się od 1 do 5 ... i nic nie da się praktycznie zrobic, wszystko jest spowolnione itd... próbowałem dawać ten kod żeby wykonywał się podczas kliknięcia. Daje to dobry efekt ponieważ nie zmula gdy ciągle lecz gdy postawimy 50+ takich klocków i klikniemy myszką gdzie kolwiek w roomie gra zwiesza sie na 2-4 sekund bo zaczyna się wykonywać kod w każdym z poszczególnych "obj_wall" Prosze was o pomoc jakąś rade. Myślałem żeby zrobić coś takiego by kod wykonywał się tylko w danym klocku który stawiamy i najbliższych jemu ale nie wiem jak ro zrobic. A może macie lepsze pomysły jak to zrobić by uniknąć spowolnienia gry. LINK: http://www.speedyshare.com/files/19407875/wall.gmk Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 21 Listopada 2009 Udostępnij Opublikowano 21 Listopada 2009 danym klocku który stawiamy i najbliższych jemu ale nie wiem jak ro zrobic.pobierz id obiektów w 4 kierunkach od postawionego nowo klocka. - instance_possition i się do nich odwołaj Moja rada to sprawdź za pomocą debugera ile w roomie masz obiektów obj_wall, bo moim zdaniem przy jednym kliknięciu tworzysz ok 30 instancji, co powoduje takie spowolnienie gry :P niestety nie mam tu dostępu do gm i nie sprawdzę :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lordis Opublikowano 21 Listopada 2009 Autor Udostępnij Opublikowano 21 Listopada 2009 Marek:D Ty zawsze służysz dobrą radą Dzięki ! :) no ale co do id,odwołania się do pobliskich obiektów to właśnie nie wiem jak to zrobić a "instance_possition" nie wime jak wykożystać bo pierwsze widze takie coś :P poczytam w helpie o tym może coś wykąbinuje ale wątpie w to. Może ktoś by mi przykładzik walnął albo przerobił mój udostępniony przykład. albo chociaż rozpisał jak by to miało wyglądać :D Był bym wdzięczny. E: a co do debugera miales racje tak na kliknięcie tworzy mi sie tego 3-10 a gdy przytrzymam i przeciągam po roomie tak jak ro ciągle robie to tworzy mi sie tego od groma. postawilem około 20 klocków a tak na prawde stworzylo mi się ich ze 300 albo i 400 ... jak to zmienić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Saus Opublikowano 21 Listopada 2009 Udostępnij Opublikowano 21 Listopada 2009 Skoro to masz na siatce to nic prostszego: jesli masz jakis obiekt ktory lata za myszka i to na jego x,y tworzysz te scianki to po prostu daj mu jakas zmienna i dawaj jej 0/1 w zaleznosci czy koliduje ze scianka (zwykly place_meeting) i przy klikaniu to sprawdzaj :) Jesli nie masz takowego obiektu to sprawdzaj czy nie ma scianki na mouse_x,mouse_y i tyle. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lordis Opublikowano 21 Listopada 2009 Autor Udostępnij Opublikowano 21 Listopada 2009 Kurde :/ nie wiem jak się do tego zabrać. Ten skrypt wygląda tak place_meeting(x,y,obj). Więc jak mam ro zrobić? place_meeting(mouse_x,mouse_y,obj) a pod obj co mam dać? i jak jej w ogóle użyć? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lord Marcelot Opublikowano 21 Listopada 2009 Udostępnij Opublikowano 21 Listopada 2009 GML if place_free(mouse_x, mouse_y) { // stawianie "klocka" } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marek.S Opublikowano 22 Listopada 2009 Udostępnij Opublikowano 22 Listopada 2009 GML xx = mouse_x div 32 * 32 yy = mouse_y div 32 * 32 if ( mouse_check_button( mb_left )) if ( position_empty( xx + 16, yy + 16 )) { instance_create( xx, yy, obj_bloczek ) } ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lordis Opublikowano 23 Listopada 2009 Autor Udostępnij Opublikowano 23 Listopada 2009 dzięki ;* i sorki za nie odpisalem odrazu. 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ę