2015-04-20 33 views
7

W dokumentacji Apple tutaj Advanced Scene Processing opisuje on metodę update i sposób renderowania sceny, ale nie wspomina o przetwarzaniu danych wejściowych. Nie jest jasne, czy znajduje się w tym samym wątku, co pętla renderowania, czy też jest współbieżny z nią.W SpriteKit dotyka touchBegan działa w tym samym wątku, co metoda aktualizacji SKScene?

Jeśli mam obiekt, który zaktualizować zarówno z SKSceneupdate metody i sposobu touchesBegan (w tym przypadku SKSpriteNode) Czy mam się martwić o synchronizację dwóch dostępów do mojego obiektu?

+0

Nie jestem do końca pewien, ale mam 99% pewności, że będzie w głównym wątku, ponieważ zdarzenia dotykowe są odbierane przez pętlę głównego przebiegu. – NobodyNada

+0

Myślę, że możemy teraz osiągnąć 99,9%. Dzięki za komentarz - to było wystarczająco dobre do pracy. – rghome

Odpowiedz

3

Po kilku dniach bez odpowiedzi uruchomiłem kilka eksperymentów. Nawiasem mówiąc, testy te są przeprowadzane na symulatorze, a nie na rzeczywistym urządzeniu, ale myślę, że byłoby to takie samo.

Pierwszy test, ustawiam punkt przerwania w debugerze na touchesBegan i sprawdzam śledzenie stosu. Wygląda na to, że touchesBegan jest wywoływane z pierwszego wątku i z pętli main - to samo miejsce, co reszta logiki, więc dobrze wygląda to dla pojedynczego wątku.

Po drugie, przejąłem różne metody w scenie wspomnianej powyżej w odnośniku powyżej i dodałem instrukcje drukowania pokazujące nazwę każdej wywoływanej funkcji. Następnie dodałem instrukcję drukowania do metody touchesBegan.

Na uruchamiając aplikację, wyjście było:

update 
didEvaluateActions 
didSimulatePhysics 
didApplyConstraints 
didFinishUpdate 
touchesBegan in scene 
update 
didEvaluateActions 
didSimulatePhysics 
didApplyConstraints 
didFinishUpdate 
update 

i ten wzór został powtórzony, gdy kliknąłem.

Żadna ilość kliknięcie dał mi nic innego niż touchesBegan miano pomiędzy didFinishUpdate (to znaczy, że koniec jednego cyklu) i update (początek następnego).

Wniosek: dotknięcie przetwarzania odbywa się w głównej pętli przed wywołaniem metody aktualizacji. Dlatego nie jest konieczne synchronizowanie zasobów między tymi dwiema metodami.

+0

Dokument odnosi się do zamówienia -> https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKScene_Ref/index.html – noodles

+0

Tak, ale nie wspomina, gdzie są te akcenty przetworzone, co było moim pytaniem. – rghome