NukeBoards - Kreatywność przede wszystkim
FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  DownloadDownload
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[TGF]Inwentarz - jakieś pomysły?
Autor Wiadomość
Tasmpol 
Bohater
young god


Główny edytor: MMF2
Pomógł: 14 razy
Posty: 955

24606 Prestiż
Wysłany: 11-11-2005, 22:08   [TGF]Inwentarz - jakieś pomysły?

Witajcie, znowu ja. Tym razem chodzi mi o inwentarz, a dokładniej o jego wykonanie. O co chodzi: klikam na obiekt i przenosi go do slota 1. Klikam na drugi obiekt i jeżeli slot 1 jest zajęty, przenoszę ten obiekt do slota 2. Klikam na trzeci obiekt, jeżeli slot 1 i 2 jest zajęty to przenoszę go do slotu 3. Czyli, zawsze przenosi obiekt do slotu o najniższej liczbie identyfikacyjnej z aktualnie pustych slotów. Oczywiście, można odwrotnie - najpierw wsadzi do slotu o najwyższej liczbie identyfikacyjnej. I jak to zrobić? Myślę, myślę i wymyśleć nie mogę. Piszcie swoje propozycje (nie przykłady! nie chcę przykładów), a ja dalej pomyślę.
Edit1:
Zrobiłem coś takiego - wszystkie przedmioty przenoszone są do jednego slota, jeżeli obiekt 2 przeniesie się do slota i będzie już tam obiekt 1 to obiekt 1 przenoszony jest o 100px w prawo, czyli do nst. slota. Noo chyba działa, ale nie jest to najlepsze rozwiązanie. Wiec czekam na inne...
Pragnę jeszcze zaznaczyć, że pierwszy raz w życiu tworzę inwentarz, więc mam prawo tego nie umieć ;)
_________________
the preacher man says its the end of time
 
     
Natie 
Bohaterka


Główny edytor: Fusion 2.5
Pojedynki: nie
Pomogła: 7 razy
Posty: 380

10110 Prestiż
Wysłany: 11-11-2005, 22:51   

A inwentarz gdzie jest na ekranie, i czy jest on cały czas widoczny?
 
     
Kurczak 
Starszy sierżant
będący fanem Slasha.

Główny edytor: TGF
Pojedynki: tak
Pomógł: 8 razy
Posty: 165

9364 Prestiż
Wysłany: 11-11-2005, 22:56   

Możliwe że chodzi ci o coś takiego:
przykład
Zrobiłem przykład bo nie lubię się rozpisywać.
A, sorry za brak komentów, ale to powinno być w miarę jasne.
_________________

...
 
 
     
Tasmpol 
Bohater
young god


Główny edytor: MMF2
Pomógł: 14 razy
Posty: 955

24606 Prestiż
Wysłany: 11-11-2005, 23:19   

CC, najpewniej jest ukrywany w czasie prowadzenia dialogów - wiesz, będzie złozony z kilku obiektów aktywnych, w jednej grupie, więc jednym zdarzeniem schowam i pojawię znowu cały panel.
Kurczaku, nie mogę ściągnąć pliku, jest napisane, że z tego IP już coś teraz ściągam (chociaż nic nie ściągam)... Jak możesz - wrzuć to gdzie indziej ;)
_________________
the preacher man says its the end of time
 
     
BROO 
Pupogłowy
Wizard x-)


Główny edytor: TGF
Pojedynki: nie
Pomógł: 37 razy
Posty: 502

31680 Prestiż
Wysłany: 11-11-2005, 23:54   

Gorąco polecam reprezentowanie informacji na temat posiadanego inwentarza w obiekcie tablicy (Dynamic Array 2).

Otóż... tablica posiada 4 jakże istotne polecenia:
:arrow: dopisz wartość (na końcu)
:arrow: ustaw wartość na pozycji X
:arrow: wstaw wartość w pozycji X
:arrow: usuń wartość na pozycji X

Odpowiedź rozdzieliłem na 2 etapy:
:arrow: Jak pokazać zawartość tablicy i jakie informacje weń umieszczać
:arrow: Jak ma działać silnik dodawania/zabierania rzeczy

Jeżeli miałeś do czynienia z przedstawianiem zawartości tablicy za pomocą obiektów aktywnych to punkt 1. możesz pominąć.

1. pokaz zawartości tablicy za pomocą obiektów aktywnych
Załóżmy, że masz 16 różnych rodzajów przedmiotów, które mogą znaleźć się w inwentarzu. Ponadto, masz 5 kieszeni. W efekcie Twoja tablica będzie składać się z zaledwie 5 elementów przyjmujących wartości:
:arrow: 0 dla pustej kieszeni
:arrow: 1,2,3,4,5...16 dla kolejnych rodzajów przedmiotów

Oznaczasz: zakładasz, że pod 1 kryje się Cukierek, pod 2 jest butelka, pod 3 papier toaletowy itd. W okienku inwentarza tworzysz 5 obiektów aktywnych zawierających obrazki umieszczone w odpowiednich kierunkach:
:arrow: dla kierunku "0" masz pusty obrazek
:arrow: dla kierunku "1" masz narysowany śliczny cukierek
:arrow: dla kier.="2" jest butelka itd.

Na początku gry dodajesz zdarzenie przydzielające tym pięciu obiektom aktywnym wartości A: 0, 1, 2, 3, 4 (zgodne z numerami ID kieszeni zapisanymi w tablicy).

Na zdarzenie "zawsze", albo lepiej: dotyczące zmiany inwentarza (zjedzenie cukierka, przekazanie butelki, wzięcie papieru...) ustawiasz każdemu z Twoich obiektów inwentarza wartość kierunku równą Val("Dynamic Array", Value A(inwentarz) ). W ten sposób masz przedstawiony inwentarz.

2. działanie dodawania/zabierania inwentarza
Właściwie to będzie tylko szybkie pokazanie zasady działania procedur Dynamic Array 2 na danych. Pozostajesz przy 5-elementowej tablicy wypełnionej różnymi rodzajami przedmiotów.

Uzupełnianie tablicy będzie takie, że puste kieszenie, jeśli wystąpią, zawsze znajdą się po prawej stronie.

Masz przykładowo tablicę wypełnioną w następujący sposób:
kieszeń pierwsza (A=0) -> przedmiot nr 11
kieszeń druga (A=1) -> przedmiot nr 8
kieszeń trzecia (A=2) -> przedmiot nr 1
kieszeń czwarta (A=3) -> przedmiot nr 0 - jest pusta.
kieszeń piąta (A=4) -> przedmiot nr 0 - jest pusta.

Krótka pisząc, stan inwentarza to: 11, 8, 1, 0, 0.

Gdy chcesz podjąć butelkę (przedmiot nr 2) -> dodajesz element za pomocą APPEND VALUE.
Po dodaniu stan inwentarza to: 11, 8, 1, 2, 0.

Chcesz pozbyć się przedmiotu w drugiej kieszeni przez kliknięcie na nią (przedmiot nr 8, a kieszeń 2, czyli A=1), wówczas używasz polecenia DELETE AT - i wpisujesz Value A(inwentarz)
Po skasowaniu przedmiotu inwentarz po prawej idzie w lewo: 11, 1, 2, 0, 0.

Jeśli jednak podnosisz papier toaletowy (nr 3) i chcesz myszą wybrać, w które miejsce go "wcisnąć" - używasz polecenia INSERT AT... sprawa tutaj jednak lekko się komplikuje.
Załóżmy, że Twój stan inwentarza to: 11, 8, 0, 0, 0.

Jeśli chcesz wstawić w drugą kieszeń papier...
...to otrzymujesz: 11, 3, 8, 0, 0.
Przedmiot nr 8 został przesunięty i o to chodzi.

Natomiast... jeśli jednak chcesz wstawić w czwartą kieszeń papier.
Wówczas będziesz miał: 11, 8, 0, 3, 0
Problem się pojawi, gdyż powstaje luka między 8 a 3, której nie zapełnisz nawet APPENDEM. W takich wypadkach należy podeprzeć się jeszcze jednym warunkami do zdarzenia wkładania przedmiotu w kieszeń:
:arrow: JEŻELI to NIE JEST pierwsza kieszeń
:arrow: JEŻELI kieszeń po lewej stronie NIE JEST pusta

Ufff... wszystko zrozumiałe?
 
     
Slawo 
Legenda


Główny edytor: MMF2
Pojedynki: nie
Pomógł: 16 razy
Posty: 706

25566 Prestiż
Wysłany: 12-11-2005, 00:26   

uff, cały BROO, i co są warte wszystkie forumy bez BROO i jemu podobnych ? nic ...
 
     
Tasmpol 
Bohater
young god


Główny edytor: MMF2
Pomógł: 14 razy
Posty: 955

24606 Prestiż
Wysłany: 12-11-2005, 00:46   

Noo, nieźle :) Oczywiście, wszystko działa, na razie zrobiłem tylko dodawanie obiektów - potem zrobię ich wykorzystywanie. Jak dotąd nie używałem zbyt często tablic - nie widziałem dla nich zastosowania innego niż przechowywanie dużych ilości danych.
Wracając do problemu, nasuwa się kolejny: jak zachować zawartość tablicy w grze, by po przejściu do nst. lokacji była ona dalej zapełniona? Chyba nie da się zapisać tablicy do wartości globalnej... Są może na to jakieś harcerskie sposoby?
_________________
the preacher man says its the end of time
 
     
BROO 
Pupogłowy
Wizard x-)


Główny edytor: TGF
Pojedynki: nie
Pomógł: 37 razy
Posty: 502

31680 Prestiż
Wysłany: 12-11-2005, 00:54   

Yyy... następny poziom... trochę mnie zmieszałeś Tasmpolu. ;)

Zawsze możesz przetransferować dane do zmiennych globalnych po to, by w następnym etapie z powrotem wstawić je do tablicy na starcie początku.

Jeżeli masz zajęte dużo zmiennych globalnych, to zawsze informacje o 5 kieszeniach możesz przechować w jednej zmiennej korzystając z systemu n-rodzajoilościowego.

Zakładając, że masz 5 kieszeni i 16 rodzajów przedmiotów, możesz je zapisać w 1 liczbie równej tyle:
1*kieszeń1 + 16*kieszeń2 + (16^2)*kieszeń3 + (16^3)*kieszeń4 + (16^4)*kieszeń5.

A później odczytać do tablicy:
Kieszeń1 = (global value 1) /1) mod 16
Kieszeń2 = ((global value 1) /16) mod 16
Kieszeń3 = ((global value 1) /(16^2) ) mod 16
Kieszeń4 = ((global value 1) /(16^3) ) mod 16
Kieszeń5 = ((global value 1) /(16^4) ) mod 16
Ostatnio zmieniony przez Minty 24-08-2013, 14:27, w całości zmieniany 1 raz  
 
     
Omenski
Starszy kapral


Pomógł: 2 razy
Posty: 40

1019 Prestiż
Wysłany: 12-11-2005, 13:08   

Rzeczywiście dla małej liczby danych można je ręcznie przepisywać do wartości globalnych. Jednak zawsze można zastosować metodę zapisania tablicy do pliku na końcu etapu i jej wczytanie na samym początku. Tylko, że w tym rozwiązaniu trzeba uważać na jedną rzecz: rozszerzenie Dynamic Array 2 (1 zapewne też) ma problem z zapisaniem wartości =0. Ogólnie po prostu jeśli chcesz zapisać tablicę, sprawdź najpierw (np. przy użyciu Fast Loopa) czy nie ma w niej w jakimś polu wartości zerowej, bo jeśli się znalazła i ją zapisałeś, to już jej nie wczytasz. By to ominąć po prostu zastąp wartości zerowe np. przez -99.999.999, a następnie gdy wczytasz zastąp liczby -99.999.999 wartością 0.
 
 
     
Fadex 
Legenda
#4; #12; #18; #20; #21; #27


Główny edytor: MMF2 Dev
Pojedynki: nie
Pomógł: 105 razy
Posty: 1773

51612 Prestiż
Wysłany: 12-11-2005, 13:34   

Taka drobna rada:
Przy wielu kieszeniach użyj plug-inu 1000 global values ;)
_________________
If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat
 
 
     
Kurczak 
Starszy sierżant
będący fanem Slasha.

Główny edytor: TGF
Pojedynki: tak
Pomógł: 8 razy
Posty: 165

9364 Prestiż
Wysłany: 12-11-2005, 17:49   

W porównaniu z tym co napisał BROO mój przykładzik może się schować, ale wiadomo kto tu jest lepszym klikowcem, nie? ;)
Mojego przykładu radzę nie ściągać nawet, bo nie ma po co :|
_________________

...
 
 
     
Tasmpol 
Bohater
young god


Główny edytor: MMF2
Pomógł: 14 razy
Posty: 955

24606 Prestiż
Wysłany: 02-12-2005, 22:08   

Mam takie pytanie. Przy robieniu przygodówki trzeba dziesiątek przełączników globalnych. I tutaj mam pytanie, czy jest jakiś plugin, który zrobi bardzo wiele globalnych flag? Bo można oczywiście to zrobić za pomocą 1000 Global Values, każda wartość globalna może mieć 1 - odpowiada podniesionej fladze i 0 - odpowiada opuszczonej. Ale, dużo wygodniej i estetyczniej jest zrobić to flagami. Więc, czy istnieje dla TGF jakiś plugin dający globalne flagi?
_________________
the preacher man says its the end of time
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

PSK Cytaty Klikibaza - kopia wszystkich klików Klikipedia - encyklopedia o tworzeniu gier Discord KlikCzat Zaproszenie
Daj piniondza Wielkie Muzeum Klikowe

Powered by phpBB modified by Przemo © 2003 phpBB Group