Вы можете использовать функцию BounceEasy
для анимации перевода y
. Посмотрите следующую демонстрацию.
void BounceText(string text, int x, int y)
{
var tb = new TextBlock
{
Text = text,
RenderTransform = new TranslateTransform(x, y)
};
RootCanvas.Children.Add(tb);
//--x animation 1
var xAnim = new DoubleAnimation(x, x + 40, new Duration(TimeSpan.FromSeconds(.6)));
Storyboard.SetTarget(xAnim, tb);
Storyboard.SetTargetProperty(xAnim, new PropertyPath("RenderTransform.X"));
//--x animation 2
var xAnim2 = new DoubleAnimation(x + 40, x + 80, new Duration(TimeSpan.FromSeconds(.6)))
{
BeginTime = TimeSpan.FromSeconds(0.6)
};
Storyboard.SetTarget(xAnim2, tb);
Storyboard.SetTargetProperty(xAnim2, new PropertyPath("RenderTransform.X"));
//--y animation
var yAnim = new DoubleAnimation(y, y - 40, new Duration(TimeSpan.FromSeconds(.3)))
{
AutoReverse = true,
EasingFunction = new BounceEase { EasingMode = EasingMode.EaseIn, Bounces = 0 },
RepeatBehavior = new RepeatBehavior(2)
};
Storyboard.SetTarget(yAnim, tb);
Storyboard.SetTargetProperty(yAnim, new PropertyPath("RenderTransform.Y"));
var sb = new Storyboard();
sb.Children.Add(xAnim);
sb.Children.Add(yAnim);
sb.Children.Add(xAnim2); //--add this to animate 2 times
sb.Begin();
}
Затем вы можете использовать его как:
BounceText("+2 XP", 80, 80);
Вы можете показать элементы, используя холст, например:
...
<Canvas x:Name="RootCanvas"/>
...