11

我正在尝试用 C# 和 XAML 制作一个简单的 Windows Store 游戏,该游戏涉及移动的六边形图块。这主要是为了帮助我学习 C# 和 XAML,因为我以前从未使用过图形甚至 UI 编码。

我有一种方法可以将单个十六进制移动到目标坐标,但是现在看它我意识到不可能一次进行多个移动,这是绝对必要的。

我觉得在我的方法中必须有一些根本性的东西,多个物体在一个画布上移动不可能是一件不寻常的事情,不是吗?我主要是在问这个问题,希望有人能指出我哪里出错了。

    //moves the hex hexName to coordinates x, y, over a specified duration.
    public void slideHex(int x, int y, string hexName, Duration duration)
    {

        GameStoryboard.Stop();

        Polygon hex = GameCanvas.FindName(hexName) as Polygon;



        TranslateTransform slideTransform = new TranslateTransform();
        slideTransform.X = hex.RenderTransformOrigin.X;
        slideTransform.Y = hex.RenderTransformOrigin.Y;

        hex.RenderTransform = slideTransform;

        DoubleAnimation animX = new DoubleAnimation();
        DoubleAnimation animY = new DoubleAnimation();

        animX.Duration = duration;
        animY.Duration = duration;

        GameStoryboard.Duration = duration;
        GameStoryboard.Children.Add(animX);
        GameStoryboard.Children.Add(animY);

        Storyboard.SetTarget(animX, slideTransform);
        Storyboard.SetTarget(animY, slideTransform);

        Storyboard.SetTargetProperty(animX, "X");
        Storyboard.SetTargetProperty(animY, "Y");

        animX.To = x;
        animY.To = y;

        GameStoryboard.Begin();

    }
4

2 回答 2

9

一个故事板可以包含多个动画,每个动画可以针对不同的 UI 元素。这是一个故事板示例,它“脉冲”三个不同控件的边框颜色:

<Storyboard x:Name="pulseAnimation" AutoReverse="True">
    <ColorAnimation x:Name="animateLatitudeTextBoxBorderColour" Storyboard.TargetName="textBoxLatitude" From="{StaticResource PhoneTextBoxColor}" To="Green" Storyboard.TargetProperty="(TextBox.BorderBrush).(SolidColorBrush.Color)" Duration="0:0:0.4" />
    <ColorAnimation x:Name="animateLongitudeTextBoxBorderColour" Storyboard.TargetName="textBoxLongitude" From="{StaticResource PhoneTextBoxColor}" To="Green" Storyboard.TargetProperty="(TextBox.BorderBrush).(SolidColorBrush.Color)" Duration="0:0:0.4" />
    <ColorAnimation x:Name="animateHyperlinkTextColour" Storyboard.TargetName="hyperlinkButtonCurrentLocation" From="{StaticResource PhoneForegroundColor}" To="Green" Storyboard.TargetProperty="(HyperlinkButton.Foreground).(SolidColorBrush.Color)" Duration="0:0:0.4" />
</Storyboard>

您的代码看起来不错 - 您已经在为 的多个属性设置动画slideTransform,并且由于动画的目标是动画的属性而不是情节提要,因此没有理由不能重新定位animXanimY完全重新定位到不同的对象。

于 2012-09-07T05:08:33.820 回答
0

您可以创建多个故事板并同时执行它们,以便同时为多个对象设置动画。请参阅以下文章中的示例,该示例为待办事项列表中的多个项目设置动画:

http://www.codeproject.com/Articles/428088/A-Gesture-Driven-Windows-Phone-To-Do-List#swipe

于 2012-09-06T05:23:04.507 回答