silverlight动画设计-飞船打子弹动画设计.ppt_第1页
silverlight动画设计-飞船打子弹动画设计.ppt_第2页
silverlight动画设计-飞船打子弹动画设计.ppt_第3页
silverlight动画设计-飞船打子弹动画设计.ppt_第4页
silverlight动画设计-飞船打子弹动画设计.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象的动画设计 基础练习:得到位置 n得到目标位置 nship1.GetValue(Canvas.LeftProperty) nship1.GetValue(Canvas.TopProperty) n得到的是目标左上角距离左边和定边的距 离 基础练习:设置位置 n ship1.SetValue(Canvas.LeftProperty, shipLocation.X); nship1.SetValue(Canvas.TopProperty, shipLocation.Y); n把目标左上角设置到指定位置 帧呈现事件 n private void myRender(object sender, EventArgs e) n n nCompositionTarget.Rendering += myRender; n一个动画有很多帧组成,在每帧中都可以执行判断或操作 新建项目MyGame n新建文件夹UserControls n把矢量图转换成的xaml文件拷贝入文件夹 UserControls n把xaml文件修改正确的namespace,再包 含到项目中(这两步不能反了,因为只要包 含到项目中就会生成cs文件) n如下格式 在页面放入飞船和按钮 n n n n 定义公用变量 n private Point shipLocation = new Point(0, 0); n private Point shipSpeed = new Point(4,4); n表示飞船的位置和速度 n因为速度有x和y坐标的速度,所以使用点对象表示比较方 便,其含义并不是一个点。 n位置坐标是左上角的点位置 添加一个键盘控制事件 n private void myKeyDown(object sender, KeyEventArgs e) n n switch (e.Key) n n case Key.Left: n break; n case Key.Right: n break; n case Key.Up: n break; n case Key.Down: n break; n case Key.Space: n break; n default: n break; n 完善代码 n switch (e.Key) n n case Key.Left: n shipLocation.X -= shipSpeed.X;/减小距离左边界的距离 n break; n case Key.Right: n shipLocation.X += shipSpeed.X;/ n break; n case Key.Up: n shipLocation.Y -= shipSpeed.Y;/ n break; n case Key.Down: n shipLocation.Y += shipSpeed.Y;/增大距离上边界距离 n break; n case Key.Space: n break; n default: n break; n 在按钮单击代码 n button1.Visibility = Visibility.Collapsed; n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty); n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty); n CompositionTarget.Rendering += myRender; n this.KeyDown += new KeyEventHandler(myKeyDown); n红色为自定义的键盘按下事件 加上帧呈现事件 n private void myRender(object sender, EventArgs e) n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X); n ship1.SetValue(Canvas.TopProperty, shipLocation.Y); n 程序测试,通过按键控制飞船方向 n private Point shipLocation = new Point(0, 0); n private Point shipSpeed = new Point(4,4); n private void myKeyDown(object sender, KeyEventArgs e) n n switch (e.Key) n n case Key.Left: n shipLocation.X -= shipSpeed.X; n break; n case Key.Right: n shipLocation.X += shipSpeed.X; n break; n case Key.Up: n shipLocation.Y -= shipSpeed.Y; n break; n case Key.Down: n shipLocation.Y += shipSpeed.Y; n break; n case Key.Space: n default: n break; n n n private void button1_Click(object sender, RoutedEventArgs e) n n button1.Visibility = Visibility.Collapsed; n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty); n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty); n CompositionTarget.Rendering += myRender; n this.KeyDown += new KeyEventHandler(myKeyDown); n 产生一个向上飞的子弹 n引用using LuoYongGame.UserControls; n定义公用变量 n Bullet bullet; n private Point bulletLocation = new Point(0, 0); n private Point bulletSpeed = new Point(0, 20); n n 这里子弹要动态产生,要被多个事件使用 在按下空白键事件中加代码 n case Key.Space: n bullet = new Bullet(); n cnv.Children.Add(bullet); n bulletLocation.X = (double)ship1.GetValue(Canvas.LeftProperty); n bulletLocation.Y = (double)ship1.GetValue(Canvas.TopProperty); n break; n把子弹坐标定到飞船所在位置 写帧呈现事件 n private void myRender(object sender, EventArgs e) n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X); n ship1.SetValue(Canvas.TopProperty, shipLocation.Y); n n bullet.SetValue(Canvas.LeftProperty, bulletLocation.X); n bullet.SetValue(Canvas.TopProperty, bulletLocation.Y); n bulletLocation.Y -= bulletSpeed.Y; n 完善子弹控制,只能有一发 n private void myRender(object sender, EventArgs e) n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X); n ship1.SetValue(Canvas.TopProperty, shipLocation.Y); n n bullet.SetValue(Canvas.LeftProperty, bulletLocation.X); n bullet.SetValue(Canvas.TopProperty, bulletLocation.Y); n bulletLocation.Y -= bulletSpeed.Y; n if (bulletLocation.Y n n n n n n n n n n n n n n n n n n n n n注意要编译,注意工具栏,xmlns:my=“clr-namespace:MyGame.UserControls”可 以从工具栏拖出控件了。 界面 类中的变量 n /暂存绿色外星人在画布中的位置 n private Point greenAlien1Location = new Point(0, 0); n /暂存绿色外星人在X轴上的移动速度 n private Point greenAlien1Speed = new Point(250, 0); n /定义动画在画布中的左边界 n private Point upperLeftCorner = new Point(0, 0); n /定义动画在画布中的右边界 n private Point bottomRightCorner = new Point(0, 0); n /暂存外星人的行高 n private double rowHeight = 60; n /暂存完成呈现帧的时间 n private DateTime lastTick; n private Point greenAlienLocation = new Point(0, 0); n GreenAlien green; n private double speed = 1; n private void RenderFrame(object sender, EventArgs e) n n if (green != null) n n greenAlienLocation.X += speed; n if (greenAlienLocation.X = (cav.ActualWidth - green.ActualWidth * 0.5) n n speed *= -1; n n greenAlienLocation.Y += 0.2; n green.SetValue(Canvas.LeftProperty, greenAlienLocation.X); n green.SetValue(Canvas.TopProperty, greenAlienLocation.Y); n n n private void btnStartGame_Click(object sender, RoutedEventArgs e) n n button3.Visibility = Visibility.Collapsed; n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty); n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty); n green = new GreenAlien(); n cav.Children.Add(green); n CompositionTarget.Rendering += myRender; n KeyDown += new KeyEventHandler(myKeyDown); n nCompositionTarget.Rendering是响应静态事件,触发该事件是为了 为每帧获取内容。这是一种非常方便的方法,用它构建基于帧的动画 的基本技术很容易,只需要简单地为静态的 CompositionTarget.Rendering事件关联事件处理程序。一旦关联了 事件处理程序,Silverlight就会开始不断地调用这个事件处理程序(只 要渲染代码执行得足够快,每秒将会调用60次) Width 和 ActualWidth差别 n Width:是我们期望控件应有的宽度,是可读写的 ,可在xaml文件中设置,也可在法度中设置。若 是没有设置,Width的值为NaN(Not a Number ) n ActualWidth:是控件Render的实际宽度,控件 Render之前,它的值为0,。该属性是只读的。 n运行后看到一个精灵的运动 n在Silverlight 中,我们必须对一些重要问题进行精 确地控制。其中最重要的是时间管理。默认情况 下,Silverlight 每秒输出60帧图像。这意味着代 码必须尽可能快地执行每一个帧的输出以避免漏 掉一些帧的显示任务以便生成一个平滑流畅的动 画效果。对于创建其它使用矢量图形的程序来说 ,其实现步骤和我们前面的例子的步骤几乎完全 相同。你可以使用基于矢量图形的动画精灵来替 换前面的光栅图像。在完成了许多精灵的创建任 务后你会觉得代码不容易维护。此时需要对代码 进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论