2012-09-06 4 views
9

Próbuję zrobić prostą grę w Windows Store w języku C# i XAML, w której poruszają się sześciokątne kafelki. To głównie pomoże mi w nauce C# i XAML, ponieważ nigdy wcześniej nie pracowałem z grafiką, a nawet z kodowaniem UI.Jak mogę zrobić wiele animacji w jednym scenorysie w C#/XAML?

Mam metodę, która może przenieść pojedynczy heks do współrzędnych celu, ale patrząc na to teraz, zdaję sobie sprawę, że nie jest możliwe wykonywanie wielu ruchów naraz, co jest absolutnie konieczne.

Czuję, że w moim podejściu musi być coś fundamentalnie, wiele obiektów poruszających się po jednym płótnie nie może być czymś niezwykłym, prawda? Zasadniczo pytam o to w nadziei, że ktoś wskaże, gdzie popełniłem błąd.

//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(); 

    } 

Odpowiedz

4

Scenorys może zawierać wiele animacji, a każda animacja może być kierowana na inny element interfejsu użytkownika. Oto przykład z ujęć, które „Impulsy” Kolory granicy trzech różnych kontroli:

<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> 

Twój kod wygląda dobrze - jesteś już animowanie wielu właściwości od slideTransform, a ponieważ cel animacji jest właściwością animacji, a nie scenorysu, nie ma powodu, dla którego nie można ponownie przesłać obiektu animX lub animY do zupełnie innego obiektu.

Powiązane problemy