Skocz do zawartości

Kreator wyglądu oraz pliki .ini


SimianVirus8

Rekomendowane odpowiedzi

Witam.

 

Chcę zrobić kreator postaci. Jestem na samym początku, czyli planowanie w czym trzymać wartości. Rozmyślałem nad zmiennymi globalnymi, tablicami oraz plikami .ini. To ostatnie podoba mi się najbardziej. Mam dwa pytania:

a ) W czym najlepiej to zrobić, chodzi mi o waszą opinię.

 

b ) Jak dodawać liczbę do wartości, która istnieje w pliku .ini . Mam to:

GML
ini_open( 'ModCharColor.ini' )

ini_write_real('Color','colorr',255);

ini_write_real('Color','colorg',155);

ini_write_real('Color','colorb',125);

ini_close();

 

I chciałbym aby wartość "155" z

GML
ini_write_real('Color','colorg',155);
zwiększyła się np. o 5. Próbowałem z

GML
ini_write_real('Color','colorg',+5); // Zamieniło "155" na "5"

ini_write_real('Color','colorg',+=5); // Wywaliło błąd

 

Jeszcze jedno pytanie, żeby nie robić kolejnego postu.

Czy można zrobić tablice w taki sposób jak w C++ czyli tab1={2,5,4,7}; . Zamiast robić definiować każdą wartość osobno, czyli:

tab1[0]=2

tab1[1]=5

tab1[2]=4

tab1[3]=7

Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

 

Chcę zrobić kreator postaci. Jestem na samym początku, czyli planowanie w czym trzymać wartości. Rozmyślałem nad zmiennymi globalnymi, tablicami oraz plikami .ini. To ostatnie podoba mi się najbardziej. Mam dwa pytania:

a ) W czym najlepiej to zrobić, chodzi mi o waszą opinię.

 

b ) Jak dodawać liczbę do wartości, która istnieje w pliku .ini . Mam to:

GMLini_open( 'ModCharColor.ini' )

ini_write_real('Color','colorr',255);

ini_write_real('Color','colorg',155);

ini_write_real('Color','colorb',125);

ini_close();

 

I chciałbym aby wartość "155" z GMLini_write_real('Color','colorg',155); zwiększyła się np. o 5. Próbowałem z

GMLini_write_real('Color','colorg',+5); // Zamieniło "155" na "5"

ini_write_real('Color','colorg',+=5); // Wywaliło błąd

Zacznijmy od tego że muszę wytknąć Ci użycie plików ini. Nie z tego powodu że coś robisz nie tak, a z tego że jeżeli tego nie zrobię to przyjdzie ktoś i zwróci mi uwagę na to że nie zwróciłem uwagi tobie.

Ogółem pliki ini służą do przechowywanie danych konfiguracyjnych i nie powinny być używane do niczego innego. Na razie masz sobie zamiar przechowywać w nich kolor gracza, co jest ok, ale nawet nie myśl sobie że będziesz mógł tak samo zapisać ilość złota, level, tabelę wyników albo inne "ważne dane". Pliki ini są formatem czytelnym i łatwym do edycji. W skrócie do ini zapisuj tylko te dane które oczekujesz że gracz sam może sobie zmienić. Na przykład: Rozdzielczość gry, głośność muzyki, imię postaci.

 

Więc przejdźmy do problemu. Nie możesz używać TYLKO plików ini. One, jak każde inne pliki tekstowe służą tylko do przechowywania danych. Nie możesz na nich wykonywać obliczeń i zawsze musisz pilnować aby przypadkiem nie nadpisać sobie danych.

Więc musisz najpierw odczytać dane do pamięci. Tu wybierz co chcesz. Zmienna, tablica, struktura danych. Na tych danych operujesz i wykonujesz obliczenia. Dopiero potem zapisujesz ponownie dane do pliku. Użycie zmiennych globalnych nie ma sensu, chyba że maja być globalne i różne obiekty będą z nich korzystać. Ale jako że to kolor gracza, to największy sens ma przechowywanie tego jako dane gracza w jego obiekcie.

 

Jeszcze jedno pytanie, żeby nie robić kolejnego postu.

Czy można zrobić tablice w taki sposób jak w C++ czyli tab1={2,5,4,7}; . Zamiast robić definiować każdą wartość osobno, czyli:

tab1[0]=2

tab1[1]=5

tab1[2]=4

tab1[3]=7

Tablic się nie da, ale już ds_list tak. ds_list_add(tab,2,5,4,7)
Odnośnik do komentarza
Udostępnij na innych stronach

Więc próbowałem to zrobić na tablicach, ale bez zmiennych globalnych się nie obeszło. Chciałem użyć tablic globalnych ale pojawiał się błąd, prawdopodobnie dlatego, że oPlayer nie mógł zczytać wartości. Kod działa, ale wygląda pogmatwanie i znając moje sposoby "programowania", można go skrócić o ładne pare linijek, co wpłynie także na optymalizacje.

 

Wykorzystałem: zmienne globalne, tablice.

 

oSuwakButtonColorR: step

GML
if place_meeting(x,y,oMouse) and mouse_check_button(mb_left){

x = mouse_x;

}

wyrownanie=x //zmienna pomocnicza, zeby wyrownac do 0; bez tego, pozycja x=168

global.colorR=wyrownanie-168

global.color[0]=global.colorR

if global.colorR>255 then x = oSuwakColorR.x+263 //Zabezpieczenie przed wyjechaniem znacznika

if global.colorR<0 then x = oSuwakColorR.x+8 //Zabezpieczenie przed wyjechaniem znacznika

if global.colorR<0 then global.colorR=0 //ustawienie granic koloru

if global.colorR>255 then global.colorR=255 //ustawienie granic koloru

 

oSuwakColorR: step

GML
image_blend=make_colour_rgb(global.colorR,0,0)

 

oPlayer: step

GML
//kolor

global.color[0]=global.colorR

global.color[1]=global.colorG

global.color[2]=global.colorB

image_blend= make_color_rgb(global.color[0],global.color[1],global.color[2]) //Kolor skory

 

Zdjęcie pomocnicze, ze względu na występowane obiekty: http://zapodaj.net/images/a08bee80e877e.png

 

Pytanie, a raczej prośba. Mógłby ktoś pomóc, lub wskazać co można tutaj zmienić.

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