2011-03-24 59 views
2

这里是一个动画链接:http://www.microdivision.com/blog/Strange-Silverlight-Behavior为什么动画中的球在改变位置时会被切断?

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" 
    x:Class="BouncingBall.MainPage" 
    Width="640" Height="480"> 
    <UserControl.Resources> 
     <Storyboard x:Name="Bounce" RepeatBehavior="Forever" AutoReverse="True"> 
      <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="Ball"> 
       <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
       <SplineDoubleKeyFrame KeyTime="0:0:1" Value="-144" KeySpline="0,1,1,1"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
    </UserControl.Resources> 

    <i:Interaction.Triggers> 
     <i:EventTrigger> 
      <ei:ControlStoryboardAction Storyboard="{StaticResource Bounce}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 

    <Canvas x:Name="LayoutRoot" Background="#FFCADFFF"> 
     <Ellipse x:Name="Ball" Stroke="Black" Width="100" Height="100" Fill="#FFF31D1D" Canvas.Top="190" Canvas.Left="0"> 
      <Ellipse.RenderTransform> 
       <CompositeTransform/> 
      </Ellipse.RenderTransform> 
     </Ellipse> 
    </Canvas> 

</UserControl> 
+0

它看起来完美的我。你遇到什么浏览器? – tster 2011-03-24 17:52:44

+0

我尝试了不同的浏览器,如IE8,Chrome 10,Firefox。我还要求另一个人从他的电脑看这个页面,他也注意到了这一点。当球上下移动时,它会在顶部和底部看起来扁平。 – 2011-03-24 17:56:26

+0

有趣的是,当我制作一个打印屏幕时,它会显示一个完整的球,也许它与屏幕刷新有关? – 2011-03-24 17:58:29

回答

0

我想这可能是Silverlight是如何在播放过程中调整的结果。尽管事实上我拥有一台几乎不具备良好CPU/GPU的旧机器,但在我的机器上,球体似乎未被切割大部分时间为。 Silverlight只使用CPU进行渲染(除了3D透视操作被告知时),其基于时间的动画允许它剪切帧以适应主机客户端。它以结果而闻名。 Silverlight 5承诺GPU支持。

你使用样条曲线创建反弹的原因是什么?

<Storyboard x:Name="Bounce" RepeatBehavior="Forever" AutoReverse="True"> 
      <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="Ball"> 
       <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
       <EasingDoubleKeyFrame KeyTime="0:0:1" Value="-144"> 
        <EasingDoubleKeyFrame.EasingFunction> 
         <BounceEase EasingMode="EaseIn" Bounciness="0" Bounces="1"/> 
        </EasingDoubleKeyFrame.EasingFunction> 
       </EasingDoubleKeyFrame> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 
+0

没有特别的原因,样条动画实际上更复杂,我简化了它的故障排除。即使当我改变它使用内置反弹缓解我仍然看到一个大的扁球。奇怪的 – 2011-03-24 18:43:51

+0

,但奇怪的是,silverlight可以处理更复杂的动画,然后单球弹跳,你会认为这个简单的动画已经超载CPU? – 2011-03-24 18:52:13

+0

我不这么认为,但是因为所有东西都在Silverlight中的UI线程中,并且浏览器分享了它,所以它可能是每个浏览器引擎中发生不同的问题。我不知道Silverlight如何在内部进行渲染判断。它在FF,Chrome,IE,Safari中显示相同的结果吗? – 2011-03-24 19:03:54

相关问题