Moje pytanie brzmi, czy powinienem używać plików tekstowych do zapisywania danych mojej gry. Mam kilka podstawowych obaw związanych z tym:
Naprawdę nie ma sposobu na ochronę danych, a zatem użytkownik może spieprzyć wszystko, jeśli go dotknie, a ja nie chcę, aby tak się stało.
To chyba nie jest najskuteczniejszy sposób przechowywania moich danych (będzie ich dużo)
Wiem jednak, jak skutecznie parsować / pisać do plików tekstowych, więc dla prototypowania były fantastyczne. Chcę tylko spojrzeć w przyszłość, na co powinienem pomyśleć o zmianie, aby nie uderzyło mnie to w twarz pod koniec rozwoju.
Jeśli nie powinienem używać plików tekstowych, czego powinienem używać? Potrzebuję czegoś kompatybilnego z C ++.
c++
serialization
Althezel
źródło
źródło
Odpowiedzi:
Na razie, ponieważ dopiero zaczynasz, pliki tekstowe prawdopodobnie są w porządku. W twoim pytaniu jest kilka problemów, którymi się zajmę.
Ochrona danych nie jest tak istotna, jak zapewne myślisz. Jeśli grasz w trybie dla wielu graczy, dane i tak zostaną zapisane po stronie serwera. Jeśli Twoja gra jest dla jednego gracza, to co jeśli gracze zmodyfikują dane? Jeśli coś zepsują, to naprawdę ich wina i mogą ponownie zainstalować.
Wydajność to także coś, czego często nie planujemy właściwie. Nie powinno się naprawdę zoptymalizować aż faktycznie mierzyć problem z wydajnością. Domyślam się, że prawdopodobnie będziesz mieć dużo danych, które nie są tak duże i że pliki tekstowe będą w porządku.
Biorąc to pod uwagę, najlepiej jest jak najlepiej wyodrębnić procedury zapisywania i ładowania danych. Na przykład możesz mieć klasę podstawową, powiedzmy
DataWriter
, a następnie zapewnić różne implementacje różnych metod. Bardzo prosty przykład wyglądałby następująco:Kiedy w końcu profilujesz grę i zdajesz sobie sprawę, że wąskim gardłem w wydajności jest zapisywanie plików, możesz zapewnić kolejną implementację tej klasy (na przykład zamiast pisać do bazy danych) z minimalnymi zmianami w wywoływanym kodzie.
źródło
Słowo Dane gry może na przykład oznaczać wiele rzeczy
Dla każdej kategorii możesz zastosować inne podejście.
Na przykład możesz użyć SQLite do lokalizacji, plików binarnych dla Map, tekstur, dźwięków i tak dalej.
Do konfiguracji należy użyć łatwych do zmiany plików XML.
Jak zawsze poprawną odpowiedzią jest „to zależy”.
Istnieje wiele parserów xml z powiązaniem c ++ i istnieje również powiązanie c ++ dla SQLite.
źródło
Możesz zapisać swoje dane jako binarny obiekt blob i przesłać strumieniowo dane z powrotem, gdy będziesz mieć dostęp do tego pliku. To rozwiązałoby oba problemy. Upewnij się tylko, że kod serializacji jest dokładnie taki sam jak de-serializacji.
Streaming w binarnym obiekcie blob jest stosunkowo szybki, a także uniemożliwia użytkownikowi zobaczenie danych i ich zmianę.
Możesz to wszystko osiągnąć za pomocą standardowych strumieni bibliotecznych.
źródło
float
członka do jednego obiekt), stare zapisy stają się całkowicie nieprawidłowe. Trudno sobie z tym poradzić podczas programowania, ale jeśli jesteś do tego zdolny, to na pewno.