标签:
《c# wpf 游戏笔记一 画布实例DispatcherTimer》
Rectangle rect; //创建一个方块作为演示对象
rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red); //设置画布canvas的背景设
rect.Width = 50;
rect.Height = 50;
rect.RadiusX = 5;
rect.RadiusY = 5;//图像的一个50*50象素 圆角5*5红色的方块对象
canvas1.Children.Add(rect);
Canvas.SetLeft(rect, 50);
Canvas.SetTop(rect, 50);
private void 窗体名_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
}
//鼠标点击事件
Point p = e.GetPosition(canvas1);
Storyboard storyboard = new Storyboard();//创建移动动画
//创建X轴方向动画
DoubleAnimation doubleAnimation = new DoubleAnimation(
Canvas.GetLeft(rect),
p.X, //p.X 为x坐标 p.Y 为Y坐标
new Duration(TimeSpan.FromMilliseconds(500))
);
Storyboard.SetTarget(doubleAnimation, rect);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Canvas.Left)"));//当为p.Y Canvas.Top 当为p.x Canvas.Left
storyboard.Children.Add(doubleAnimation);
//将动画动态加载进资源内
if (!Resources.Contains("rectAnimation")) {
Resources.Add("rectAnimation", storyboard);
}
//动画播放
storyboard.Begin();
《c# wpf 游戏笔记二 画布实例Storyboard》
double speed = 1; //设置移动速度
Point moveTo; //设置移动目标
CompositionTarget.Rendering += new EventHandler(Timer_Tick); 线程
private void Timer_Tick(object sender, EventArgs e) {
double rect_X = Canvas.GetLeft(rect);
double rect_Y = Canvas.GetTop(rect);
Canvas.SetLeft(rect, rect_X + (rect_X < moveTo.X ? speed : -speed));
Canvas.SetTop(rect, rect_Y + (rect_Y < moveTo.Y ? speed : -speed));
}
首先获取方块的X,Y位置,接下让方块的X,Y与moveTo的X,Y进行比较而判断是+speed还是-speed
《c# wpf 游戏笔记三 画布实例 CompositionTarget》
//定义线程
DispatcherTimer dispatcherTimer = new DispatcherTimer(DispatcherPriority.Normal);
dispatcherTimer.Tick += new EventHandler(Timer_Tick);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(50); //重复间隔
dispatcherTimer.Start(); 开始线程
第一句申明一个界面计时器DispatcherTimer ,并且设置其线程优先级别为Normal,这是标准设置,你可以根据你自己的需求进行更改,一共10个级别。
第二句注册Tick 事件,也就是计时器间隔触发的事件。
第三句设置Tick 事件的间隔,可以有很多方式,我使用的是TimeSpan.FromMilliseconds(),即间隔单位为毫秒。
第四句启动线程。
标签:
原文地址:http://www.cnblogs.com/namepass/p/5339260.html