Il debug della fisica è una cosa. Probabilmente non è qualcosa a cui gli utenti iOS tendono a pensare molto, dato che in genere hanno fatto cose molto semplici con UIKit Dynamics. Questo è un peccato, in quanto è uno degli aspetti migliori delle recenti edizioni di iOS e offre un modo davvero divertente per rendere coinvolgenti le esperienze degli utenti.
Quindi ... come eseguire il debugging della fisica?
Un modo è immaginare mentalmente quello che sta succedendo, quindi correlarlo con quello che sta succedendo, e trovare la dissonanza tra l'immaginario e il reale, e quindi risolvere il problema tramite una miscela di processi di eliminazione, processo mentale o reale & errore e detrazione, fino a quando il problema non viene determinato e risolto.
Un altro è avere una rappresentazione visiva di tutto ciò che è stato creato e interagire presentando un feedback sufficiente a determinare più rapidamente la natura e l'estensione degli elementi, le loro relazioni e incidenti/eventi e risolvere i problemi con la vista letterale.
A tal fine, dal momento della loro introduzione sono stati creati vari debugger visivi e costruttori di simulazioni fisiche.
Sfortunatamente iOS non ha un editor basato su schermo o un "editor di scena" per UIKit Dynamics, e ciò che è disponibile per questo tipo di debugging visivo in Sprite Kit e Scene Kit è rudimentale, nel migliore dei casi.
Tuttavia ci sono CALayer, che sono presenti in tutte le Viste UIKit, in cui i CAShapeLayers possono essere creati e disegnati manualmente per rappresentare accuratamente tutti gli elementi fisici, i loro limiti e le loro ancore e relazioni.
CAShapeLayers è un "contenitore" per CGPath e può avere colori diversi per il contorno e il riempimento e più di un elemento CGPath all'interno di un singolo CAShapeLayer.
E, per citare il grande Rob:.
"Se si aggiunge un CAShapeLayer come strato a vista, non c'è bisogno di realizzare qualsiasi codice di disegno te Basta aggiungere il CAShapeLayer e Ad esempio, puoi anche cambiare il percorso, ad esempio, e lo lo ridisegnerà automaticamente per te. CAShapeLayer ti fa uscire dalle erbe infestanti di scrivendo le tue routine drawRect o drawLayer. "
Se si dispone di un enorme numero di elementi che interagiscono e si desidera eseguire il debug di loro, problemi di prestazioni di CAShapeLayer potrebbero entrare in gioco, a questo punto è possibile utilizzare shouldRasterize per convertire ciascuno per una bitmap, e ottenere un significativo miglioramento delle prestazioni quando colpire i limiti creati dalle capacità "dinamiche" di CAShapeLayers.
Inoltre, per rappresentare elementi quali vincoli e giunti, c'è un semplice processo di creazione di linee tratteggiate su CAShapeLayers, semplicemente impostando le proprietà. Ecco le basi della configurazione delle proprietà di un CAShapeLayer e il modo di utilizzare un array per creare un profilo tratteggiato 5-5-5 con un tratto di blocco, larghezza di 3, nessun riempimento.
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setBounds:self.bounds];
[shapeLayer setPosition:self.center];
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
[shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]];
[shapeLayer setLineWidth:3.0f];
[shapeLayer setLineJoin:kCALineJoinRound];
[shapeLayer setLineDashPattern:
[NSArray arrayWithObjects:[NSNumber numberWithInt:10],
[NSNumber numberWithInt:5],nil]];
Non un esperto di disegno, ma la documentazione suggerisce che il percorso dovrebbe essere un poligono.Il tuo codice aggiunge un arco ma non chiude il percorso. Forse dovresti chiamare '[maskPath closePath]' per creare un percorso chiuso che potrebbe fare la differenza? –
Si chiude automaticamente – WMios
Per il riempimento in 'drawRect' questo sarà il caso. Sei sicuro per il tuo 'collisionBoundingPath'? Dove dice nei documenti che chiude il percorso? –