0

我想使用带有故事板 API 的 C# 动画开发动画。动画的目的是我有一个画布。在这个画布中,我将根据一些特定的逻辑在运行时放置不同的图像。但是与此同时,我不希望这个画布保持看起来枯燥乏味的 UI,所以我想做一些动画,只要游戏在运行,它就会一直播放。我可以这样做吗?

<Canvas x:Name="GameCanvas" Height="480" Width="480" Background="white" VerticalAlignment="Top" Loaded="GameCanvas_Loaded" >
            <Canvas.Resources>
                <Storyboard x:Name="myStoryboard">
            </Canvas.Resources>
            <Image x:Name="PreviewImage" Height="480" Width="480" Opacity="1" RenderTransformOrigin="0.2,0.5" >
                <Image.RenderTransform>
                    <TransformGroup>
                        <RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
                        <CompositeTransform x:Name="TransRotate" />
                    </TransformGroup>
                </Image.RenderTransform>
            </Image>
        </Canvas>

如果是的话,任何人都可以帮助我指导如何开始这样做。在画布内,我想放一些将永远执行的动画。例如,我可以放置一些彩色按钮,这个按钮将漂浮在画布中,从一个位置到另一个位置。

4

2 回答 2

1

您应该阅读有关动画的信息,我推荐http://www.microsoft.com/en-us/download/details.aspx?id=24519 。如果你想为某些东西制作动画:首先定义故事板,在对象的属性上添加动画(双重动画,使用关键帧的双重动画,对象动画,彩色动画等)然后添加关键帧并在代码中运行动画或使用触发器。

<Rectangle Fill="Azure" Height="50" Width="50" Name="Rect1">
    <Rectangle.Resources>
        <Storyboard x:Key="Animation" >
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Transform"
                                    Storyboard.TargetProperty="X"
                                    RepeatBehavior="Forever"
                                    AutoReverse="True"        >

                <LinearDoubleKeyFrame KeyTime="0:0:02" Value="100" />
                <LinearDoubleKeyFrame KeyTime="0:0:02" Value="0"   />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Transform"
                                    Storyboard.TargetProperty="Y"
                                    RepeatBehavior="Forever"
                                            AutoReverse="True">

                <LinearDoubleKeyFrame KeyTime="0:0:01" Value="100" />
                <LinearDoubleKeyFrame KeyTime="0:0:01" Value="0"   />
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Rectangle.Resources>
    <Rectangle.RenderTransform>
        <TranslateTransform x:Name="Transform"/>
    </Rectangle.RenderTransform>
</Rectangle>

//in code behind
(Rect1.Resources["Animation"] as Storyboard).Begin();

上面的代码将使一个矩形从起点缓慢移动到 100,然后再回到 0,依此类推,直到永远。

//更新 - 代码编辑

所以,如果我理解得很好,你想要一些漂浮的东西。只需动画 Y 和 X 属性,Y 比 X 快,您可以使用样条帧或缓动帧,并自定义此动画。

于 2013-10-30T08:58:48.963 回答
0

如果您使用 C++/CX 代码进行开发,您可以通过这种方式运行动画。

Storyboard^ rect = safe_cast<Storyboard^>(Rect1->Resources->Lookup("Animation"));
rect->Begin();
于 2015-04-16T19:53:06.273 回答