WinForms में सरल एनीमेशन

कल्पना करें कि आप WinForm पर कुछ ऑब्जेक्ट एनिमेट करना चाहते हैं। आप राज्य या मॉडल को अपडेट करने के लिए टाइमर सेट करते हैं, और फॉर्म की पेंट इवेंट ओवरराइड करते हैं। लेकिन वहां से, एनीमेशन के लिए फॉर्म को निरंतर पुन: पेश करने का सबसे अच्छा तरीका क्या है?

  • जैसे ही आप ड्राइंग कर रहे हैं फॉर्म को अमान्य करें?
  • एक दूसरा टाइमर सेट करें और नियमित अंतराल पर फ़ॉर्म को अमान्य करें?
  • शायद इस चीज़ के लिए एक आम पैटर्न है?
  • क्या मदद करने के लिए कोई उपयोगी .NET कक्षाएं हैं?

हर बार मुझे ऐसा करने की ज़रूरत है, मैं एक नई विधि के साथ एक नई विधि खोजता हूं। एसओ समुदाय से अनुभव और सिफारिशें क्या हैं?

0
ro fr bn

3 उत्तर

कुछ परिस्थितियों में, यह पेंट इवेंट का उपयोग न करने के लिए तेज़ और अधिक सुविधाजनक है, लेकिन ग्राफ़िक्स ऑब्जेक्ट को नियंत्रण/फ़ॉर्म से प्राप्त करना और "चालू" करना। यह अस्पष्टता/एंटी एलियासिंग/टेक्स्ट इत्यादि के साथ कुछ परेशानी दे सकता है, लेकिन पूरे शबांग को पेंट करने के मामले में परेशानी के लायक नहीं हो सकता है। लाइनों के साथ कुछ:

private void AnimationTimer_Tick(object sender, EventArgs args)
{
   //First paint background, like Clear(Control.Background), or by
   //painting an image you have previously buffered that was the background.
    animationControl.CreateGraphics().DrawImage(0, 0, animationImages[animationTick++])); 
}

मैं इसे कुछ नियंत्रणों में स्वयं उपयोग करता हूं, और पृष्ठभूमि को "स्पष्ट" करने के लिए छवियों को बफर किया है, जब ब्याज की वस्तु को हटाया जाता है या हटा दिया जाना चाहिए।

0
जोड़ा
मैं शर्त लगा सकता हूँ कि यह है! हालांकि इसका इस्तेमाल कभी नहीं किया।
जोड़ा लेखक Peteter, स्रोत
क्या यह बुफर्डग्राफिक्स कक्षा के साथ बेहतर नहीं है?
जोड़ा लेखक Ivan Ičin, स्रोत

आप जो कर रहे हैं वह एकमात्र समाधान है जिसे मैंने कभी भी WinForms (निरंतर पुनर्निर्मित करने वाला टाइमर) में उपयोग किया है। तकनीकों का एक समूह है जिसका उपयोग आप उपयोगकर्ता के अनुभव को आसान बनाने के लिए कर सकते हैं (जैसे डबल-बफरिंग)।

आप डब्ल्यूपीएफ को आज़मा सकते हैं। डब्ल्यूपीएफ में एनिमेशन करने के लिए अंतर्निहित सुविधाएं हैं, और टाइमर-आधारित समाधान की तुलना में वे बहुत चिकनी हैं (और कम कोड और आपके हिस्से पर सिंक्रनाइज़ेशन की आवश्यकता नहीं है)।

ध्यान दें कि उस समाधान के लिए आपको अपने पूरे ऐप में wpf का उपयोग करने की आवश्यकता नहीं है; इस कार्यक्षमता को एक wpf नियंत्रण में पैक करना और WinForms एप्लिकेशन (या उस मामले के लिए एक अप्रबंधित ऐप) में नियंत्रण एम्बेड करना संभव है:

http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx

0
जोड़ा

I've created a library that might help with this. It's called Transitions, and can be found here: http://code.google.com/p/dot-net-transitions/

यह वस्तुओं को एनिमेट करने के लिए पृष्ठभूमि थ्रेड पर चलने वाले टाइमर का उपयोग करता है। लाइब्रेरी ओपन-सोर्स है, इसलिए यदि यह आपके लिए कोई उपयोग है, तो आप यह देखने के लिए कोड देख सकते हैं कि यह क्या कर रहा है।

0
जोड़ा
बहुत बढ़िया पुस्तकालय, मुझे यह पसंद है। मुझे JQuery.UI की याद दिलाता है
जोड़ा लेखक Malfist, स्रोत
Nuget पर यह क्यों नहीं है!
जोड़ा लेखक The Muffin Man, स्रोत
बहुत बढ़िया पुस्तकालय। अच्छी तरह से किया और महान काम करता है।
जोड़ा लेखक Ryan Farley, स्रोत
अच्छा काम !! पसन्द आया।
जोड़ा लेखक Sujith H S, स्रोत