技术开发 频道

开发Silverlight游戏教程(一)让物体动起来

    这里我创建了一个50*50象素,圆角5*5红色的方块对象,并且将它作为子控件添加进Carrier中,并且初始化它在Carrier中的位置: Canvas.SetLeft(rect, 0); Canvas.SetTop(rect, 0);

    对象准备好了,那么接下来就是实现动画了。我们要实现的是鼠标点哪它就移动到哪:

private void Carrier_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

//创建移动动画

Point p = e.GetPosition(Carrier);

Storyboard storyboard = new Storyboard();

//创建X轴方向动画

DoubleAnimation doubleAnimation = new DoubleAnimation(

Canvas.GetLeft(rect),

p.X,

new Duration(TimeSpan.FromMilliseconds(500))

);

Storyboard.SetTarget(doubleAnimation, rect);

Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));

storyboard.Children.Add(doubleAnimation);

//创建Y轴方向动画

doubleAnimation = new DoubleAnimation(

Canvas.GetTop(rect),

p.Y,

new Duration(TimeSpan.FromMilliseconds(500))

);

Storyboard.SetTarget(doubleAnimation, rect);

Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Top)"));

storyboard.Children.Add(doubleAnimation);

//将动画动态加载进资源内

if (!Resources.Contains("rectAnimation")) {

Resources.Add("rectAnimation", storyboard);

}

//动画播放

storyboard.Begin();

}

    从上面代码我们可以看到,首先获取鼠标点击点相对于Carrier中的坐标位置p,然后创建故事板storyboard和Double类型动画doubleAnimation,doubleAnimation有3个参数,分别代表开始值,结束值,动画经历时间,接着通过Storyboard.SetTarget()和Storyboard.SetTargetProperty()分别设置动画的目标及要修改的动画目标属性,再下来将doubleAnimation添加进storyboard中,这样重复两次分别实现X轴和Y轴方向的动画。当这些处理完后,最后还需要将storyboard添加进Resources资源内,这样程序才能识别(将它去掉也同样可以通过编译,后面章节中才会用到它,这里只是提前做个说明)。一切就绪后,通过代码storyboard.Begin()来开始动画。

0
相关文章