2013-10-31 19 views
7

Voglio disegnare una linea da diciamo A (100,50) a B (250,450) con Apples SpriteKit Framework.È possibile tracciare una linea con SpriteKit animato?

Finora sono in grado di disegnare questa linea utilizzando un SKShapeNode e impostare la proprietà del percorso.

Quello che voglio ottenere è disegnare questa linea animata. Diciamo che dovrebbero essere necessari 2 secondi per tracciare la linea dal punto A al punto B.

Ho esaminato la classe SKAction ma non sembra esserci alcun metodo che supporti questa funzionalità per impostazione predefinita.

Questo è il codice che uso per creare la linea:

CGMutablePathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path, NULL, 100, 50); 
CGPathAddLineToPoint(path, NULL, 250.0, 450.0); 

SKShapeNode *line = [SKShapeNode node]; 
line.path = path; 
[line setStrokeColor:[UIColor whiteColor]]; 
[self addChild:line]; 

Qualcuno mi può puntare nella giusta direzione?

+0

può ri-parola alla tua domanda? Generalmente le richieste di tipo "dammi il codice" non sono considerate una buona corrispondenza per SO. Forse approfondisci ciò che hai provato e ciò che non funziona. –

+2

Gente, è utile lasciare un commento per spiegare un voto ravvicinato, piuttosto che lasciare qualcuno perplesso. –

+2

Grazie Jasper per questo suggerimento. Comunque ora ho scritto una soluzione ben funzionante da solo. Ho creato una sottoclasse di SKShapeNode per costruire la linea con start e endpoint e poi ho aggiunto una SKAction personalizzata per fare il disegno animato. –

risposta

4

avete un paio di metodi con SKAction che potrebbe probabilmente ottenere quello che vuoi:

SKAction performSelector: onTarget:

e

SKAction waitForDuration:

Se sottoclasse uno SKShapeNode è possibile utilizzare questi due metodi in a SKAction sequence per tracciare la linea nel tempo.

Ovviamente è necessario calcolare manualmente la nuova posizione da disegnare per ciascuna iterazione e determinare se la linea è completata e terminare il disegno nel corso del tempo.

Sicuramente interessato se qualcuno ha un altro modo per ottenere questa funzionalità tramite SpriteKit, ma in caso contrario, dovrebbe funzionare.

Spiacente, non ho tempo di programmare questo, ma la logica dovrebbe portarti lì.

UPDATE:

ho pensato di un'altra opzione che personalmente credo sia un po 'più facile.

  1. Calcolare l'angolo tra il punto di origine e il punto finale.
  2. Calcolare la distanza dal punto di origine e dal punto finale.
  3. crea un nodo di forma di cerchio o un pixel pari. Pensala come il tuo punto di matita con cui disegnerai.
  4. ruotare il nodo di forma in modo che sia angolato verso il punto finale - utilizzando l'angolo calcolato.
  5. Creare una SKAction che ridimensiona la larghezza del nodo di forma in base alla distanza calcolata.
  6. eseguire SKAction.

Questo sembra relativamente facile, ma si poteva ancora creare una sottoclasse se si voleva renderlo più flessibile, come l'aggiunta di parametri di colore ecc

+0

Forse prova a usare due sprite. Uno il colore della tua linea e l'altro il colore dello sfondo. La scala in orizzontale. – TJA

Problemi correlati