Skocz do zawartości

znikający draw


Bedziom

Rekomendowane odpowiedzi

Siema ;)

Zrobiłem obiekt o_controler i on ma wyświetlać kilka napisów. Wszystko działało dobrze i nagle - przestało. Po starcie gry napisy widać przez pół sekundy i potem znikają :(

W create tego obiektu mam tak :

GML
if file_exists('files/config/draw.txt')

{execute_file('files/config/draw.txt',0,0)} else

{show_message('Brak pliku konfiguracyjnego!') game_end()}

w tym pliku jest tak :

pl=true

eng=false

hud=true

a w draw obiektu o_controler tak :

GML
if hud = true

{

if eng = true

{

if(view_current == 0)

{

draw_text(view_xview[0]+64,view_yview[0]+4,'Weapon: '+string(o_player_1.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[0],view_yview[0]+32,'Bomb has been planted!')

draw_text(view_xview[0]+32,view_yview[0]+54,'Time : '+string(global.czas))

}

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[0]+32,view_yview[0]+32,'Bomb is not planted!')

}

}

else if(view_current == 1)

{

draw_text(view_xview[1]+64,view_yview[1]+4,'Weapon: '+string(o_player_2.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[1],view_yview[1]+32,'Bomb has been planted!')

draw_text(view_xview[1]+32,view_yview[1]+54,'Time : '+string(global.czas))

}

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[1]+32,view_yview[1]+32,'Bomb is not planted!')

}

}

}

if pl = true

{

if(view_current == 0)

{

draw_text(view_xview[0]+64,view_yview[0]+4,'Broń: '+string(o_player_1.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[0],view_yview[0]+32,'Bomba jest podłożona!')

draw_text(view_xview[0]+32,view_yview[0]+54,'Czas : '+string(global.czas))

}

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[0]+32,view_yview[0]+32,'Bomba nie jest podłożona!')

}

}

else if(view_current == 1)

{

draw_text(view_xview[1]+64,view_yview[1]+4,'Broń: '+string(o_player_2.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[1],view_yview[1]+32,'Bomba jest podłożona!')

draw_text(view_xview[1]+32,view_yview[1]+54,'Czas : '+string(global.czas))

}

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[1]+32,view_yview[1]+32,'Bomba nie jest podłożona!')

}

}

}

}

 

Kod pisany z głowy. Działał i nagle przestał :(

 

Czemu tak się dzieje? Co ew. mogę poprawić?

 

ps. proszę, nie wytykajcie mi błędów w angielskich napisach :P

Odnośnik do komentarza
Udostępnij na innych stronach

Po 1 zastąp plik txt plikiem ini. Obsługa plików ini w GM-ie jest banalna, a jeśli ktoś dowie się że używasz execute_file to wystarczy że dopisze sobie tam HP+=1000000

Po 2:

W tym co nam pokazałeś nie ma nic co by oddziaływało na długość wyświetlania tych napisów, a to oznacza że pewnie masz tam jeszcze jakiś kod. Pewnie chciałeś zrobić by napisy pojawiały się na kilka sekund i znikały. Jeżeli tak to masz to w w tym kodzie którego nam nie pokazałeś i to oznacza że przy evencie po którym ma się pokazywać napis (Bomba jest podłożona) musisz ustawić licznik (ten który odpowiada za to jak długo ten tekst ma być na ekranie) na podstawową wartość.

Mam rację?

Odnośnik do komentarza
Udostępnij na innych stronach

Jako ini twój plik wyglądał by tak:

lang=pl
hud=true

 

Co do tego co nam chodzi z tym execute_file to wyobraź sobie że ktoś użyje tego kodu by dodać nowy object, doda go na mapę, uczyni Persistent i jakoś odkryje jak nazywają się przeciwnicy. Potem będzie mógł ich usuwać w każdym momencie :). Kiedyś chciałem zrobić grę na samym execute_file, tak by była łatwo modowalna :P

Odnośnik do komentarza
Udostępnij na innych stronach

Nie rozumiesz. Na pisz sobie w tym pliku:"show_message("bedziom jest głupi")".... i wyobraź sobie, że teraz kto inny to tam wpisał. Nie mam oczywiście na myśli, że jesteś głupi, ale ktoś mógłby taką rzecz zrobić, walnąć SS'a i dać do neta, że sam o sobie to napisałeś.

E:Threef był pierwszy. ;(

Odnośnik do komentarza
Udostępnij na innych stronach

Ale dla innych nie, co utrudnia szukanie rozwiązań. Pz tym w ładnie ułożonym kodzie widać od razu zasięg klamerek i nie trzeba ich liczyć.

Dla zainteresowanych:

GML
if hud = true

{

if eng = true

{

if(view_current == 0)

{

draw_text(view_xview[0]+64,view_yview[0]+4,'Weapon: '+string(o_player_1.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[0],view_yview[0]+32,'Bomb has been planted!')

draw_text(view_xview[0]+32,view_yview[0]+54,'Time : '+string(global.czas))

};

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[0]+32,view_yview[0]+32,'Bomb is not planted!')

};

}

else if(view_current == 1)

{

draw_text(view_xview[1]+64,view_yview[1]+4,'Weapon: '+string(o_player_2.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[1],view_yview[1]+32,'Bomb has been planted!')

draw_text(view_xview[1]+32,view_yview[1]+54,'Time : '+string(global.czas))

};

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[1]+32,view_yview[1]+32,'Bomb is not planted!')

};

};

}

if pl = true

{

if(view_current == 0)

{

draw_text(view_xview[0]+64,view_yview[0]+4,'Broń: '+string(o_player_1.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[0],view_yview[0]+32,'Bomba jest podłożona!')

draw_text(view_xview[0]+32,view_yview[0]+54,'Czas : '+string(global.czas))

};

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[0]+32,view_yview[0]+32,'Bomba nie jest podłożona!')

};

}

else if(view_current == 1)

{

draw_text(view_xview[1]+64,view_yview[1]+4,'Broń: '+string(o_player_2.bron))

if instance_exists(o_bomb_plant)

{

draw_text(view_xview[1],view_yview[1]+32,'Bomba jest podłożona!')

draw_text(view_xview[1]+32,view_yview[1]+54,'Czas : '+string(global.czas))

};

if !instance_exists(o_bomb_plant)

{

draw_text(view_xview[1]+32,view_yview[1]+32,'Bomba nie jest podłożona!')

};

};

};

};

I dwie rady ode mnie:

1. Zamiast

GML
if instance_exist( ... )

{

//...

};

if !instance_exists( ... )

{

//...

};

robisz:
GML
if instance_exists(...)

{

//...

}

else

{

//...

};

i jest o wiele wygodniej, czytelniej itd. (możliwe nawet, że szybciej, ale o to trzeba by było zapytać ekspertów)

 

2. Zrób sobie jednowymiarowe tablice, a języki ponumeruj. W tablicach zapisujesz tekst w danym języku w jakiejś tam sytuacji. Przykładowo:

Polski -> 0

Angielski -> 1

GML
// inicjacja tablic

bombajest[0]='Bomba jest podlozona.';

bombajest[1]='Bomb is planted.';

GML
// użycie

if instance_exists(bomba)

{

draw_text(0,0, bombajest[ lang ];

};

gdzie zmienna lang odpowiada za aktualnie używany język.
Odnośnik do komentarza
Udostępnij na innych stronach

@Mentoss: zamiast jednowymiarowej tablicy powinien zrobić ds_grid. Wtedy wszystkie teksty mógłby przechowywać w jednej strukturze. Kod byłby też znacznie czytelniejszy.

 

@Bedziom: sprawdź w trybie Debug, czy coś nie niszczy nagle tego obiektu, może dlatego znika.

Odnośnik do komentarza
Udostępnij na innych stronach

ja z ds_'ów ogarniam listy tylko, może stacki by mi poszły w locie. grida nigdy nie używałem, ale skoro tak twierdzisz, to się nim w najbliższym czasie zainteresuję.

 

Tablice to zwykłe zmienne, którym można tak jakby nadać kilka wartości. Taka tablica składa się z nazwy zmiennej i indeksów (wymiarów tablicy). Jest więc nazwa_zmiennej[ wartość ], gdzie wartość pozwala nam uzyskać wskazaną wartość zmiennej. Podsumowując:

nazwazmiennej[0]="Tu jest pierwsza wartość zmiennej";

nazwazmiennej[1]="Druga wartość zmiennej";

(...)

nazwazmiennej[152]="Sto pięćdziesiąta trzecia wartość zmiennej";

 

Wszystkie wartości muszą być tego samego typu. O ile dobrze pamiętam, jest ograniczenie do 32000 wartości danej tablicy.

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