Skocz do zawartości

Powtarzający się kod = ścinanie gry


Lordis

Rekomendowane odpowiedzi

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

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

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

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

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