Skocz do zawartości

dodawanie się do listy spritów, kiedy zostaną stworzone


Rekomendowane odpowiedzi

Witam, a wiec tak w evencie start game obiekt tworzy innych 5 obiektów w taki sposób

GML
global.www=ds_list_create()

global.sss=ds_list_create()

global.ddd=ds_list_create()

global.zzz=ds_list_create(

global.lista=ds_list_create()

 

ds_list_add(global.lista,0,1,2,3,4,5,6,7,8,9,10,11,12,13)

ds_list_add(global.lista,14,15,16,17,18,19,20,21,22,23,24,25,26,27)

ds_list_add(global.lista,28,29,30,31,32,33,34,35,36,37,38,39,40,41)

ds_list_add(global.lista,42,43,44,45,46,47,48,49,50,51,52,53,54)

randomize()

{

ds_list_shuffle(global.lista)

 

 

global.i = 0

global.o = 0

 

repeat(5)

{

nowa_karta = instance_create(950-global.o,1400,dzwonek)

nowa_karta.moj_numer = ds_list_find_index(global.lista, global.i)

nowa_karta.image_index = ds_list_find_index(global.lista, global.i)

global.i+=1

global.o+=200

}

 

}

 

i teraz chce zrobić coś takiego, że jeżeli obiekt dzwonek się stworzy to zależnie od tego jaki ma image_index dodaje go do jednej z 4 list (tych co są na samej górze kodu). Próbowałem już różnych kombinacji, ale niestety, żadna nie działała.

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Tworzysz listę z 55 elementami, ale kart w talii jest chyba 52? (Zakładając, że chodzi o zwykłą talię do gry)

W każdym razie, z tych prostych opcji, to do wyboru masz dwie:

-wkładasz kartę do listy zależnie od reszty z dzielenia jej indeksu przez liczbę (będącą ilością wszystkich kolorów, dla talii do gry byłoby to 4);

-wkładasz kartę do listy zależnie od całości z ilorazu jej indeksu i liczby (będącej ilością wszystkich kart jednego koloru w talii, dla talii do gry byłoby to 13).

W pierwszym przypadku, jeżeli pierwszą listą jest global.www, to do niej wejdą karty z numerami 0,4,8 itd.

W drugim przypadku - karty z numerami od 0 do 12.

 

Pisząc "indeks", mam na myśli "image_index"

Odnośnik do komentarza
Udostępnij na innych stronach

razem z trzema jokerami jest 55 kart. Tylko za każdym razem jak używam image_index jest on równy wielu wynikom (55 czyli tyle ile obrazków kart). Trochę posiedziałem nad tym i napisałem taki kod

GML
j=0

q=0

 

repeat(55)

{

repeat(55)

{

if ds_list_find_index(global.lista,j)= q

j+=1

{

if ds_list_find_value (global.lista, q)= 0 or 4 or 8 or 12 or 16 or 20 or 24 or 28 or 32 or 36 or 40 or 44 or 48 or 52

{

ds_list_add(global.lista_d,q)

}

else

{

if ds_list_find_value (global.lista, q)= 1 or 5 or 9 or 13 or 17 or 21 or 25 or 29 or 33 or 37 or 41 or 45 or 49 or 53

{

ds_list_add(global.lista_s,q)

}

else

{

if ds_list_find_value (global.lista, q)= 2 or 6 or 10 or 14 or 18 or 22 or 26 or 30 or 34 or 38 or 42 or 46 or 50 or 54

{

ds_list_add(global.lista_w,q)

}

else

{

if ds_list_find_value (global.lista, q)= 3 or 7 or 11 or 15 or 19 or 23 or 27 or 31 or 35 or 39 or 43 or 47 or 51

{

ds_list_add(global.lista_z,q)

}

q+=1

}

}

}

}

}

}

 

niestety nie wiem czy zrobiłem coś źle czy jest w nim jakiś błąd. Zawsze do listy global.lista_d dodaje się jakieś 7 tysięcy grafik.

Odnośnik do komentarza
Udostępnij na innych stronach

Coś takiego nie będzie działać bo to jest warunek logiczny. Musiałbyś zrobić tak:

GML
if ds_list_find_value (global.lista, q)= 0 or ds_list_find_value (global.lista, q)=4 or ds_list_find_value (global.lista, q)=8

A czegoś takiego nie rób bo to durne.

Wyciągnij z nich wspólne elementy i na tym działaj. Wszystkie liczby są podzielne przez 4, ale kolejne warunki zwiększają się o jeden. Więc:

(liczba mod 4)+numer

 

Tylko że tak tego nie rób. Ty zupełnie od złej strony do tego pochodzisz. Prawdopodobnie nie potrzebujesz żadnych list ale musiałbyś dokładnie opisać czego potrzebujesz żebyśmy pomogli dokładnie.

Na razie rozwiązanie twojego problemu to:

 

 

GML
for(var i=0; i<55; i++) {

ds_list_add(global.lista,i)

if(i mod 4=0) {ds_list_add(global.lista_d,i}

if(i mod 4=1) {ds_list_add(global.lista_s,i}

if(i mod 4=2) {ds_list_add(global.lista_w,i}

if(i mod 4=3) {ds_list_add(global.lista_z,i}

}

Odnośnik do komentarza
Udostępnij na innych stronach

To dlatego, że sprite_exists odnosi się do zasobu w pamięci RAM (wszystkie sprite'y w projekcie gry podczas uruchamiania gry są tam ładowane, więc na 100% istnieją). Ty chcesz sprawdzić, czy dla danego sprite'a istnieje obiekt, do którego jest on przypisany.

Ale to też nie zadziała. Zakładam, że wszystkie obrazki masz w jednym sprite (inaczej nie używałbyś image_index), tak więc każda karta ma przypisany ten sam sprite. Tak jak Threef napisał, podchodzisz do tego od złej strony.

Najlepszym rozwiązaniem byłoby, żeby już podczas wybierania karty dodawać ją do właściwej listy, żeby później uniknąć kosztownego sprawdzania, czy istnieje obiekt z danym indeksem karty. Innymi słowy, tę część kodu, która wkłada kartę do odpowiedniej listy, powinieneś przesunąć tam, gdzie losujesz te pięć kart, i zmodyfikować, by działało.

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