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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十七) 完美精灵之八面玲珑(WPF Only)①

 2009-06-27 07:08:07 来源:WEB开发网   
核心提示: 图片看不清楚?请点击这里查看原图(大图), 尺寸规格统一好以后,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十七) 完美精灵之八面玲珑(WPF Only)①(3),接下来还需要对所有图片进行微调(可想而知,游戏制作中对美工人数的需求是极其庞大的,接

图片看不清楚?请点击这里查看原图(大图)。 

尺寸规格统一好以后,接下来还需要对所有图片进行微调(可想而知,游戏制作中对美工人数的需求是极其庞大的。就如我在前面章节中说到的,游戏开发的成功,极大幅度取决于美工,程序逻辑方面仅位列游戏需求分析、界面地图美术设计之后排在第三)。所谓微调,就是将角色的各帧图片通过测试工具让它运动起来(如第四节、第五节中的方法),然后观察每帧图片重叠起来位置是否吻合,不吻合的则需要通过Photoshop进行微调,使它上面的角色处于图片正确的位置上(如下图则为错误的叠加,我们必须将所有帧图片完全对齐,这样连续切换的时候才能不漏破绽):

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十七) 完美精灵之八面玲珑(WPF Only)①

至此就完成了素材准备阶段。一切就绪后,接下来的工作就是将主角8方向5动作的所有帧图片(本例子中的272张)进行处理,最终合成一张将这所有图片按一定规律排列的8方向5动作整合图。就以这272张图片为例,如何使用WPF类库中的方法将它们合并为一张图片呢?来看本节的第一个精华ComposeImage()方法:

        /// <summary>
        /// 将N帧图片合成一张8方向角色各动作分布图
        /// </summary>
        /// <param name="SourcePath">源文件路径</param>
        /// <param name="SavaToPath">保存文件到目标路径</param>
        /// <param name="imgnum">源图片数量</param>
        /// <param name="imgwidth">单位图片宽</param>
        /// <param name="imgheight">单位图片高</param>
        public static void ComposeImage(string SourcePath, string SavaToPath, int imgNum, int imgWidth, int imgHeight) {
            System.IO.FileStream fileStream = new System.IO.FileStream(SavaToPath, System.IO.FileMode.Create);
            DrawingVisual drawingVisual = new DrawingVisual();
            DrawingContext drawingContext = drawingVisual.RenderOpen();
            int count = 1;
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < imgNum / 8; j++) {
                    drawingContext.DrawImage(new BitmapImage(new Uri(SourcePath + count + "-1.png")), new Rect(j * imgWidth, i * imgHeight, imgWidth, imgHeight));
                    count += 1;
                }
            }
            drawingContext.Close();
            RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((imgNum / 8) * imgWidth, 8 * imgHeight, 0, 0, PixelFormats.Pbgra32);
            renderTargetBitmap.Render(drawingVisual);
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
            encoder.Save(fileStream);
            fileStream.Close();
        }

上一页  1 2 3 4  下一页

Tags:开发 WPF Silverlight

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