Voglio animare 2 cubi per sempre, finché l'utente non ne tocca uno. L'animazione dovrebbe essere come un ∞.Animate SCNNode per sempre - SceneKit, Swift
Questi sono i miei cubi in sceneView voglio animare:
che sto cercando di farlo con le animazioni nidificate e lo fa in parte funziona. Ora, dal momento che le animazioni aspettano sempre che siano terminate prima di iniziarne una nuova, non sembra affatto liscia.
Prima di continuare a sviluppare l'animazione I vorrei sapere se c'è un modo migliore (e in effetti funzionante). Questo è il mio codice corrente:
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position = SCNVector3Make(3, 0, 0)
cube2.position = SCNVector3Make(-3, 0, 0)
println("log 0")
SCNTransaction.setCompletionBlock {
println("log 1")
while (animationKey != 1) {
//initially animationKey = 0
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position.x += 1
cube1.position.y += 1
cube2.position.x += 1
cube2.position.y += 1
println("log 2")
SCNTransaction.setCompletionBlock {
SCNTransaction.begin()
SCNTransaction.setAnimationDuration(2)
cube1.position.x -= 1
cube1.position.y -= 1
cube2.position.x -= 1
cube2.position.y -= 1
println("log 3")
SCNTransaction.setCompletionBlock { animationKey = 1 }
SCNTransaction.commit()
}
println("log 4")
SCNTransaction.commit()
}
}
println("log 5")
SCNTransaction.commit()
println("log 6")
}
L'output mostra le seguenti cose: log 0, log 5, log 6, log 1, log 2, log 4, log 2
... e poi appena prosegue con log 4
e log 2
alternata.
Qualcuno può aiutarmi?
Nota
ho pensato che un approccio ricorsiva sarebbe meglio, pertanto sostituito
animationKey = 1
con la chiamata al metodo è in ... non funziona più a tutti.ho avuto le animazioni di lavorare una volta ma ora è ferma solo dopo aver terminato la prima animazione e totalmente ignora il 2 ° e 3 ° blocco di animazione ...
Ok, questo è già ottimo. C'è un modo per assegnare opzioni alla SCNAction? Ad esempio, come ad esempio "CurveEaseIn". La cosa è che voglio che sia liscia, ma in questo momento finisce semplicemente l'animazione e inizia il successivo dopo ...:/ – LinusGeffarth
action.timingMode = SCNActionTimingModeEaseInEaseOut; –
Fantastico, grazie :) – LinusGeffarth