资源描述:
《c#开发wpfsilverlight动画及游戏系列教程(game tutorial):(十五) 精灵控件横空出世!②.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、紧接着上一节,我们打开QXSpirit.xaml.cs文件。在游戏设计中,为了能够轻易控制及管理精灵的各项属性及功能等,我赋予每个精灵一个"生命钟",它在精灵的使用中起到关键作用:publicQXSpirit(){InitializeComponent();InitThread();//初始化精灵线程}DispatcherTimerTimer=newDispatcherTimer();privatevoidInitThread(){Timer.Tick+=newEventHandler(Timer_Tick);Timer.S
2、tart();}//精灵线程间隔事件intcount=0;privatevoidTimer_Tick(objectsender,EventArgse){Body.Source=newBitmapImage((newUri(ImageAddress+count+".png",UriKind.Relative)));count=count==7?0:count+1;} DispatcherTimer类似于Thread中的Join,它并未创建一个新的线程,但是为了更形象的描述它,后面的章节中我均称呼它为“生命线程”。那为何要在
3、精灵控件中配置一个“生命线程”呢?打这样一个比方吧:我们可以把精灵比做一个人,它的生命就好比这个线程,每个人只有一条命,http://youku.wan128.cn在精子与卵子结合之后(控件的初始化中创建),生命即开始鲜活(创建后即启动)简单说就是“命悬一线”啦。汗一个…。目前该线程与前面章节中的一样,暂时只做精灵动作图片切换用(Timer_Tick()),至于其他功能,我将在后面的章节中进行讲解。 赋予了精灵生命以后,接着需要培养它的性格,让它拥有更多的能力、更多的属性。当然,大家首先迫切想要实现的就是前两节遗留下来关
4、于精灵的X,Y属性。那么先来看代码://精灵X坐标(关联属性)publicdoubleX{get{return(double)GetValue(XProperty);}set{SetValue(XProperty,value);}}publicstaticreadonlyDependencyPropertyXProperty=DependencyProperty.Register("X",//属性名typeof(double),//属性类型typeof(QXSpirit),//属性主人类型newFrameworkProper
5、tyMetadata((double)0,//初始值0FrameworkPropertyMetadataOptions.None,//不特定界面修改//不需要属性改变回调null,//newPropertyChangedCallback(QXSpiritInvalidated),//不使用强制回调null));//精灵Y坐标(关联属性)publicdoubleY{get{return(double)GetValue(YProperty);}set{SetValue(YProperty,value);}}publicstati
6、creadonlyDependencyPropertyYProperty=DependencyProperty.Register("Y",typeof(double),typeof(QXSpirit),newFrameworkPropertyMetadata((double)0,FrameworkPropertyMetadataOptions.None,null,null)); 以上代码实现了QXSpirit控件的X,Y关联属性。大家不要被看似复杂的代码所吓着,其实很简单的,http://fenzu.ttplay8.cn
7、让我一一道来。首先将以上代码分成两部分:X坐标为第一部分,Y坐标为第二部分。它们的结构是一模一样的,我们可以忽略Y坐标,只要理解了X关联属性的实现,将X换成Y即可。 关于关联属性(上一节中的AttachProperty(附加属性)其实也是通过关联属性来实现的)的相关知识,网上不要太多,它不是本教程的重点所以就不多做解释了。理解它的朋友都明白,上面代码是它的标准创建形式,publicdoubleX是它的属性访问器,publicstaticreadonlyDependencyPropertyXProperty则是定义它。就如
8、上面代码注释中写到的,分别定义它的属性名、类型、所处类名等等。这样,一个完整的X关联属性就完成了。有的朋友又困惑了,为什么要那么麻烦去创建关联属性?我直接这样写不就得了:publicdoubleX{get;set;} 即传统又简单。但是,我想告诉大家的是,在WPF/Silverligh