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

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十六)地图自定义切片与导出

 2010-09-30 21:01:05 来源:WEB开发网   
核心提示:做为提升游戏性能的一个重要环节就是地图的优化,作为基于Web的游戏来说,C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十六)地图自定义切片与导出,可以通过将地图切成若干同尺寸的片后,根据主角的位置进行时时的按需加载,障碍物单元格边线层及地图切片边线层,我曾在文中提过利用Gr

做为提升游戏性能的一个重要环节就是地图的优化,作为基于Web的游戏来说,可以通过将地图切成若干同尺寸的片后,根据主角的位置进行时时的按需加载。举个简单例子,好比一幅20000*20000的地图,我们将之以400*400像素为一个地图片单位切成2500片,假若游戏窗口尺寸为800*600,那么我们每次只需加载以主角为中心的周围9块地图片(1200*900像素)即可实现填充,这比起一次性加载诺大一张地图,且在移动时对其不停的切割,性能优越得太多太多。

那么本节我将向大家讲解如何为地图编辑器添加自定义切片与导出功能,从而为下一节的游戏地图性能优化做准备。

大家是否还记得在第三十四节中,我将地图显示部份分为了三层:障碍物层,障碍物单元格边线层及地图切片边线层。我曾在文中提过利用Grid的ShowGridLines来为单元格设置边框操作,尽管使用简单但性能却极其低下。这里我们可以通过在障碍物单元格边线层中绘制Line的方式来优化它:

        /// <summary>
        /// 绘制网格边线
        /// </summary>
        private void SetGridLines(Canvas carrier, double totalWidth, double totalHeight, double singleWidth, double singleHeight,Color lineColor, double dashWidth, double dashSpace) {
            carrier.Children.Clear();
            int sectionXNum = (int)(totalWidth / singleWidth);
            int sectionYNum = (int)(totalHeight / singleHeight);
            for (int x = 1; x <= sectionXNum; x++) {
                Line line = new Line() {
                    X1 = x * singleWidth,
                    X2 = x * singleWidth,
                    Y1 = 0,
                    Y2 = totalHeight,
                    Stroke = new SolidColorBrush(lineColor),
                    StrokeDashArray = new DoubleCollection() { dashWidth, dashSpace },
                };
                carrier.Children.Add(line);
            }
            for (int y = 1; y <= sectionYNum; y++) {
                Line line = new Line() {
                    X1 = 0,
                    X2 = totalWidth,
                    Y1 = y * singleHeight,
                    Y2 = y * singleHeight,
                    Stroke = new SolidColorBrush(lineColor),
                    StrokeDashArray = new DoubleCollection() { dashWidth, dashSpace },
                };
                carrier.Children.Add(line);
            }
        }

1 2 3 4  下一页

Tags:开发 WPF Silverlight

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