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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十四)地图编辑器诞生啦!

 2010-09-30 21:02:10 来源:WEB开发网   
核心提示: Grid的ShowGridLines参数非常有意思,通过将之设置为True即可显示出Grid所有单元格的边框:遗憾的是,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十四)地图编辑器诞生啦!(3),一旦启动了网格边框显示,将严重影响界面线程的性能,仿佛有

Grid的ShowGridLines参数非常有意思,通过将之设置为True即可显示出Grid所有单元格的边框:

遗憾的是,一旦启动了网格边框显示,将严重影响界面线程的性能,仿佛有些鸡肋了,有时间我还打算尝试其他的方式来高效的设置单元格边框。

3)设置障碍物:

通过为画板ScrollViewer注册鼠标左键点击事件及鼠标移动事件并配合一定的逻辑来实现障碍物的绘制于擦除:


if (grid == null) { return; }
    Point p = e.GetPosition(ObstructionViewer);
    if (p.X < 738 && p.Y < 551) {
        p = e.GetPosition(Map);
        test.Text = string.Format("当前坐标 x:{0} y:{1}", (int)p.X, (int)p.Y);          
SetObstructionMatrix((int)(p.X / GridWidthSlider.Value), (int)(p.Y / GridHeightSlider.Value), 0);
}
}

4)模拟A*寻路:

在画板上描绘完障碍物后,再通过自行绘制起点与终点,并将教程中的A*寻路dll引用到本编辑器中即可以实现A*寻路模拟:

        IPathFinder pathFinder;
        List<Rectangle> pathRect = new List<Rectangle>();
        //模拟A*寻路
        private void FindPath_Click(object sender, RoutedEventArgs e) {
            if (grid == null || start == "" || end == "") { return; }
            string[] str = start.Split('_');
            int start_x = Convert.ToInt32(str[1]);
            int start_y = Convert.ToInt32(str[2]);
            str = end.Split('_');
            int end_x = Convert.ToInt32(str[1]);
            int end_y = Convert.ToInt32(str[2]);
            pathFinder = new PathFinderFast(ObstructionMatrix);
            List<PathFinderNode> path = pathFinder.FindPath(new Point(start_x, start_y), new Point(end_x, end_y));
            if (path == null) {
                MessageBox.Show("路径不存在!");
            } else {
                textBlock3.Text = string.Format("耗时:{0}秒", Math.Round(pathFinder.CompletedTime, 8).ToString());
                string result = "";
                RemoveRect();
                for (int i = 0; i < path.Count; i++) {
                    result += string.Format("{0}_{1}", path[i].X, path[i].Y);
                    SetRect(new SolidColorBrush(Colors.White), new SolidColorBrush(Colors.Black), GridWidthSlider.Value * 2 / 3, GridHeightSlider.Value * 2 / 3, GridWidthSlider.Value * 2 / 3, GridHeightSlider.Value * 2 / 3, path[i].X, path[i].Y);
                }
            }
        }

上一页  1 2 3 4 5  下一页

Tags:开发 WPF Silverlight

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