Nie jestem zdecydowany, czy chcę zaimplementować tę funkcję w mojej grze, czy nie. Nie chcę, aby projekt wymknął się spod kontroli, dlatego najpierw skupiam się na mechanice rdzenia.
Czy jest to funkcja, którą łatwo wdrożyć później, zakładając, że wszystkie dane przechowuję i przechowuję?
game-design
achievements
Bryan Harrington
źródło
źródło
Odpowiedzi:
Czy pytasz z punktu widzenia technicznych aspektów wdrożenia lub konsekwencji projektu? Tak czy inaczej odpowiedź na twoje pytanie brzmi „tak”.
Od strony technicznej ogólnie rzecz biorąc, po prostu znajdujesz haczyki w kodzie, które reagują na Twoje osiągnięcia i umieszczasz tam swój kod śledzenia statystyk. Być może będziesz musiał dodać kilka nowych rzeczy, jeśli śledzisz rzeczy, które nie są dokładnie dyskretnymi zdarzeniami, które mają już miejsce w grze (na przykład: X rozegranych godzin).
Z punktu widzenia projektowania osiągnięcia są zewnętrznymi motywatorami, a ich dodawanie nie odgrywa zbyt dużej roli w podstawowej pętli rozgrywki, z wyjątkiem ludzi, którzy chcą ich szukać. Są więc całkiem bezpieczne.
źródło
shotsFired++
się z częścią, w której pojawiają się nowe pociski, orazshotsHit++
w części, w której kula wpływa na innego gracza. Pomogło mi to wyśledzić, kto strzelał jaką kulą (ponieważ używam tych informacji do śledzenia, kto dostał, co zabił itp.)Pod warunkiem, że silnik gry jest dobrze zaprojektowany i korzysta z pewnego rodzaju obserwowalnego systemu zdarzeń (w którym zdarzenia są generowane i nasłuchiwane przez zainteresowane strony), powinno być dość łatwo „podłączyć” system osiągnięć w późniejszym czasie (poprzez dodanie odpowiedni słuchacze). Ten rodzaj konstrukcji jest bardzo elastyczny.
źródło
Ponieważ już istniejący ludzie dodali dobre odpowiedzi, pozwól mi odpowiedzieć na odkryte sytuacje.
Jeśli w ogóle jesteś w pozycji, w której ukończyłeś kodowanie swojej gry, a teraz zaczynasz kodować osiągnięcia i uważasz, że bardzo skomplikowane jest utrzymywanie zbyt wielu zmiennych i liczników oraz usuwanie ich przy określonych zdarzeniach i tym podobnych.
Zawsze możesz utworzyć jedną klasę (najlepiej singleton), aby otrzymywać wszystkie wydarzenia. Teraz wypisz wszystkie swoje osiągnięcia. Następnie wypisz wszystkie zdarzenia związane z grą, które należy śledzić. Na przykład moja obecna lista wygląda tak
KILL ENEMY - chodzenie, kule ŚMIERĆ GRACZA - odpadanie, zdrowie ENTER_ROOM, EXIT_ROOM itp.
Te dodatkowe szczegóły, takie jak chodzenie, pociski mogą być parametrami. Teraz mają jedną funkcję o nazwie fireEvent w tej klasie śledzenia osiągnięć. Przeszukaj wszystkie miejsca w kodzie, w których musisz wystrzelićZdarzenia i wywołaj tę funkcję. Teraz wykonaj resztę brudnej roboty w klasie osiągnięć. jest to najbezpieczniejszy sposób, aby nie zakłócać istniejącego kodu i osiągnięć kodu. Dla mnie zadziałało to dość szybko.
źródło