Google Play Services Achievements a wzorzec do achievementów

0

Dodałem do swojej gry Google Play Services Achievements jednak nie zadowala mnie sposób jakim ogarnąłem to w kodzie. Aktualnie mam różne obiekty i funkcję, powiedzmy monety, portale, metoda player.kill() no i we wszystkich tych obiektach i metodach są porozsiewane znowu inne funkcję i ify które sprawdzają ile gracz zdobył monet,na którym jest lvlu czy ile razy zginął i tak przyznawane są osiągnięcia. Nie podoba mi się ten sposób bo przecież bardzo łatwo można się tutaj pogubić, myślałem żeby zrobić coś na zasadzie (zapomniałem chyba nazwę) Mediator pattern. Każdy obiekt będzie wysyłał sygnał do obiektu AchievementsManager kiedy nastąpi zmiana, czyli jak gracz zdobędzie monetę, zginie, czy coś innego to po prostu wyślę sygnał do AchievementsManagera że jakaś zmiana nastąpiła, i dopiero tam np. z pliku manager wczyta sobie ilość zebranych monet, śmierci itp. i tam ogarnie całą logikę przyznawania osiągnięć, wydaje mi się to bardziej przejrzyste, ale chciałbym żebyście napisali swoje propozycję rozwiązania tego problemu zanim zacznę coś zmieniać.

0
ProgramistaPralki napisał(a):

tam np. z pliku manager wczyta sobie ilość zebranych monet, śmierci itp. i tam ogarnie całą logikę przyznawania osiągnięć,[...]

Raczej nie będziesz miał aż tylu danych, żeby trzeba było zachowywać je w plikach ;) Takie liczby możesz trzymać w pamięci.

Chyba, że chodzi Ci o osiągnięcia, które mogą zajść przy kilku uruchomieniach gry. Ale i tak jak wczytujesz stan gry, to wczytasz sobie aktualny postęp wykonywanych osiągnięć.

Aktualnie mam różne obiekty i funkcję, powiedzmy monety, portale, metoda player.kill() no i we wszystkich tych obiektach i metodach są porozsiewane znowu inne funkcję i ify które sprawdzają ile gracz zdobył monet,na którym jest lvlu czy ile razy zginął i tak przyznawane są osiągnięcia. Nie podoba mi się ten sposób bo przecież bardzo łatwo można się tutaj pogubić,

Jak napiszesz klasę managera do achievementów, to dalej będziesz miał metody porozsiewane po całym projekcie, ale przynajmniej to będą pojedyncze odwołania do metod, a nie fragmenty logiki osiągnięć.

Będziesz mógł szybko znaleźć wszystkie referencje do klasy managera w swoim IDE. Ale tak samo szybko możesz szukać referencji do API Google Play Services ;)

Przy okazji, jak będziesz robił port na iOS, to wystarczy w managerze dopisać odwołania do Game Center.

0

@Spine: Rozumiem że te porozsiewane funkcję to raczej normalka?

Jeszcze zerknę na to//gameprogrammingpatterns.com/observer.html

1

No raczej to jest najwydajniejsze rozwiązanie i najbardziej przewidywalne.

Inaczej musiałbyś napisać nasłuchiwacza i z jakąś częstotliwością monitorować wszelkie zmiany wartości.

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