Mam problem z wdrożeniem systemu ekwipunku w XNA (to nie ma znaczenia, może to być dowolna platforma), ale jak dotąd. Oto problem, który próbuję owinąć głową:
Jak mogę zdobyć przedmiot ze świata (pomyślisz, że kiedy zabijesz potwora, upuści zbroję) i weź go do ekwipunku mojego gracza?
Jeśli ekwipunek jest tylko listą przedmiotów, technicznie, jak mogę przenieść Stalowy Miecz ze świata do ekwipunku mojego gracza bez klasy, która może zrobić więcej niż jedną rzecz?
Obecnie mam strukturę przedmiotu, która zawiera unikalną wartość heksadecymalną, liczbę sztuk (dla stosów, takich jak strzały) i teksturę do renderowania w ekwipunku oraz niektóre inne nieistotne właściwości (nazwa, opis itp.) .
Byłbym źle zaprojektowany, gdybym musiał zmodyfikować istniejącą klasę przedmiotów, aby pomieścić pozycję na świecie, wraz z wykrywaniem kolizji (nie chcę, aby przedmiot spadł przez ziemię).
Dziękuję za wszelkie uwagi!
WorldItem
czegoś, co jest oddzielne od twojegoInventoryItem
? (MożeWorldItem
maInventoryItem
szablon, który po podniesieniu umieszcza się w ekwipunku gracza).Inventory
która pobieraWorldItem
i dodaje ją jakoInventoryItem
. Tak, aby mógł obsługiwać przypadki, w których przedmioty muszą się układać w stosy (np. Strzałki).Odpowiedzi:
Podejście, które wybrałbym, to mieć 2 różne struktury (lub klasy).
WorldItem
aInventoryItem
.Możesz następnie dodać
InventoryItem
jako własność / pole,WorldItem
które jest umieszczane w ekwipunku gracza po podniesieniu przedmiotu na świecie.Chcesz gdzieś (w klasie gracza lub dowolnej klasie przedmiotów) metody, która obsługuje dodawanie przedmiotów ekwipunku do ekwipunku gracza, aby poradzić sobie ze stosami jak przedmioty.
źródło
Jak wspomniano wcześniej, najlepszym rozwiązaniem byłoby podzielenie na wiele klas lub tablic. Stworzyłbym 3 klasy: Świat, Gracz i Przedmiot. Klasa światowa zawierałaby List WorldItems, podobnie jak klasa Gracza, ale o nazwie Lista Inwentarza. Kiedy gracz podnosi przedmiot, przenosisz go z listy na Świecie klasa do listy w klasie Player.
W pętli losowania w grze można utworzyć pętlę, która wyciąga wszystkie elementy z listy WorldItems na ekran, ale oczywiście ignoruje listę ekwipunku na obiekcie gracza.
źródło