चिकनी नहीं जब हर एक विशेष दिशा में एक अंतरिक्ष यान चलती, उदाहरण के लिए (DoubleAnimation या स्टोरीबोर्ड है, जो तेजी से paced खेल के लिए उपयुक्त उदाहरण नहीं है की तरह कुछ का उपयोग कर की तुलना में) वस्तुओं समय/सिल्वरलाइट में आधारित फ्रेम चेतन की कोशिश कर रहा फ्रेम, आंदोलन अजीब है और वास्तव में चिकनी नहीं है। स्क्रीन भी फाड़ने लगती है।सिल्वरलाइट एनीमेशन
वहाँ CompositionTarget और DistpatcherTimer बीच कोई अंतर नहीं हो रहा है।
Register Handler to Tick-Event of a DispatcherTimer
In each Tick:
Compute the elapsed time from the last frame in milliseconds
Object.X += movementSpeed * ellapsedMilliseconds
यह एक निर्बाध आवाजाही में, सही परिणाम चाहिए: मैं निम्नलिखित दृष्टिकोण (स्यूडोकोड में) का उपयोग करें? लेकिन ऐसा नहीं है। यहां एक उदाहरण है (नियंत्रण: WASD और माउस): Silverlight Game। हालांकि मेरे द्वारा वर्णित प्रभाव इस नमूने में बहुत प्रचलित नहीं है, मैं आपको आश्वस्त कर सकता हूं कि एक कैनवास पर एक आयत को भी ले जाने से एक अजीब एनीमेशन उत्पन्न होता है।
किसी एक विचार है कि यह कैसे कम करने के लिए है। क्या स्टोरीबोर्ड/डबलएनीमेशन का उपयोग करके फ्रेम आधारित एनीमेशन से बाहर निकलने के लिए अन्य दृष्टिकोण हैं जो इसे हल कर सकते हैं?
संपादित करें: यहाँ एक त्वरित और गंदी दृष्टिकोण, न्यूनतम कोड के साथ एक आयत एनिमेट (नियंत्रण: ए और डी) Animation Sample
Xaml:
<Grid x:Name="LayoutRoot" Background="Black">
<Canvas Width="1000" Height="400" Background="Blue">
<Rectangle x:Name="rect" Width="48" Height="48"
Fill="White"
Canvas.Top="200"
Canvas.Left="0"/>
</Canvas>
</Grid>
सी #:
private bool isLeft = false;
private bool isRight = false;
private DispatcherTimer timer = new DispatcherTimer();
private double lastUpdate;
public Page()
{
InitializeComponent();
timer.Interval = TimeSpan.FromMilliseconds(1);
timer.Tick += OnTick;
lastUpdate = Environment.TickCount;
timer.Start();
}
private void OnTick(object sender, EventArgs e)
{
double diff = Environment.TickCount - lastUpdate;
double x = Canvas.GetLeft(rect);
if (isRight)
x += 1 * diff;
else if (isLeft)
x -= 1 * diff;
Canvas.SetLeft(rect, x);
lastUpdate = Environment.TickCount;
}
private void UserControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.D)
isRight = true;
if (e.Key == Key.A)
isLeft = true;
}
private void UserControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.D)
isRight = false;
if (e.Key == Key.A)
isLeft = false;
}
धन्यवाद ! कपड़े
+1 मैं हकलाना की वजह से आराम करने के लिए सिल्वरलाइट 3 में खेल बनाने, फाड़ और झिलमिलाते ... आश्चर्य है अगर वे 4 में इस हल या यदि यह अभी भी चिकनी एनीमेशन के लिए पावरपोइंट के रूप में के रूप में बेकार है पर किसी भी प्रयास डाल? एएमओएस के साथ मेरा 20 साल पुराना अमिगा इस विभाग में एक बेहतर कलाकार और आसान विकास मंच है;) –
मैंने हाल ही में एक समान प्रश्न पूछा। मैंने सोचा कि मेरे हार्डवेयर के साथ कुछ करना है: मैकबुक ड्यूल-बूट (बूट कैंप), हालांकि मेरे पास हर दूसरे विंडोज पीसी में एक ही समस्या थी। ध्यान दें कि मैंने जिस जवाब को सही तरीके से चिह्नित किया है वह वास्तव में इस मुद्दे को हल नहीं करता है ... मैंने एक साधारण आयत को घुमाने वाले स्टोरीबोर्ड के लिए भी समस्या देखी। मुझे आशा है कि यह जल्द ही तय हो जाएगा। http://stackoverflow.com/questions/5319562/silverlight-fast-moving-bitmap-does-not-update-smoothly –