Skocz do zawartości

Usuwanie zmiennej z choose kiedy już istnieje.


Rekomendowane odpowiedzi

Witam, ustanowiłem sobie trochę zmiennych global.name których wartości to string z nazwą miasta. Załóżmy global.name jest 10 (global.name1,global.name2, itd.)

 

i mam funkcje choose w create która wybiera jedną z tych zmiennych. Problem w tym, że zmienna się powtarza. Chciałbym napisać skrypt który kiedy zmienna jest już w użyciu by choose jej nie wybierał. Miałem pomysł ale był żmudny i słabo wydajny wiec zgłaszam się do was o pomoc c;

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ojej... ja bym to na tablicę przerobił to raz. Dwa, można wtedy zrobić pętelkę która dodaje to do listy/mapy i sprawdza czy wpis nie istnieje. 3 - za pomocą funkcji random/irandom wybieramy nty element z tej map/listy a mapę/listę niszczymy.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//Stworz liste

global.nameList = ds_list_create()

ds_list_add(global.nameList,name1,name2,...,name10) //jesli wiecej niz 15 elementow, powinienes uzyc petli albo cos

ds_list_shuffle(global.nameList)

GML
//Losuj element

var chosenName;

chosenName = ''

if(!ds_list_empty(global.nameList))

{

chosenName = global.nameList[| 0]

ds_list_delete(global.nameList,0)

}

return chosenName

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

GML
FATAL ERROR in

action number 1

of Draw Event

for object ocity:

 

Push :: Execution Error - Variable Get -1.chosenName(100000, -1)

at gml_Object_ocity_DrawEvent_1 (line 8) - draw_text(x-32,y-32,string(chosenName))

################################################################################

############

 

W Begin step mam losowanie, w obiekcie ocontroller mam stworzenie listy, Instance order ustawiony, że controller wchodzi pierwszy. Ten kod próbuje stworzyć napis na podstawie zmiennej którą ustalam podczas losowania, ale przeczytałem, że funkcja var usuwa zmienną po ukończeniu, czy to może być problem ? Kombinuje i kombinuje i ciągle ten sam błąd podczas rysowania nazwy

Odnośnik do komentarza
Udostępnij na innych stronach

GML
LosujElement()

zmienna = chosenName

To nie zadziała, chosenName istnieje tylko wewnątrz skryptu LosujElement(). Należy zrobić:

GML
zmienna = LosujElement()

chosenName w skrypcie to wartość, jaką ten skrypt zwraca, działa to na zasadzie funkcji.

 

Jeszcze jedno - gdy skończysz korzystać z listy, powinieneś ją usunąć - ewentualnie, jeśli zawsze chcesz mieć tylko jedną listę, a nie chcesz jej usuwać, możesz dodać warunek, żeby nie tworzyło listy, jeśli już istnieje, np.

if(!ds_list_exists(global.nameList)) global.nameList = ds_list_create()

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