2015-09-07 12 views
5

Nurkuję w GameplayKit ze Spritekit i z tego co zbieram, ty podklasę GKEntity, a następnie zacznij dodawać GKComponents do tego obiektu. Istota będzie mniej więcej po prostu workiem komponentów, które wypełniają jakąś funkcję.GameplayKit - Zamieszanie w wysyłaniu wiadomości między komponentami

Część, o której nie mam pojęcia, to komunikacja między komponentami. Jak zachować ich rozłączenie. Na przykład, powiedzmy, że mam klasę HealthComponent i dodaję ten komponent do PlayerEntity i EnemyEntity. Mam też HealthBarComponent, ale chcę tylko, aby pasek zdrowia pojawił się nad odtwarzaczem. Kiedy gracz otrzymuje obrażenia, informacje te muszą zostać zaktualizowane w HealthBarComponent.

W jaki sposób należy przesłać tę informację? Widzę, że w dokumentacji jest klasa o nazwie GKComponentSystem. Nie jestem w 100% na temat tego, jak należy to wykorzystać.

Kolejne pytanie brzmi: kiedy zdrowie gracza osiągnie zero, powinien się zregenerować, podczas gdy wróg powinien pozostać martwy. Gdy graczowi skończy się życie, gra się kończy.

System opieki zdrowotnej dla wroga i gracza byłby mniej więcej taki sam, ale wydarzenia wokół śmierci byłyby zupełnie inne dla każdego. Nie śledzę, jak korzystać z systemu komponentów, zachowując unikalne zachowanie każdej jednostki.

niektóre pseudo-kod byłoby świetnie

+0

na dole tutaj mówią o komunikacji między komponentami. wydaje się, że nie ma żadnego konkretnego sposobu, aby zrobić to doskonale. Może być konieczne pewne sprzężenie. http://gameprogrammingpatterns.com/component.html – hamobi

+1

Może się okazać, że przykładowy projekt [DemoBots] (https://developer.apple.com/library/prerelease/ios/samplecode/DemoBots/Introduction/Intro.html) jest interesujący. Ekwiwalentem gry jest ładunek, za który odpowiada "ChargeComponent", który powiadamia swojego delegata o utracie ładunku. Gra ma również podobną mechanikę do regeneracji zdrowia, o której wspomniałeś, która została zaimplementowana przy użyciu "GKStateMachine" i stanów towarzyszących. – ABakerSmith

Odpowiedz

5

Wygląda na to ramy działa nieco inaczej niż inne widziałem w tym systemów działa tylko na jednym rodzaju komponent zamiast na podmioty z grup typów komponentów.

W środowisku GamePlay-Kit można albo ręcznie przepuszczać i aktualizować jednostki ręcznie (co z kolei aktualizuje poszczególne komponenty elementów) lub tworzyć klasę dziedziczącą po GKComponentSystem. Następnie po aktualizacji systemu aktualizuje wszystkie elementy you have added to it tak długo, jak ich typ klasa odpowiada typowi ty initialized the system with

obsługiwać bar zdrowotnej problem powiedziałbym zrobić HealthBarComponent, które podczas jego aktualizacji, pobiera HealthComponent z jego właściciel, odczytuje wartość zdrowotną & renderuje się każdą klatkę. Ale ty tylko add a HealthBarComponent do swojej jednostki gracza.

Można pobrać podmiot właściciel od komponentu i odwrotnie (patrz GKComponent.entity & GKEntity.components) więc można zaktualizować pasek zdrowia tak:

/*Note: I'm not an ios developer, this is pseudocode*/ 

HealthBarComponent.update(){ 
    int healthValue = self.entity.components.get(HealthComponent).value; 
    //Now render your health bar accordingly or hold onto this for later 
} 

obsłużyć problem gracz śmierci Myślę najlepszym zakład będzie miał dwa różne typy składników zdrowia (PlayerHealth & EnemyHealth) z dwoma różnymi odpowiednimi systemami. To lub ma jeden składnik Health, ale 2 oddzielne komponenty "Death". Tak, wydaje się to zbędne, ale ciężko mi jest myśleć o lepszej drodze w tym szkielecie. Z mojego doświadczenia wynika, że ​​poświęcasz swój czas na martwienie się o to, że wszystko jest całkowicie rozłączone i możliwe do ponownego użycia lub budujesz grę :)

2

Komponenty mają dostęp do swoich podmiotów za pośrednictwem właściwości self.entity.Stamtąd można wyszukać inne składniki w celu przekazania danych za pośrednictwem podmiotu componentForClass nieruchomości:

guard let moveComponent = entity?.componentForClass(MoveComponent.self) else { 
     fatalError("A MovementComponent's entity must have a MoveComponent") 
    } 

Książka iOS Games by Tutorials ma doskonały poradnik, który obejmuje podmioty GameplayKit i komponentów.

Powiązane problemy