Silverlight C# 游戏开发:Flyer04让我们一起来摇摆吧

简介:

接上回所述,咱们的飞行员已经开始往下飘落了,但是似乎少点什么,所谓没有危险那里来的乐趣,所以要增加一个敌人来搞定为主角造成点难度,本篇作为无聊,只是说了一些废话,重复了前几篇的代码,只是不过稍微做了一些修改,废话少说,直接上图:

我们看到和上次相比,增加了两个部分,一个是零件堆,一个是血条,首先我们先完成血条的部分,这部分代码如下:

 


  
  
public class ClassFlyerLife : StackPanel
{
// 用一个StackPanel容器来作为生命条
StackPanel Life = new StackPanel() { VerticalAlignment = VerticalAlignment.Center };
public ClassFlyerLife()
{
Width
= 120 ;
Height
= 18 ;
this .Background = new SolidColorBrush(Colors.Orange);
Image Face
= new Image();
Face.Width
= Face.Height = 16 ;
this .Orientation = orientation.Horizontal;
Face.VerticalAlignment
= VerticalAlignment.Center;
Face.Source
= new BitmapImage( new Uri( @" Src/face.jpg " , UriKind.Relative));
this .Children.Add(Face);
Life.Width
= 100 ;
Life.Height
= 16 ;
Life.Background
= new SolidColorBrush(Colors.Red);
this .Children.Add(Life);
Canvas.SetLeft(
this , 10 );
Canvas.SetTop(
this , 10 );
}
}

创建一个ClassFlyerLife类继承StackPanel,用来做头像以及血条的容器,然后分别创建出来血条和头像添加到容器中,可以控制Life的Width来控制血的多少。

 

 

OK,下一步,创建飘动的螺丝和螺母,这个部分的动画基本上和主角的没什么太多区别,只是从6行变成了1行,仍然是8帧一行,只需要拆分放到Frames组当中即可,当中的动画也是和主角的一样,通过一个NextFrame以及一个定时器来刷新。

代码部分不做提交,基本上大同小异,可是和飞行员有一个非常不同的地方,那就是螺丝和螺母共享大量的数据以及处理方法,只是图片不同罢了,那么按照伟大的面向对象方法只需要简单继承一下就好啦……不过看起来于此做法非常不值得,还是简单的做吧,在构造函数中增加一个参数,用枚举的方法来区分到底是螺丝钉还是螺丝母,为这问题也是转悠的半天,还是看看代码吧。

 


  
  
/// <summary>
/// 螺丝或者螺母的枚举
/// 在ClassSolid构造的时候据此选择螺丝或者螺母的图片
/// </summary>
public enum emSolidSort
{
nut, screw
}
/// <summary>
/// 固体类,也就是飞行员的敌人。。。
/// </summary>
public class ClassSolid : Canvas
{
int _iFrame = 0 ;
Image _image;
ImageSource[] SolidFrames
= new ImageSource[ 8 ];
public ClassSolid(emSolidSort sort)
{

_image
= new Image();
BitmapImage bitmap;
if (sort == emSolidSort.nut)
bitmap
= new BitmapImage( new Uri( @" Src/solidLM.png " , UriKind.Relative));
else
bitmap
= new BitmapImage( new Uri( @" Src/solidLS.png " , UriKind.Relative));
bitmap.ImageOpened
+= new EventHandler < RoutedEventArgs > (bitmap_ImageOpened);
_image.Source
= bitmap;

this .Children.Add(_image);
// 设定一个循环来控制Solid的动画
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick
+= new EventHandler(TickGameFrameLoop);
dispatcherTimer.Interval
= TimeSpan.FromMilliseconds( 30 ); // 重复间隔
dispatcherTimer.Start();
}
}

所有的Solid应该有一个飞行的控制,那么这个部分和Cloud很接近,但是我们要让游戏“摇摆”起来,所以和云彩也有一点点的不用,即Solid会随风发生变动,做风力的方法也比较简单,只是将X坐标做了偏移,用来表示风向发生的变化:

 

所以,你需要加一个变量,然后按照一段时间变化一次,时间控制仍然用一个定时器来搞定,毕竟么,就是那么容易。

好了,具体代码,不在这里展示,请参看代码,点击这里下载

今天就到这里,本想把碰撞做了,可是时间太晚,下次再见,晚安


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


相关文章
|
存储 开发框架 .NET
【C#】C# 基础语法与游戏开发
【1月更文挑战第21天】【C#】C# 基础语法与游戏开发
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
646 0
|
存储 开发框架 .NET
【C#】认识C# (为了游戏开发 O(≧口≦)O)
【1月更文挑战第26天】【C#】认识C# (为了游戏开发 O(≧口≦)O)
|
存储 C# 图形学
Unity游戏开发之C#快速入门
Unity游戏开发之C#快速入门C#是微软团队在开发.NET框架时开发的,它的构想接近于C、C++,也和JAVA十分相似,有许多强大的编程功能。个人感受是C#吸收了众多编程语言的优点,从中可以看到C、C++、Java、Javascript、python的影子,设计思想都是相通的(过段时间一定要看看设计模式),对比迁移地学习基本只需要记关键字、语法和包的用法。
1850 0

热门文章

最新文章