Estoy tratando de hacer animaciones visibles secuenciales. Tengo una función de JavaScript, que llama myModel.move() dos veces. Tengo un GridView para mostrar myModel y tengo una animación de "Comportamiento en x", así puedo visualizar los movimientos. Pero, ambas animaciones de movimiento se ejecutan en paralelo (la pequeña demora entre ellas no se nota).QML: espere hasta que finalicen las animaciones
Mi idea era agregar un contador de cuántas animaciones se iniciaron y cuántas de ellas ya terminaron. Algo como esto;
Behavior on x {
NumberAnimation {
id: animationX;
duration: 500;
onRunningChanged: {
if (animationX.running) {
console.log("Animation start");
myModel.busy = myModel.busy + 1
} else {
console.log("Animation stop");
myModel.busy = myModel.busy - 1
}
}
}
}
Esto funciona como se esperaba. Luego, agrego un bucle a mi función javascript para esperar hasta que finalicen todas las animaciones.
ListModel {
id: myModel
property int busy: 0
function doSomething() {
myModel.move(...)
while (myModel.busy) {}
myModel.move(...)
}
}
Aquí está el problema. Puedo ver que después del primer movimiento() comenzaron todas las animaciones necesarias, pero no se puede ver nada y ninguna de las animaciones finalizó. Tengo algún tipo de punto muerto. ¿Cómo resolver esto?
Sí, lo sé ... preguntas simplificadas producen respuestas simplificadas :-(De hecho, quiero tener muchos myModel.move consecutiva diferente (...) llamadas. Sin embargo, su sugerencia es utilizable (ver el solución que publiqué a continuación). – meolic
Un bucle ocupado no es una buena idea si desea mantener el rendimiento. – trusktr
@trusktr y ¿a dónde ve? Digo que es una buena idea? – UmNyobe