मैं दिखाई एनिमेशन अनुक्रमिक बनाने की कोशिश कर रहा हूँ। मेरे पास जावास्क्रिप्ट फ़ंक्शन है, जो myModel.move() को दो बार कॉल करता है। मेरे पास MyModel दिखाने के लिए एक ग्रिड व्यू है और मेरे पास "एक्स पर व्यवहार" एनीमेशन है, इस प्रकार मैं दृश्यों को देख सकता हूं। लेकिन, दोनों आंदोलन एनिमेटन paralell में चलाता है (उनके बीच छोटी देरी ध्यान देने योग्य नहीं है)।QML: जब तक प्रतीक्षा करें एनिमेशन समाप्त
मेरा विचार है कि कितने एनिमेशन शुरू किया गया था के एक काउंटर जोड़ने के लिए था और उनमें से कितने पहले से ही समाप्त हो गया। कुछ इस तरह;
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
}
}
}
}
यह अपेक्षा के अनुसार काम करता है। फिर, जब तक सभी एनिमेशन समाप्त नहीं हो जाते, तब तक मैं अपने जावास्क्रिप्ट फ़ंक्शन में एक लूप जोड़ता हूं।
ListModel {
id: myModel
property int busy: 0
function doSomething() {
myModel.move(...)
while (myModel.busy) {}
myModel.move(...)
}
}
यहां समस्या है। मैं देख सकता हूं कि पहले कदम() के बाद सभी आवश्यक एनिमेशन शुरू हो गए, लेकिन कुछ भी नहीं देखा जा सकता और कोई भी एनीमेशन समाप्त नहीं हुआ। मेरे पास कुछ प्रकार का डेडलॉक है। इसे कैसे हल करें?
हाँ, मुझे पता है ... सरलीकृत सवाल सरलीकृत जवाब उत्पादन :-(वास्तव में, मैं कई लगातार विभिन्न myModel.move (...) के लिए (चाहते हैं कॉल। हालांकि, अपने सुझाव प्रयोग करने योग्य है देखना समाधान मैं नीचे पोस्ट)। – meolic
एक व्यस्त पाश एक अच्छा विचार है अगर आप प्रदर्शन बनाए रखना चाहते हैं नहीं है। – trusktr
@trusktr और जहाँ आप देखते हैं मैं कहना है कि यह एक अच्छा विचार है? – UmNyobe