Search code examples
silverlightxamlmicrosoft-metrowindows-store-appsexpression-blend

Expression blend Animating multiple objects


i am trying to create an animation in Expression blend for a Windows Store App. I want the animation to represent rainfall. The animations consists of 2 pictures and im trying to have 3 scenarions.

1) Lite rainfall: animate with a cloud and 1 drop as in picture 1. This works fine

2) Medium rainfall: Here i want to use the same cloud but add 1 more drop 3) Heavy rain: here i want to use the same cloud but add a third drop

My problem is when i trye to create the two last scenarios it effects the first 1 and the new objects will also show on the first 1. So i cannot have these 3 scenarios at the same storyboard it seems like. Is there anyway i can split the storyboard up to multiple layers, so i can hide some of the objects when ever i want? From the msdn website i found i article saying i can create layers by clicking tools => create new layer.

However i dont have that option in my expression blend, and im using the last version.

enter image description here

enter image description here

Animation 1

Lite rain animation

Animation 2

ssssssse

Animation 3

enter image description here


Solution

  • I would create three separate storyboards, one for each scenario. This would allow you more control over when to do what.

    In each Storyboard you can then handle and animate your objects after your need. You can then use different easings to achieve different speeds of the falling raindrops.

    I've created a solution in Expression Blend demonstrating this for you and placed it on my Skydrive: http://sdrv.ms/12IbxrR and there's a blogpost covering how it's done here.

    Example code with each button stopping and starting the right animation.

    <Page
        x:Class="App1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App1"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
        <Page.Resources>
            <Storyboard
                x:Name="MediumRainAnimation"
                RepeatBehavior="Forever">
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.7"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.7"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.7"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.3"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard
                x:Name="StrongRainAnimation"
                RepeatBehavior="Forever">
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.42"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.42"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.42"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.6"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.18"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard
                x:Name="SlowRainAnimation"
                RepeatBehavior="Forever">
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.19"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.19"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.Opacity)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.19"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CircleEase
                                EasingMode="EaseIn" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="1" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:1.7"
                        Value="200">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <CubicEase
                                EasingMode="EaseInOut" />
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path1">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                    Storyboard.TargetName="path2">
                    <EasingDoubleKeyFrame
                        KeyTime="0"
                        Value="0" />
                    <EasingDoubleKeyFrame
                        KeyTime="0:0:0.51"
                        Value="0" />
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Page.Resources>
        <Grid
            Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Path
                x:Name="path"
                Data="F1M35.116,42.866C35.116,52.426 27.367,60.174 17.808,60.174 8.249,60.174 0.5,52.426 0.5,42.866 0.5,33.307 17.808,1.058 17.808,1.058 17.808,1.058 35.116,33.307 35.116,42.866"
                Fill="#FF93B6F1"
                Height="60.673"
                Width="35.616"
                UseLayoutRounding="False"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Margin="0,0,100,0"
                RenderTransformOrigin="0.5,0.5">
                <Path.RenderTransform>
                    <CompositeTransform />
                </Path.RenderTransform>
            </Path>
            <Path
                x:Name="path1"
                Data="F1M35.116,42.866C35.116,52.426 27.367,60.174 17.808,60.174 8.249,60.174 0.5,52.426 0.5,42.866 0.5,33.307 17.808,1.058 17.808,1.058 17.808,1.058 35.116,33.307 35.116,42.866"
                Fill="#FF93B6F1"
                Height="60.673"
                Width="35.616"
                UseLayoutRounding="False"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                RenderTransformOrigin="0.5,0.5">
                <Path.RenderTransform>
                    <CompositeTransform />
                </Path.RenderTransform>
            </Path>
            <Path
                x:Name="path2"
                Data="F1M35.116,42.866C35.116,52.426 27.367,60.174 17.808,60.174 8.249,60.174 0.5,52.426 0.5,42.866 0.5,33.307 17.808,1.058 17.808,1.058 17.808,1.058 35.116,33.307 35.116,42.866"
                Fill="#FF93B6F1"
                Height="60.673"
                Width="35.616"
                UseLayoutRounding="False"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Margin="0,0,-100,0"
                RenderTransformOrigin="0.5,0.5">
                <Path.RenderTransform>
                    <CompositeTransform />
                </Path.RenderTransform>
            </Path>
            <Path
                Data="F1M207.885,33.885C202.225,33.885 196.732,34.596 191.485,35.924 184.27,15.299 164.651,0.5 141.564,0.5 117.399,0.5 97.034,16.714 90.718,38.852 82.291,34.586 72.771,32.167 62.679,32.167 28.339,32.167 0.5,60.006 0.5,94.346 0.5,128.687 28.339,156.526 62.679,156.526 72.489,156.526 81.764,154.246 90.015,150.2 94.9,169.883 112.678,184.474 133.872,184.474 151.986,184.474 167.603,173.812 174.811,158.426 184.56,164.01 195.844,167.218 207.885,167.218 244.704,167.218 274.552,137.37 274.552,100.552 274.552,63.733 244.704,33.885 207.885,33.885"
                Fill="White"
                Height="184.974"
                Width="275.052"
                UseLayoutRounding="False"
                HorizontalAlignment="Center"
                VerticalAlignment="Center" />
            <StackPanel>
                <Button
                    Tapped="Button_Tapped">Play slow rain</Button>
                <Button
                    Tapped="Button_Tapped_1">Play Medium rain</Button>
                <Button
                    Tapped="Button_Tapped_2">Play Strong rain</Button>
            </StackPanel>
        </Grid>
    </Page>