技术开发 频道

开发Silverlight游戏教程:精灵控件横空出世

 以上代码实现了QXSpirit控件的X,Y关联属性。大家不要被看似复杂的代码所吓着,其实很简单的,让我一一道来。首先将以上代码分成两部分:X坐标为第一部分,Y坐标为第二部分。它们的结构是一模一样的,我们可以忽略Y坐标,只要理解了X关联属性的实现,将X换成Y即可。

 关于关联属性(上一节中的AttachProperty(附加属性)其实也是通过关联属性来实现的)的相关知识,网上不要太多,它不是本教程的重点所以就不多做解释了。理解它的朋友都明白,上面代码是它的标准创建形式,public double X是它的属性访问器,public static readonly DependencyProperty XProperty 则是定义它。就如上面代码注释中写到的,分别定义它的属性名、类型、所处类名等等。这样,一个完整的X关联属性就完成了。有的朋友又困惑了,为什么要那么麻烦去创建关联属性?我直接这样写不就得了:

double _X;

 public double X {

 get { return _X; }

 set { _X = value; }

 }

 即传统又简单。但是,我想告诉大家的是,在WPF/Silverlight中,只有关联属性才能被更好的使用及识别,例如在属性的绑定,Storyboard目标属性的设定等等中,都必须使用到关联属性来实现,后面的章节中会讲到它的必要性。而像如上的属性访问器只能用于创建纯描述性属性,例如精灵图片地址目录等,就可以使用属性访问器:

 //精灵图片源目录地址

 string _ImageAddress;

 public string ImageAddress {

 get { return _ImageAddress; }

 set { _ImageAddress = value; }

 }

 至此,我们完成了一个初具雏形的精灵控件,接下来就是如何将之加入到游戏中了。首先要做的当然是添加精灵控件的引用:

 using WPFGameCourse.Controls;

 接下来就是创建精灵控件实例并将之添加进窗口的Carrier控件中:

 QXSpirit Spirit = new QXSpirit();

 private void InitSpirit() {

 Spirit.X = 300; //为精灵关联属性X赋值

 Spirit.Y = 400; //为精灵关联属性Y赋值

 Spirit.Timer.Interval = TimeSpan.FromMilliseconds(150); //精灵图片切换频率

 Spirit.ImageAddress = @"..\Player\"; //精灵图片源地址

 Carrier.Children.Add(Spirit);

 }

0
相关文章