Hawaxi Opublikowano 24 Marca 2015 Udostępnij Opublikowano 24 Marca 2015 Witam, chce zrobić "inventory" które ma wyświetlać wszystkie obiekty dostępne w grze, i tu mam problem ponieważ każdy obiekt ma inną nazwę. Mam stworzone całe eq ale musze jeszcze włożyć w nie wszystkie obiekty... Mój kod: obj_inv2 > Create GML InvMax=6; obj_inv2 > Draw GML for (i=0; i<InvMax; i+=1) { draw_sprite(spr_kora, 1, x+(i*65), 64); } Ma ktoś pomysł jak to zrobić? Jeśli ktoś nie zrozumiał co chce zrobić to chodzi mi o inventory takie jak jest w minecrafcie na creative (widzisz wszystkie bloki dostępne w grze). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 24 Marca 2015 Udostępnij Opublikowano 24 Marca 2015 To nie prawda że wszystkie obiekty mają inną nazwę. Tak na prawdę każdy obiekt jest ponumertowany po kolei numerem ID, a jego nazwa po prostu oznacza jego ID. Mozesz sprawdzić wszystkie ID tak jakbyś normalnie sprawdzał zmienną. np: draw_text(0,0,spr_kora) Mając wszystkie ID może się okazać że wszystkie twoje obiekty są po kolei dlatego będziesz mógł pętlą (zamiast ręcznie) wypisać wszystkie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 24 Marca 2015 Udostępnij Opublikowano 24 Marca 2015 Nie napiszę Ci dokładnie kodu, ale coś takiego. Tworzysz listę lub stack (odsyłam do dokumentacji http://www.gmclan.org/index.php?wiki=category&zm=20) Teraz taki trik GML stak=ds_stack_create(); //tworzymy nasz stack with(object) //Każdy obiekt, o nazwie object { ds_stack_push(stak, id) //ułoży swoje ID na tym staku } A potem przy wyświetlaniu tego korzystasz z ds_stack_pop(id). Myślę, że dasz radę, jak coś to napisz, a postaram się wszystko ładnie opisać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 25 Marca 2015 Autor Udostępnij Opublikowano 25 Marca 2015 Okej, troche poczytałem bo nie zabardzo wiedziałem jak działa ten stack i jak narazie udało mi się zrobić coś takiego: obj_inv2 > Draw GML lista =ds_stack_create(); with(object) { ds_stack_push(lista, id); } for (i=0; i<InvMax; i+=1) { draw_sprite(spr_kora, 1, x+(i*65), 64); ds_stack_pop(lista); draw_sprite(lista, 1, x+(i*65), 64); } Wyświetla jeden ten sam obiekt we wszystkich slotach, później ten obiekt zamienia się na inny i tak co chwilę.Jak już przejdzie przez wszystkie obiekty crashuje... Próbowałem też na inny sposób który też nie zadziałał: GML lista =ds_stack_create(); with(object) { ds_stack_push(lista, id); } for (i=0; i<InvMax; i+=1) { draw_sprite(spr_kora, 1, x+(i*65), 64); wybrany = ds_stack_pop(lista); draw_sprite(wybrany, 1, x+(i*65), 64); } Tutaj pokazywał się jeden obiekt we wszystkich slotach. Tutaj nic się nie działo: GML lista =ds_stack_create(); with(object) { ds_stack_push(lista, id); } for (i=0; i<InvMax; i+=1) { draw_sprite(spr_kora, 1, x+(i*65), 64); ds_stack_pop(lista); } Co zrobiłem źle? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Marca 2015 Udostępnij Opublikowano 25 Marca 2015 Gówno nie stack. Co ty Sutikku wypisujesz? Stack to kupka na którą można kłaść i brać tylko po jednym elemencie z góry. Nie powinna być ci potrzeba żadna struktura bo tylko będziesz dublować dane. Ale skoro chcesz robić to w ten sposób to już poprawiam. GML lista =ds_list_create(); with(object) { ds_list_add(other.lista, id); } for (i=0; i<ds_list_size(lista); i+=1) { draw_sprite(spr_kora, 1, x+(i*65), 64); item=ds_list_find_value(lista,i); draw_sprite(item, 1, x+(i*65), 64); } ds_list_destroy(lista) Create and destroy powinieneś wykonać tylko raz np w Create i Game End eventach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 25 Marca 2015 Udostępnij Opublikowano 25 Marca 2015 Przepraszam, ja to mam już taki chyba zwyczaj, pisania jakiś głupot ostatnio ;v Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 26 Marca 2015 Autor Udostępnij Opublikowano 26 Marca 2015 Nie wiem dlaczego ale ten kod co mi podałeś Threef, on nie działa. A twojego sposobu id nie użyłem bo id moich obiektów nie są po kolei... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 26 Marca 2015 Udostępnij Opublikowano 26 Marca 2015 Ja tam do inventory zawsze z tablicy dwuwymiarowej korzystałem. Prosta i zawsze działa jak należy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 26 Marca 2015 Autor Udostępnij Opublikowano 26 Marca 2015 Aha i chcę później dodać sklep do mojej gry i chciałbym żeby te obiekty które tam kupisz też się pojawiały na tej liście (dopiero jak je kupisz). Jak patrzyłem w internecie to nie żauważyłem opcji która dawała by możliwość dodania pojedyńczego obiektu do tego stacka. Jeśli jest to mnie poprawcię. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Marca 2015 Udostępnij Opublikowano 26 Marca 2015 Zapomnij o stackach, one w niczym tu nie pomogą. Jeżeli już to listy, a jeżeli już chcesz robić kupowanie to pomyśl nad ds_map. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 27 Marca 2015 Autor Udostępnij Opublikowano 27 Marca 2015 Skorzystałem z twojej porady i zrobiłem to z ds_map: GML inv = ds_map_create(); ds_map_add(inv, object, 1); ds_map_add(inv, object100, 1); ds_map_add(inv, object101, 1); ds_map_add(inv, object102, 1); ds_map_add(inv, object103, 1); for (i=0;i<ds_map_size(inv);i++) { if i != ds_map_size(inv)-(ds_map_size(inv)+1) // Sprawdzam czy to jest pierwszy obiekt w pętli { item = ds_map_find_next(inv, object); draw_sprite(item, 1, x+(i*65), 64); } else first = ds_map_find_first(inv); draw_sprite(first, 1, x+(i*65), 64); } Zrobiłem to całe zmieszanie z tym if w pętli bo nie wiedziałem czy ds_map_find_next zalicza też 1 obiekt. W tym kodzie wyskakuje mi coś przy zmiennej first: Push :: Execution Error - Variable Get -1.first(100039, 0) at gml_Object_obj_inv2_Create_0 (line 20) - draw_sprite(first, 1, x+(i*65), 64); I mam jeszcze jedno pytanko, czy jak zrobie: GML draw_sprite(ds_map_find_first(inv), 1, x+(i*65), 64); Zamiast: GML first = ds_map_find_first(inv); draw_sprite(first, 1, x+(i*65), 64); Czy to ma jakieś znaczenie czy też to jest poprostu ze względów stylistycznych (żeby łatwiej się odczytywało kod)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 27 Marca 2015 Udostępnij Opublikowano 27 Marca 2015 GML first = ds_map_find_first(inv); draw_sprite(first, 1, x+(i*65), 64); zamień na: GML { first = ds_map_find_first(inv); draw_sprite(first, 1, x+(i*65), 64); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 27 Marca 2015 Autor Udostępnij Opublikowano 27 Marca 2015 Okej ale głupi błąd zrobiłem... Nie ma błędu ale też nic się nie wyświetlało. Zmieniłem event z create na draw i teraz wyświetla się zupełnie inny obiekt którego wcale nie dodałem do ds_map... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 27 Marca 2015 Udostępnij Opublikowano 27 Marca 2015 Teraz widzę jak bardzo nie rozumiesz dokumentacji. Przy ds_map nie poznasz klucza więc takie przechowywanie danych nie ma sensu. Mówiłem: ds_list. Do listy po kolei dodajesz wszystkie elementy. Potem normalnie lecisz po wszystkim pętlą i wyciągasz id. ds_map mówiłem jeżeli chcesz robić kupowanie bo wtedy możesz (mając już pobrane id z listy) zobaczyć w mapie ile jest danego elementu. Jeżeli do poniedziałku sobie nie poradzisz to wszystko spokojnie wytłumaczę. Teraz jestem zabiegany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 14 Kwietnia 2015 Autor Udostępnij Opublikowano 14 Kwietnia 2015 okej zrobiłem 5 obiektów żeby to przetestować dodałem je do listy,stworzyłem pętle itd. ale i tak wyświetlają się zupełnie inne obiekty których nie dodałem do listy... w dokumentacji pisze że mam wpisać wartość: ds_list_add(id, wartość) ale jaką wartość? Próbowałem wpisać w tym miejscu zamiast nazwy obiektów ich id lecz to też nie zadziałało. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 17 Kwietnia 2015 Udostępnij Opublikowano 17 Kwietnia 2015 Może dodaj nazwy sprite'ów w końcu to je później w pętli wyświetlasz na ekranie. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 22 Kwietnia 2015 Autor Udostępnij Opublikowano 22 Kwietnia 2015 To musi być object a nie sprite. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 22 Kwietnia 2015 Udostępnij Opublikowano 22 Kwietnia 2015 To podaj kod na rysowanie ekwipunku, bo jeśli to ma być obiekt to musisz użyć instace_create do stworzenia instancji tego obiektu. Z tego co widzę z poprzednich kodów wynika jasno próbujesz narysować instancje obiektu. :D I pamiętaj że instrukcje zaczynające się od przedrostka "draw_" działają tylko w evencie draw. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 24 Kwietnia 2015 Autor Udostępnij Opublikowano 24 Kwietnia 2015 Miałeś racje używałem draw_sprite a nie instance_create :P Dzieki wszystkim za pomoc już wszystko działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę