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

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

 2010-09-30 20:47:32 来源:WEB开发网   
核心提示: 定义好精灵脚底障碍物区域后,我们同样还需要对目前的障碍物预测方法进行相应的调整,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统(2),此时在预测障碍物的时候就必须首先排除自身精灵占据的障碍物区域,然后以该区域边缘点来取代

定义好精灵脚底障碍物区域后,我们同样还需要对目前的障碍物预测方法进行相应的调整。此时在预测障碍物的时候就必须首先排除自身精灵占据的障碍物区域,然后以该区域边缘点来取代原先的障碍物预测点(关于障碍物预测点可以参考第二十节)。下面我以精灵向左方向移动为例,该方向的障碍物预测需要进行如下改进:

        private bool WillCollide() {

            switch ((int)Leader.Direction) {

                case 6:

                    return VaryObstruction[

(int)(Leader.X / GridSizeX) - Leader.HoldWidth - 1,

(int)(Leader.Y / GridSizeY)

]

== 0 ? true : false;

            }

        }

黄色部分代码为在原先基础上新添加的部分,通过它拓展了障碍物预测区域。下图为该例子演示图:

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

一切就绪,现在让我们着手构建动态障碍物数组VaryObstruction。

同样的,从实现原理切入。我们首先需要拷贝一份固定障碍物数组(FixedObstruction)的浅表副本赋给动态障碍物数组(VaryObstruction);然后循环遍历索敌区域内的所有精灵对象,将它们占据区域全部示为障碍物区域并更新VaryObstruction;最后间隔一定时间重复以上过程继续更新动态障碍物数组。

原理总是比较简单的,做起来往往并非一帆风顺。大家可以从原理中看出两个重点:1、此过程是一个重复无限循环过程,因此我们可以将此之放在一个计时器中,让Tick事件去处理;2、此过程是绝对的性能消耗,如果将之放在界面线程中,很肯定的将导致游戏刷新率大副下降,这将极其影响游戏的流畅性。聪明的朋友此时一定想到了后台处理;没错,这里必须使用后台处理,而且必须是异步跨线程的(即不占用界面线程,同时又能让结果直接影响到界面)。幸运的是,在WPF/Silverlight中,我们可以轻松的使用BackgroundWorker;在Winform时代用过它的朋友都很清楚,它是一个爽歪歪的东西。呵呵,那么接下来的过程就再简单不过了,且看功能实现的关键步骤及代码:

上一页  1 2 3 4 5  下一页

Tags:开发 WPF Silverlight

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