Skocz do zawartości

Niewiadoma ilość zmiennych


Arekadiusz

Rekomendowane odpowiedzi

Witam wszystkich!

A więc skorzystałem z jakiegoś przykładu menu(nie pamiętam jakiego :jezor: ). I jest on taki:

 

CREATE:

GML
menu=0;

 

menu_txt[0]='Nowa gra';

menu_txt[1]='Info';

menu_txt[2]='Koniec gry';

 

STEP:

GML

if menu>2

{

menu=0;

}

 

if menu<0

{

menu=2;

}

 

 

if keyboard_check_pressed(vk_up)

{

menu-=1;

}

else

if keyboard_check_pressed(vk_down)

{

menu+=1;

}

 

 

if keyboard_check_pressed(vk_enter)

{

if menu=0

{

room_goto(rgra)

}

else

if menu=1

{

show_info()

}

else

{

game_end();

}

}

 

DRAW:

GML
draw_set_font(font_bold);

 

for(i=0;i<=2;i+=1)

{

if menu=i

{

draw_set_color(c_red);

}

else

{

draw_set_color(c_black);

}

draw_text(x,y+60*i,menu_txt);

}

 

Przerobiłem kod w CREATE na taki:

GML
menu=0;

 

ini_open("menu.ini")

 

menu_txt[0]=ini_read_string("menu","0","")

menu_txt[1]=ini_read_string("menu","1","")

menu_txt[2]=ini_read_string("menu","2","")

 

ini_close()

 

I pojawił się taki problem,że mogę wczytać tylko te trzy zmienne. A ja bym chciał móc wczytywać więcej zmiennych. Czy dałoby się zrobić tak,że Game Maker(oczywiście podczas gry) wykryje ile jest tych zmiennych i wczyta je wszystkie do gry?

 

Credtisy i moja wdzięczność za pomoc ^_^

Odnośnik do komentarza
Udostępnij na innych stronach

Wyświetlanie działa tylko że wyświetla się taki błąd:

___________________________________________

ERROR in

action number 1

of Draw Event

for object obj_menu:

 

Error in code at line 13:

draw_text(x,y+20*i,menu_txt);

^

at position 25: Unknown variable menu_txt or array index out of bounds

 

 

I jeszcze jedno. W tym kodzie który jest w pierwszym poście w step jest także ograniczenie wyboru i w draw ustawia się ilość pozycji do rysowania. To też trzeba było by zmienić.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak,wszystko jest w jednym obiekcie.

 

Nie działa mi to.Błąd:

___________________________________________

ERROR in

action number 1

of Draw Event

for object obj_menu:

 

Error in code at line 13:

draw_text(x,y+20*i,string(menu_txt));

^

at position 32: Unknown variable menu_txt or array index out of bounds

Odnośnik do komentarza
Udostępnij na innych stronach

Błąd GM.

Daj na samym końcu w Create:

menu_txt="-------------"

możesz też dać cokolwiek innego zamiast "-------------" i to będzie pokazywane jako ostatni tekst/wartość wyświetlanego tekstu. :D

EDIT: Teraz trochę wytłumaczę:

Problem polega na tym że pobiera określoną ilość zmiennych u ciebie w ini jest ich o jedną za mało, więc wyskakuje błąd, a tamto zapełna brakujące pola tym "-------------".

GM pobiera max/min 6 wartości:

0=Haslo

1=Kod

2=Dzwieki

3=Muzyka

4=Grafika

5=Inne

6=? //Jej brak więc wyskakuje błąd.

7= Ani wyższej nie doda.

 

Dlatego jeżeli chcesz aby było ich więcej, wstaw następny skrypt typu:

if wartośc_w_ini_jest_więcej_niż>=6

{

Zaczyna je sprawdzać od 7 a nie 0 jak ustawiłeś

}.

 

Napisz jeśli coś nie tak

Odnośnik do komentarza
Udostępnij na innych stronach

bla bla bla. po prostu w moim kodzie zamień kolejność

 

GML
menu_txt[ i ] = ini_read_string( "menu", string( i ), "" );

i += 1;

 

tych dwóch linijek. zaraz wrzuce Ci porządną wersję.

 

 

E:

GML
[Create]

ini_open( "menu.ini" );

 

i = 0;

while( ini_key_exists( "menu", string( i )))

{

menu_txt[ i ] = ini_read_string( "menu", string( i ), "" );

i += 1;

}

 

ini_close()

menu_count = i;

menu_cursor = 0;

 

[Step]

if ( keyboard_check_pressed( vk_up )) menu_cursor -= 1;

if ( keyboard_check_pressed( vk_down )) menu_cursor += 1;

 

if ( menu_cursor > menu_count -1 ) menu_cursor = 0;

if ( menu_cursor < 0 ) menu_cursor = menu_count - 1;

 

 

if ( keyboard_check_pressed( vk_enter ))

{

switch( menu_cursor )

{

case 0: show_message( 'wybrano pozycje 1' ); break;

case 1: show_message( 'wybrano pozycje 2' ); break;

case 2: show_message( 'wybrano pozycje 3' ); break;

case 3: show_message( 'wybrano pozycje 4' ); break;

}

}

 

[Draw]

draw_set_font( font_menu );

 

for( i = 0; i < menu_count; i += 1 )

{

if ( i == menu_cursor ) draw_set_color( c_red );

else

draw_set_color( c_black );

 

//rysowanie pozycji menu

draw_text( x, y + 20 * i, string( menu_txt ));

}

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