Skocz do zawartości

Problem zwiazany ze zmiennymi


Rekomendowane odpowiedzi

Chcielbym zrobic rpg ale mam problem. Object hero ma zmienną level, ktorą dalem w create, level=1. Jednak podczas gry są rozne roomy. Chodzi mi o normalną plansze i o room z walką. Jednak gdy zyskuje level, to gdy przechodze do innego roomu logicznie patrzac, level bedzie rowny jeden ... wiec nie ma mozliwosci rozwoju. Probowalem wsadzic zmienną level do game start , ale gdy przechodze miedzy roomami to wtedy zmienna level nie jest wliczana jako zmienna, bo jest wliczana tylko na poczatku gry. Pewnie jest na to jakis banalny sposob ktory zapomnialem. Pomozcie! :( Aha nie chce uzywac globalow

Odnośnik do komentarza
Udostępnij na innych stronach

Np. gdzieś w menu daj:

hero.level = 1

Nie ustawiaj "persistent" bo wtedy obiekt bedzie w każdym room'ie. Pamietaj, że do zminnej lokalnej odwoływać można się na dwa sposoby:

a) w obiekcie "hero" zmienną level zmienisz za pomocą

level += 1

W tym wypadku level zwiększy się o jeden;

B) jeżeli chcesz odwołać się do zminnej level obiektu hero w jakimś innym obiekcie to zrób to tak:

hero.level +=1

P.S. Tyle razy ci mówiłem, że zmienne nie zależą od room'ów tylko od obiektów... ;)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Poza tym sposób SLy'a nie będzie działać. Zmienne nie zależą bezpośrednio od roomów, ale lokalne tak, bo wszystkie obiekty typu niepersistent zostaną zniszczone przy przejściu do następnej planszy, a tym samym i ich zmienne lokalne zostaną utracone.

 

Bigshark: A co, wkurza przedrostek global. ? Właśnie do takich rzeczy zostały one stworzone. Nie wywarzaj okna skoro drzwi są otwarte. :)

Odnośnik do komentarza
Udostępnij na innych stronach

Bigshark: A co, wkurza przedrostek global. ?
W sumie to moja gra jest dobrze wykonana i bedzie sie dalo ją zrobic z przedrostkiem global, ale gdyby w mojej grze było kilku bohaterów, i kazdy z nich by mial inny poziom to wtedy nie wystarczyl by jeden przedrostek global, trzeba byloby ich robic kilka(np. global.levelhero1, global.levelhero2, global.levelhero3 itd.) Takie cos moze znacznie skomplikowac gre :(
Odnośnik do komentarza
Udostępnij na innych stronach

To zykła tablica tylko z przedrostkiem "global". Działa tak samo jak zmienne globalne.

global.tablica[n]

tak wygląda odwołanie do n-tego elementu jednowymiarowej tablicy "tablica". Tablice mogą byc dwuwymiarowe, trój(trzy)wymiarowe... Wtedy wygląda to tak:

global.tablica[n,o] - tablica dwuwymiarowa
global.tablia[n,o,p] - tablica trój(trzy)wymiarowa

Temat tablic był już kilka razy poruszany na forum...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

No to jest to samo co zwykła tablica:

 

heroes[0] = "Stefan";

heroes[1] = "Gienek";

heroes[2] = "Zdzichu";

 

Forma globalna:

 

global.heroes[0] = "Stefan";

global.heroes[1] = "Gienek";

global.heroes[2] = "Zdzichu";

 

------------------------------------------------------

 

Tworzymy odpowiednią tablicę dwówymiarową:

global.heroes[0,0] = "Stefan";
global.heroes[0,1] = 1;
global.heroes[0,2] = 50;
global.heroes[0,3] = 100;

global.heroes[1,0] = "Gienek";
global.heroes[1,1] = 2;
global.heroes[1,2] = 60;
global.heroes[1,3] = 200;

global.heroes[2,0] = "Zdzichu";
global.heroes[2,1] = 1;
global.heroes[2,2] = 70;
global.heroes[2,3] = 100;

Pierwsza liczba w nawiasie kwadratowym to numer herosa, druga to typ pola: 0 - Imie, 1 - Level, 2 - Energia, 3 - Maksymalna energia.

 

Mamy trzech herosów. Każdy z nich ma zmienną lokalną o nazwie id_herosa. Pierwszy ma 0, drugi 1, trzeci 2.

 

Tworzymy skrypt: dodaj_energie:

global.heroes[id_herosa,2] += argument0;

if ( global.heroes[id_herosa,2] >  global.heroes[id_herosa,3] )
{
global.heroes[id_herosa,2] = global.heroes[id_herosa,3];
}

 

 

I teraz w kazdym z herosow mozemy wywolac taka funkcje:

 

dodaj_energie(20);

 

Argumentem jest liczba do dodania do energii. Skrypt sam pobierze z obiektu id_herosa i doda żądaną liczbę i skoryguje wartość gdyby pojemność energii została przekroczona.

 

 

To sie nazywa elastyczne programowanie. Dzięki temu nie musisz powtarzać skryptów dodawania energii do każdego z obiektów, a zmienne masz zawsze dostępne z poziomu każdego obiektu i nic ze sobą nie koliduje.

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