2015-04-20 22 views
7

Nella documentazione Apple Advanced Scene Processing descrive il metodo update e come viene rappresentata una scena, ma non menziona quando viene elaborato l'input. Non è chiaro se si trova nello stesso thread del ciclo di rendering o se è in concomitanza con esso.In SpriteKit toccaBegan eseguito nello stesso thread del metodo di aggiornamento di SKScene?

Se ho un oggetto che aggiorno sia dal metodo di SKSceneupdate e il metodo touchesBegan (in questo caso di un SKSpriteNode) devo preoccupare di sincronizzare i due accessi al mio oggetto?

+0

Non sono completamente sicuro, ma sono sicuro al 99% che sarà nel thread principale poiché gli eventi di tocco vengono ricevuti dal ciclo di esecuzione principale. – NobodyNada

+0

Penso che possiamo farlo al 99,9% ora. Grazie per il commento - è stato abbastanza buono per lavorare con. – rghome

risposta

3

Quindi dopo alcuni giorni senza risposta ho impostato alcuni esperimenti. A proposito, questi test sono eseguiti sul simulatore e non su un dispositivo reale, ma penso che sarebbe lo stesso.

Primo test, ho impostato un punto di interruzione nel debugger su touchesBegan e ho esaminato la traccia dello stack. Sembra che touchesBegan sia chiamato dal primo thread e dal ciclo main, lo stesso posto del resto della logica, quindi questo sembra buono per un approccio con thread singolo.

Secondo test, ho annullato i vari metodi nella scena menzionata nel collegamento Elaborazione scena avanzata in alto e ho aggiunto istruzioni di stampa per mostrare il nome di ogni funzione chiamata. Quindi ho aggiunto una dichiarazione di stampa al metodo touchesBegan.

Sul esecuzione l'applicazione, l'uscita è stata:

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

e questo modello è stato ripetuto ogni volta che ho cliccato.

Nessuna quantità di click mi ha dato altro che touchesBegan essere chiamato tra l'didFinishUpdate (vale a dire, la fine di un ciclo) e il update (l'inizio del prossimo).

Conclusione: l'elaborazione dei tocchi avviene nel ciclo principale prima che venga richiamato il metodo di aggiornamento. Non è quindi necessario sincronizzare le risorse tra i due metodi.

+0

Il documento si riferisce all'ordine -> https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKScene_Ref/index.html – noodles

+0

Sì, ma non menziona dove sono i tocchi elaborato, che era la mia domanda. – rghome