Co jest lepsze do przechowywania map w grach

0

Hej, tak jak w tytule, w czym lepiej przechowywać dane do wczytywania mapy do gry, w JSON czy LUA? Jeśli to zależy to jakie są minusy i plusy obu rozwiązań?

5

Pliki binarne? Ogólnie porównujesz język programowania z formatem serializacji. Minusy i plusy to różnice między językiem programowania a formatem serializacji.

5

Już rozmawialiśmy, dostałeś na tyle adekwatną odpowiedź, na ile dałeś szczegóły.

  1. Czy mapa wykonuje algorytmy? Nie wiem, bo gry dla mnie nie istnieją. Las rośnie, to czynność mapy? Pożar coś niszczy?
    Czy tylko inne obiekty wykonują swoje algorytmy uwzględniają mapę (kolonizator buduje zamek na mapie) ?

  2. Parsery JSON w niemal każdy języku są, i nie jest z tym dużo korowodu. Integracja z Luą jest dalece bardziej skomplikowana. jeśli ostatecznie ma chodzić o "dane", które "kod" wypluje, to jest overengeneering

  3. ilość typów obiektów (=klas przynajmniej w szerokim sensie) jest z góry określona, czy podlega rozbudowie? Czy użytkownik gry (czyli: nie producent) ma dodawać nowe typy?

  4. Powtórzę, co pisałem, ujęcie "dane" i ujęcie "kod" ma swoje zastosowania. Zobacz Excella: większość komórek to dane, nieliczne to formuły.
    Mapa w wersji Lua też będzie miała ogromną przewagę statycznych danych, też tzreba je jakoś zaimplementować, i kółko się zamyka.

0

JSON jest uniwersalny, więc jeśli będziesz kiedyś portować grę, to nie będzie problemu, żeby w jakimś innym języku odczytać JSON, bez potrzeby osadzania interpretera LUA.

Ale nie piszesz, jaka to gra. Czemu w LUA chcesz trzymać mapę? To jakieś proceduralnie generowane mapy, że potrzebowałyby języka skryptowego do ich zapisu?

Trzymanie gry w JSON (albo jakimkolwiek innym formacie danych, w odróżnieniu do skryptów) ma tę zaletę, że łatwo potem możesz zrobić sobie wizualne narzędzia do tego (np. wizualny edytorek, którym będziesz stawiać obiekty), ma również tę zaletę, że łatwo przekonwertować to na inny format albo z innego formatu. Czyli np. masz w JSON, to napiszesz prosty skrypt i przerabiasz to w trymiga na XML, czy dowolny inny format. Skrypty natomiast niekoniecznie możesz łatwo przekonwertować (choć nie jest to niemożliwe, są transpilatory jednych języków programowania na inny - np. możesz wziąć kod w C++ i przekonwertować do JSa).

Ale JSON ma te ograniczenia, że to tylko dane, bez logiki, chyba, że:

  • sam wymyślisz jakby metaformat oparty o JSON, który będzie zawierał logikę (ale łatwo można przekombinować - tzw. inner platform effect).
  • oddelegujesz logikę do skryptów czy core'a twojej gry, a w JSON będziesz tylko się odwoływać do logiki np. za pomocą jakichś parametrów (np. w JSON będziesz mieć parametr "prędkość rośnięcia lasu", a sama logika rośnięcia (co to znaczy, że las rośnie?) będzie w jakichś skryptach gdzie indziej zupełnie).
0

Pytanie wzięło się stąd że przechowuje mapę w JSON, jest to mapa statyczna więc wnioskując po tym co piszecie jestt to dobry format do jej przechowywania, natomiast na internecie widziałem jak ludzie używają do tego Lua, co ja chce osiągnąć to w LUA przechowywać zachhowania NPC a do wczytywania samych NPC JSON, chciałem tylko wiedzieć czy takie mieszanki są dobra praktyką

0

Piszę grę 2d mmorpg opartą o canvas i mapę z JSON'a zaciągam. Masz darmowe programy do mapek jak Tiled i oprócz samej mapy możesz też dodawać warstwy obiektów, a do samych obiektów możesz dodawać właściwości, więc raczej można przechowywać zachowania NPC. Ja tam przechowuje dialogi razem z informacją, które metody mają się wykonać po wywołaniu dialogu, więc może sprosta twoim oczekiwaniom. Wiadomo, że musisz napisać własny parser, ale to chyba przy każdym rozwiązaniu.

0

Kiedyś kombinowałem z grą w stylu Dungeon Keeper i arkusz kalkulacyjny radził sobie całkiem dobrze :]
Możesz eksportować do CSV i importować w grze. Każda komórka ma dane dla swojego tile'a.

0

A jak to jest z wysyłaniem obiektów z c++ do skryptu Lua, dla mnie ciężki temat czytałem ze muszę stworzyć meta dane w lua albo użyć gotowej biblioteki np. Sol. Czy da się to jakoś prosto zrobić bez bibliotek czy lepiej ją jednak użyć albo czy wgl. takie przesyłanie obiektów jest dobrą praktyką?

0
cplusplus94 napisał(a):

A jak to jest z wysyłaniem obiektów z c++ do skryptu Lua, dla mnie ciężki temat czytałem ze muszę stworzyć meta dane w lua albo użyć gotowej biblioteki np. Sol. Czy da się to jakoś prosto zrobić bez bibliotek czy lepiej ją jednak użyć albo czy wgl. takie przesyłanie obiektów jest dobrą praktyką?

  1. Nie będzie miodowo w żaden sposób. Trochę wiedzy i roboty trzeba, samo się nie zrobi. Biblioteki tak/nie, zależy
  2. Metadane w Lua mają specyficzny sens - na pytanie nie da się odpowiedzieć bez szczegółów. tak/nie, zależy. Ale nieprawdą jest, że zawsze programista integrujący musi zapewnić metadane.
  3. Nie sposób wygooglac biblioteki Sol, daj link.
  4. "Jakieś" przesyłanie obiektów jest istota integracji języka Lua z hostem. Ogólnie Tak, czasem /nie / zależy
0

@cplusplus94: Bitmapa, to ile bitów/bajtów na "pixel" zależy już od ciebie, podobnie jak decyzja jakie rzeczy będą tam przechowywane - wysokość terenu, roślinki, dostępność dla "ludzika" itd. Dlaczego tak, a nie jakieś JSON? Otóż, ponieważ, bo:

  • bitmapę możesz bezpośrednie wczytać, bez dekodowania czegokolwiek
  • możesz sobie w prosty sposób wybrać dowolny fragment, który chcesz załadować do pamięci
  • struktury bitmapowe da się obsługiwać bez najmniejszego problemu z każdego języka programowania, włączając w to asm, CUDA, OpenCL, czy co tam przyjdzie do głowy
  • bitmapę można bardzo łatwo zrobić w jakimś Gimpie, PS, itp, a jak potrzeba to i pociąć na kawałki i robić inne cuda. Albo po prostu wyświetlić i będzie to dużo bardziej "human readable" niż dowolny format tekstowy

1 użytkowników online, w tym zalogowanych: 0, gości: 1