Ho lavorato con l'esempio DemoBots e ho avuto molti problemi a farlo funzionare su tutti i dispositivi.Come ottenere SKAction (nome :) per funzionare in modo affidabile?
https://developer.apple.com/library/prerelease/ios/samplecode/DemoBots/Introduction/Intro.html
Il problema attuale che sto avendo è che su un Mini iPad i lanci di applicazione, ma si blocca durante il caricamento di animazioni. Si blocca in AnimationComponent.swift sulla riga che carica un'azione da un file:
let bodyAction: SKAction?
if let name = bodyActionName {
// crash here
bodyAction = SKAction(named: name)
}
else {
bodyAction = nil
}
Debug l'applicazione rivela che il suo tentativo di caricare uno SKAction chiamato "ZappedShake", ma si infrangono con una serie di eccezioni limiti.
Su un iPhone 5S funziona bene. La mia ipotesi migliore è la sua condizione di gara con il più veloce iPhone 5S sta caricando il file con l'azione serializzata in esso, e nel momento in cui l'esecuzione raggiunge questo punto l'azione è disponibile. Ma sul vecchio iPad single core il file non è ancora stato caricato e la chiamata fallisce.
Entrambi sono hardware reale con iOS9 13A4325c, compilato su XCode versione 7.0 beta 4 (7A165t).
rendendo il problema più difficile è che non riesco a vedere dove il file che, apparentemente, crea il "ZappedShake" - ReferenceActions.sks - è effettivamente caricato. Si riferisce a ReferenceScene.sks ma in nessuna parte del codice o in qualsiasi altra parte del progetto posso vedere che il file viene riferito.
Esiste una sorta di convenzione per il meccanismo di caricamento file magico per SKActions? Perché funziona su iPhone 5S e non su iPad?
UPDATE: Trovato più su questo qui: http://asciiwwdc.com/2015/sessions/604
Anche quest'anno ci siamo concentrati sul riferimento e istanze. Sappiamo che spende un sacco di tempo a progettare contenuti di alta qualità e animazioni per i vostri giochi e vogliamo che vi consentono di riutilizzare i contenuti che ovunque si desidera.
Vi permettiamo di creare file di dati serializzati per i vostri nodi e le vostre azioni e quindi aggiungerli come riferimento invece di caricarli nella scena.
In questo modo, ogni volta che si modifica l'asset sorgente che si riflette automaticamente nel contenuto del gioco.
Come si esegue questa operazione per i nodi? Per i nodi che disegno parte della mia scena, forse un elemento di sfondo, o alcuni paesaggi nel nostro editore con un Xcode e quindi posso solo trascinare e rilasciare i file nella mia scena principale in Xcode e creerà automaticamente un riferimento ed è è tutto pronto per te.
Se si vuole fare questo in codice è possibile pure, è possibile costruire manualmente uno SKReferenceNode, assegnargli un nome di file o anche un URL e quando questo contenuto è presentata nel vostro gioco ci carichiamo in che il contenuto basato sulla più recente versione del file che è nel vostro pacchetto. Possiamo anche fare la stessa cosa per le azioni. Con le azioni vanno approfittare della nostra nuova grande editore azione e al di là di creare e comporre le azioni in Xcode si può dare tutti i loro nomi.
Questi nomi sono la chiave per utilizzarli nel gioco.Abbiamo aggiunto un selettore a SKAction chiamato actionNamed. Funziona esattamente come per SKTexture e textureNamed.
Si passa al nome dell'azione desiderata. Guarderemo automaticamente all'interno del pacchetto di app in tutti i file di azione serializzati, troveremo quello con il nome appropriato e lo evidenzieremo per l'applicazione.
Questo sembra ottimo ma non riesco a trovare alcuna documentazione su di esso, o capire come eseguire il debug quando va male.