2015-08-27 46 views
5

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.

risposta

0

Il gioco DemoBots sembra funzionare in modo affidabile quando compilato con Xcode versione 7.0 beta 6 (7A192o).

Utilizzando una macchina diversa (il mio laptop domestico) con una nuova installazione di Xcode, il problema scompare. Ho anche notato che la prima volta che ho provato ci sono state alcune piccole correzioni di compilazione che ho dovuto fare come rinominare CGPoint.zero a CGPoint.zeroPoint che presumibilmente avrebbe dovuto suonare campane di avviso che c'era una sorta di conflitto di versione. Questa volta con la nuova installazione è stato compilato e finito fuori dalla scatola.

Non riesco ancora a capire come vengono raccolte le azioni di riferimento, ma almeno ora ho più versioni funzionanti di Demobot, quindi posso semplicemente duplicare il codice funzionante lì.

1

Non sei tu, è iOS. C'è un bug con riferimenti d'azione riguardanti dispositivi a 32 bit

Questo problema è stato risolto in iOS 9.2 Beta 1, secondo questo thread sul forum dello sviluppatore di Apple (come la Mini iPad.): https://forums.developer.apple.com/thread/17267

Try in esecuzione su un dispositivo a 64 bit più recente (come iPhone 6) nel simulatore. Oppure prova ad aggiornare il tuo iPad Mini a iOS 9.2 Beta 1. O semplicemente aspetta la prossima versione iOS per risolvere il problema.

Problemi correlati