Godot Wait For Animation To Finish
No dobra, przyznaję się. Mam problem z czekaniem. Szczególnie w Godocie. I, wiecie co? Uważam, że cały ten system czekania na zakończenie animacji jest… trochę przereklamowany.
Zaraz, zaraz! Zanim zaczniecie mnie bombardować komentarzami o tym, jak bardzo jestem w błędzie, posłuchajcie. Bo ja rozumiem. Teoretycznie to ma sens. Chcesz, żeby coś się stało po animacji? No to czekasz! Logiczne. Pięknie napisane w tutorialu. Praktyczne?
Godot i Czekanie - To Związek Z Przymusu?
No właśnie nie do końca. Ile razy zdarzyło wam się czekać, czekać, czekać, a animacja… jakby nigdy się nie skończyła? Albo skończyła się w dziwnym momencie, a wasz kod poszedł w kompletnie innym kierunku? A ile razy musieliście przekombinowywać z signals, bo to jedyny sposób, żeby to wszystko zadziałało tak, jak powinno?
Bo widzicie, moim zdaniem, to całe czekanie to trochę jak stanie w kolejce w supermarkecie. Zawsze trafisz na tą jedną osobę, która potrzebuje pomocy z każdym jednym produktem, ma miliony kuponów i w ogóle nie rozumie jak działa karta płatnicza. I czekasz. I czekasz. I twoja gra też czeka. A gracz myśli: "Co jest grane?!".
Ale Co Zrobić?!
Ok, ok. Nie chodzi o to, żeby całkowicie zrezygnować z czekania. Czasami po prostu trzeba. Ale moim zdaniem, w większości przypadków, można to obejść. Można być sprytniejszym!
Można na przykład użyć timers. Ustawiasz timer na czas trwania animacji (albo odrobinę dłużej, dla pewności), i po problemie. Proste? Proste! Może nie tak eleganckie, jak yield(animation_player, "animation_finished"), ale za to działa! I nie musisz się martwić, że jakiś błąd sprawi, że twój kod utknie w martwym punkcie.
Albo, mój ulubiony sposób, użycie AnimationTrackPlayer. Dajesz w animacji specjalny "event", który emituje signal dokładnie w momencie, w którym chcesz. Potem tylko podłączasz ten signal do funkcji, która ma się wykonać. Voilà! Czysto, schludnie i bez czekania! Ok, dobra, trochę czekania jest, ale to kontrolowane czekanie. Takie, które ty ustalasz. A to robi ogromną różnicę.
No i nie zapominajmy o starym, dobrym sposobie z _process() i sprawdzaniem stanu animacji. Może nie jest to najwydajniejsze rozwiązanie, ale jak masz małą grę i mało animacji, to spokojnie wystarczy. Poza tym, kto powiedział, że musimy zawsze pisać super-optymalny kod? Czasami warto pójść na skróty, żeby po prostu dopiąć projekt na czas.
Uważam, że za bardzo boimy się _process(). Tak, wiem, teoretycznie jest wolne. Ale ile razy realnie wpłynęło to na wydajność waszej gry? No właśnie!
Więc, tak, moim zdaniem czekanie na animacje w Godocie jest... przeceniane. Nie mówię, żeby całkowicie z tego zrezygnować, ale warto poszukać alternatyw. Zastanowić się, czy na pewno potrzebujemy czekać, czy może da się to zrobić inaczej. Bądźmy sprytniejsi od systemu! Bądźmy jak ten gość, który znajduje ukryte przejście w supermarkecie i omija całą kolejkę! Bądźmy... antykolejkowi! (Czy to w ogóle słowo?).
A wy co o tym sądzicie? Też macie taką niechęć do czekania w Godocie? Podzielcie się swoimi przemyśleniami! Może to ja jestem w błędzie, a wy mnie naprowadzicie na właściwą drogę.
