2013-09-26 9 views
8

Uso un sacco di funzionalità CCEase* in Cocos2D descritto here. iOS 7 Sprite Kit ha anche SKActionTimingMode. Tuttavia solo le modalità semplici. Come posso ottenere effetti simili a CCEaseElasticIn o CCEaseBounceIn utilizzando Kit Sprite?Come applicare diversi effetti di andamento all'azione dello sprite?

+0

immagino Apple vuole che noi usiamo customActionWith ... per casi come questi. – LearnCocos2D

+0

Hai qualche idea su come farlo accadere con 'customActionWith'? – Pablo

+1

solo concettualmente, l'idea generale è quella di utilizzare il tempo trascorso e la durata e di alimentare entrambi in un'azione di andamento per determinare quanto la proprietà desiderata (cioè la posizione) dovrebbe cambiare in ogni dato tempo trascorso. Ad esempio, la funzione di andamento che è possibile adattare da cocos2d. – LearnCocos2D

risposta

33

Il kit Sprite ha lasciato l'andamento (o il tweening) intenzionalmente limitato con l'aspettativa che lo sviluppatore avrebbe preso il controllo delle specifiche del movimento degli sprite. In sostanza, ciò che devi fare è creare un'azione personalizzata e applicare una curva di andamento al parametro prima di modificare la proprietà (rotazione, posizione, scala, ecc.) Dello sprite. Ecco un esempio.

CGFloat initialScale = mySprite.xScale; 
SKAction *scaleAction = [SKAction customActionWithDuration:duration actionBlock:^(SKNode *node, CGFloat elapsedTime) { 
    CGFloat t = elapsedTime/duration; 
    CGFloat p = t*t; 
    CGFloat s = initialScale*(1-p) + scale * p; 
    [node setScale:s]; 
}]; 
[mySprite runAction:scaleAction]; 

La parte di questo che determina l'allentamento è p = t*t. Così, p è una funzione di t tale che:

  • quando t è 0, p è 0
  • quando t è 1, p è 1

Ciò significa che si inizierà a inizio e fine alla fine, ma la forma della curva in mezzo determinerà come ci si arriva. Le funzioni di alleggerimento possono essere semplici, come quella mostrata qui, che è fondamentalmente una facilità, o piuttosto complessa come l'elastico o il rimbalzo. Per generare il proprio, provate questo: http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm Oppure prendere uno sguardo più dettagliato alle equazioni di Robert Penner: http://www.robertpenner.com/easing/

+0

Ottima risposta e grazie per i collegamenti! Voto positivo e accettato! – Pablo

+0

un altro buon collegamento per l'implementazione matematica dei diversi tipi di funzione di andamento è disponibile all'indirizzo: https://github.com/warrenm/AHEasing – vim

+0

Come applicheremmo a 'SKAction followPath'? – Jonny

2

Per allentamento arbitraria, risposta Kardasis' dice tutto.

Se stai cercando un modo semplice per aggiungere un effetto di rimbalzo alle animazioni, che è coerente con il modo in cui le cose sono fatte in UIKit, ho qualcosa per te.

Apple ha introdotto le animazioni primaverili in UIKit un paio di anni fa, consentendo di impostare uno smorzamento della molla e una velocità iniziale durante l'esecuzione di un'animazione UIView. Sfortunatamente non lo hanno implementato in SpriteKit, quindi ho creato la mia libreria che fa proprio questo.

È una serie di estensioni su SKAction che replicano la maggior parte dei metodi di fabbrica, aggiungendo i parametri di smorzamento e velocità.

Il codice è su GitHub, si sentono liberi di usarlo: https://github.com/ataugeron/SpriteKit-Spring

Problemi correlati