Silverlight C# 游戏开发:L4 模型组和简单的动画

简介:

前面我们已经完成了基本模型和自定义模型导入,你会发现每次都通过代码来添加一堆模型确实很麻烦,在Balder中可以使用Geometry做模型组,将各种各样的模型添加到其中,这次我们简单的一起来研究一下模型组,加上一个小小的动画,如果这篇你看明白了,那么就可以使用这个引擎开发出一个简单的游戏,期待你的成果。

 

最先我们还是从新建一个控件开始,请建立一个控件打开其中的.cs文件,增加代码变成下面的样子,

 
  1. public Lesson04()  
  2. {  
  3. InitializeComponent();  
  4. //L1  
  5. Game game = new Game() { Width = 600Height = 400 };  
  6. game.Camera = new Camera();  
  7. game.Camera.Position = new Coordinate(100, 120, 150);  
  8. game.Camera.Target = new Coordinate(0, 0, 0);  
  9. game.Children.Add(new OmniLight() { Position = new Coordinate(0, 0, 0) });  
  10. //L3  
  11. Game_Axis axis_x = new Game_Axis(new Vertex(-300, 0, 0), new Vertex(300, 0, 0), Colors.Red);  
  12. Game_Axis axis_y = new Game_Axis(new Vertex(0, -300, 0), new Vertex(0, 300, 0), Colors.Blue);  
  13. Game_Axis axis_z = new Game_Axis(new Vertex(0, 0, -300), new Vertex(0, 0, 300), Colors.Green);  
  14. //L4  
  15. Balder.Objects.Geometries.Geometry group = new Balder.Objects.Geometries.Geometry() { Name="MeshGroup" };  
  16. group.InteractionEnabled = true;   
  17. group.Children.Add(axis_x);  
  18. group.Children.Add(axis_y);  
  19. group.Children.Add(axis_z);  
  20. //L2  
  21. Mesh Teapot = new Mesh();   
  22. Teapot.Position = new Coordinate(0, 0, 0);  
  23.  
  24. Teapot.AssetName = new Uri("/Balder_Studio;component/Res/teapot.ase", UriKind.Relative);  
  25. //L4  
  26. group.Children.Add(Teapot);  
  27. group.Children.Add(new Box() { Dimension = new Coordinate(10, 20, 30), Position = new Coordinate(100, 10, 0), Name = "MyBox" });  
  28. group.Children.Add(new Box() { Dimension = new Coordinate(10, 30, 10), Position = new Coordinate(10, 10, -100) });  
  29. game.Children.Add(group);  
  30.  
  31. LayoutRoot.Children.Add(game);   
  32. }  
  33.  
  34.    
  35.  
好了,运行一下看看,你会见到一个茶壶,一个简单的坐标( 坐标轴这个类在Lesson03中请查看相关信息),外加两块砖头(Box)就如同文章开始的一样,关于模型添加到group当中的那段代码完全可以改造成下面的样子,为了简单理解,就不做太多的变化了。
 
  1. public class MyGeometry : Balder.Objects.Geometries.Geometry  
  2. {  
  3. //you code  
  4. }  
上面的内容主要是介绍如何编组,其实它和一个Children集合没什么区别,如果你理解Silverlight的容器机制,那么就很容易搞明白。

下面来写一个动画,我们需要一个计时器来模拟一个小型的循环,代码如下:

 

 
  1.  
  2.  
  3. DispatcherTimer _dispatchertimer = new DispatcherTimer();  
  4. _dispatchertimer.Tick += new EventHandler(_dispatchertimer_Tick);  
  5. _dispatchertimer.Interval = TimeSpan.FromMilliseconds(30);  
  6.    
  7.  

如果你发现一些小错误,可能是需要using System.Windows.Threading,最后写一段代码在Lesson04类当中:

 

 
  1.  
  2.  
  3. //模型组  
  4. Balder.Objects.Geometries.Geometry _meshgroup = null;  
  5. Balder.Objects.Geometries.Box _box = null;  
  6. //旋转角度计数  
  7. float angle = 0;  
  8. float speed = 2;  
  9. void _dispatchertimer_Tick(object sender, EventArgs e)  
  10. {  
  11. if (_meshgroup == null)  
  12. _meshgroup = this.FindName("MeshGroup") as Balder.Objects.Geometries.Geometry;  
  13. if(_box==null)  
  14. _box = this.FindName("MyBox") as Balder.Objects.Geometries.Box;  
  15. _meshgroup.World = Balder.Math.Matrix.CreateRotationY(angle++);  
  16. _box.Position.Y += speed;  
  17. if (_box.Position.Y >= 50 || _box.Position.Y <= 0)   
  18. speed = -speed;  
  19.  
  20. }  
  21.    
  22.  

这段代码中,angle的角度在不停的增加,创建Y轴的旋转后的世界坐标系矩阵赋值给模型组,达到整个模型组在旋转目的,而Box则遵循一个Y轴上下移动的逻辑,这是最简单的方式,相信理解起来并不困难:),关于FindName方法一般用的不是很频繁,主要是为了避免前面和后面的代码的阅读误解,使之有连贯性。

那么最后我们运行一下看看效果吧:

 

如果你仍未看懂,可以下载代码研究,3D方面的计算才刚刚开始,而下一步,我们说说摄像机和灯光:)

源代码下载地址:点击这里下载工程

工程中如果缺少Balder.dll请在这里快速下载:SL4_Balder.rar



本文转自nowpaper 51CTO博客,原文链接:http://blog.51cto.com/nowpaper/712312

相关文章
|
3月前
|
存储 开发框架 .NET
【C#】C# 基础语法与游戏开发
【1月更文挑战第21天】【C#】C# 基础语法与游戏开发
|
3月前
|
存储 开发框架 .NET
【C#】认识C# (为了游戏开发 O(≧口≦)O)
【1月更文挑战第26天】【C#】认识C# (为了游戏开发 O(≧口≦)O)
|
9月前
|
C# 开发者
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
|
4月前
|
C# 开发工具 Windows
C#操作PPT动画窗格并插入音频文件的一些思路
C#操作PPT动画窗格并插入音频文件的一些思路
|
容器
Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)
原文:Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)   Silverlight的基础动画包括偏移、旋转、缩放、倾斜和翻转动画,这些基础动画毫无疑问是在Silverlight中使用得最多的动画效果,其使用也是非常简单的。
965 0
|
容器 数据可视化 内存技术
Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)
原文:Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)   用户界面组件、图像元素和多媒体功能可以让我们的界面生动活泼,除此之外,Silverlight还具备动画功能,它可以让应用程序“动起来”。
794 0
Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)
原文:Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)   Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平、垂直方向的倾斜变化动画效果。
795 0
|
容器
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
原文:Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)   正如你所看到的,Blend是一个非常强大的节约时间的设计工具,在Blend下能够设计出很多满意的动画作品,或许他具体是怎么实现的,通过什么方式实现的我们还是一无所知。
911 0
Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
原文:Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)   模糊效果(BlurEffect)与阴影效果(DropShadowEffect)是两个非常实用和常用的两个特效,比如在开发相册中,可以对照片的缩略图添加模糊效果,在放大照片的过程中动态改变照片的大小和模糊的透明度来达到一个放大透明的效果。
1045 0
Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效
原文:Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效   当我们在进行Silverlight & Blend进行动画设计的过程中,可能需要设计出很多效果不一的图形图像出来作为动画的基本组成元素。
1001 0