Da un alto livello di comprensione ci sono due modi per farlo.
cattiva via (ma funziona meglio quando il fluido ha textures): Creare il foglio sprite in anticipo, poi sovrapporre un figlio in più dell'oggetto SKSpriteNode. Il fotogramma nello sprite di animazione sarà una funzione della distanza dalla palla alla superficie quando la distanza tra di essi è inferiore ad una certa quantità. L'intervallo di distanza desiderato (intervallo) dovrà essere mappato sul numero di fotogramma dello sprites (frameIndex). f (intervallo) = frameIndex. L'interpolazione lineare aiuterà qui. Altro su interpolazione più tardi.
IL MODO GIUSTO: rendere il fluido un oggetto curva, quindi animare i punti sulla curva con interpolazione lineare tra gli stati iniziale, intermedio e finale. Ciò richiederà tre curve ciascuna con lo stesso numero di punti. Lascia che lo stato del fluido iniziale sia F1. Il modello F1 indica il fluido statico. Lascia che lo stato fluido sia F2 quando la palla è a metà strada sommersa. Il modello F2 assomiglia alla palla sommersa alla sua larghezza massima. Lasciare che lo stato del fluido sia F3 quando la palla è immersa al 75%. Si noti che quando la palla è completamente immersa, il fluido appare invariato. Questo è il motivo per cui quando la palla viene sommersa al 75% ha la massima tensione superficiale che afferra la palla. Per quanto riguarda la SpriteKit va, è possibile utilizzare questi oggetti:
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddQuadCurveToPoint(path, NULL, 50, 100, 100, 0);
CGPathAddLineToPoint(path, NULL, 50, -100);
CGPathCloseSubpath(path);
SKShapeNode *shape = [[SKShapeNode alloc]init];
shape.path = path;
Poi rilevare quando la palla è sulla parte esterna del fluido utilizzando il prodotto vettoriale croce con vettori 3D, anche se il progetto è in 2D.
Ball Vector (Vb)
^
|
(V) O---> Closest Fluid Surface Vector (Vs)
V = Vb x Vs
Quindi guardare il componente Z di V chiamato Vz. Se (Vz < 0), la palla è al di fuori del fluido: Creare una variabile t:
t = distOfBall/radiusOfBall
Allora per ogni punto di ordinata nelle forme fluide effettuare le seguenti operazioni:
newFluidPointX = F1pointX*(t-1) + F2pointX*t
newFluidPointY = F1pointY*(t-1) + F2pointY*t
Se Vz> 0), la sfera si trova all'interno del fluido:
t = -(((distOfBall/radiusOfBall) + 0.5)^2) *4 + 1
newFluidPointX = F2pointX*(t-1) + F3pointX*t
newFluidPointY = F2pointY*(t-1) + F3pointY*t
Questo funziona perché qualsiasi due forme possono essere miscelati insieme mediante interpolazione. Il parametro "t" funge da percentuale per la fusione tra due forme.
È possibile creare combinazioni uniformi tra due forme qualsiasi, purché il numero di punti sia lo stesso. Ecco come un uomo si trasforma in un lupo nei film di Hollywood, o come un uomo può trasformarsi in una pozzanghera liquida. L'unico principio in gioco per questi effetti è l'interpolazione. L'interpolazione è uno strumento molto potente. Essa è definita come:
L = A*(t-1) + B*t
where t is in between 0.0 and 1.0
and A and B is what you are morphing from and to.
Per ulteriori dettagli su interpolazione veda: Wiki Article
Per ulteriori studi. Se stai pensando di animare qualsiasi forma dinamica, prenderei in considerazione la comprensione delle curve di Bezier. Pomax ha un articolo meraviglioso sull'argomento. Sebbene molti framework abbiano curve in loro, avere una comprensione generale di come funzionano ti permetterà di manipolarli estensivamente o di eseguire il rollover delle tue funzionalità laddove manca il framework. Il suo è l'articolo di Pomax:
A Primer on Curves
Buona fortuna per il vostro progresso :)
Sono poco chiaro da quale aspetto di "entrare in una sostanza densa" si sta cercando di catturare. La velocità dell'oggetto circolare? Il colore mentre incontra la "sostanza densa"? La tensione superficiale della sostanza più densa? Forse includo un disegno dell'effetto che stai cercando ... – Rob
@Rob Mi riferisco alla tensione superficiale della sostanza più spessa – NSologistic
È qualcosa che cerchi? http://pasteboard.co/1zoNKPiJ.png Ho due cerchi che puoi trascinare e connettere senza problemi. Creo una forma personalizzata tra due cerchi utilizzando un percorso di Bézier e una geometria. –