WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game C... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统

 2010-09-30 20:47:32 来源:WEB开发网   
核心提示: 黄色代码部分即为通过循环来设定精灵脚底的占据区域,在WPF/Silverlight机制中跨线程调用必须在与Dispatcher关联的线程上执行委托(这与以往有些不同),C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统(4)

黄色代码部分即为通过循环来设定精灵脚底的占据区域。在WPF/Silverlight机制中跨线程调用必须在与Dispatcher关联的线程上执行委托(这与以往有些不同),所以此时要实现跨线程的异步处理我们必须通过this.Dispatcher.BeginInvoke()的来实现。并且此线程同样为比较重要的处理,因此优先级别我设定为DispatcherPriority.Normal。

额外的,如果您想调试障碍物刷新的次数或处理其他的相关数据,您可以在注册的后台工作完成事件中进行计数之类的设定,例如下面方式,这样可以很好的对异步结果进行管理(通过e.Result捕获传递过来的结果参数):

        private void BackWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {

            count +=1;

        }

通过以上4个步骤即轻松完成了动态障碍物的构建。BackgroundWorker的强大对于处理这区区一丁点的运算还是绰绰有余的,您还可以将更多的任务托付给它。例如我们同样的可以将上一节中讲到的主角头像面板与监视对象头像面板的刷新方法一起放进RefreshFace()中;这样在游戏运行过程中,我们不再需要去管理它哥两,后台工作者会每间隔1秒左右更新它们一次,就象保姆一样照顾得无微不至且不打扰到您的任何其他工作。

下面让我们来测试一下吧。我在屏幕左下角放了个按钮,每次点击地图最上面的妖精怪物都会向右下方移动50象素,大家不妨走到它旁边,然后在它每次动后在站到它移动之前的位置上,测试一下障碍物此时是否还存在,并且向它新的位置方向移动看看新的障碍物是否已成功设置:

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统

上一页  1 2 3 4 5  下一页

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接