在我的教程里一直未公开的@H_404_10@QX.dll以及@H_404_10@QXGameEngine开源后,大家讨论得比较多的@H_404_10@QXGame_Silverlight3.dll。它俩到底是何方神圣,在引擎中起着何种作用;为什么就它俩不开源,莫非核心代码都在里面?本节我将就如上问题给予大家一个答案,揭开长久以来被尘封的种种谜团。
@H_404_10@ 事情的起因缘于教程@H_404_10@第七节中那对牛人老外用@H_404_10@C#写的@H_404_10@A*算法,一句话:相当的牛。于是乎我忍不住了,这么好的源码不拿来用太亏本了。但是,该源码却是在@H_404_10@Winform环境下编写的,如何将之运用到@H_404_10@WPF或是@H_404_10@Silverlight平台上呢?
我们首先用@H_404_10@VS打开源代码,整个结构如下:
@H_404_10@
一眼看过去就知道精华在哪了,@H_404_10@Algorithms文件夹下的@H_404_10@6个@H_404_10@cs类即是寻路用的所有逻辑,并且全部属于namespace Algorithms命名空间下。发现金矿了,特别的心动,急了,杂办?当然是挖出来咯。
接下来关闭此解决方案,并另外新建一个@H_404_10@Silverlight类库@H_404_10@(如果是@H_404_10@WPF平台,就建立@H_404_10@WPF类库,道理是一样的@H_404_10@),取名为@H_404_10@QXGame_Silverlight3:
@H_404_10@
里面默认带了一个@H_404_10@Class1.cs,没用,干掉它。嘿嘿
邪恶的事情即将发生。在项目上点击鼠标右键@H_404_10@->添加@H_404_10@->现有项,
@H_404_10@
然后找到本文开头的那@H_404_10@6个@H_404_10@cs文件加入到此项目中:
@H_404_10@
我靠。。。难道是传说中的移花接木???看到希望了,赶紧按@H_404_10@Ctrl+Shift+B编译一下,伤心哪,一堆错误:
@H_404_10@
没折了吗?仔细分析一下,其实也不过@H_404_10@4处而已:
@H_404_10@1)@H_404_10@Silverlight中没有System.Drawing这个东西
@H_404_10@2)@H_404_10@Silverlight中更没有System.windows.Forms这个东西
@H_404_10@3)无法识别@H_404_10@Point这个结构类型,需要添加一个包含有该@H_404_10@Point定义的命名空间引用
@H_404_10@4)@H_404_10@Silverlight中不允许使用@H_404_10@unsafe代码
首先我们看第@H_404_10@4点,在@H_404_10@Winform/WPF中可以使用不安全代码;而在@H_404_10@Silverlight项目中是不允许使用不安全代码的:
@H_404_10@
接下来我们找到源码中有出现@H_404_10@unsafe代码的地方,发现其实它们的调用已经被注释掉了,注释上有提到使用@H_404_10@unsafe会快那么一点点,但是不多。既然不用它能实现相当功能,且又可以被@H_404_10@Silverlight所支持,不如干脆点,直接干掉它们好了:
@H_404_10@
@H_404_10@OK,问题@H_404_10@4成功解决;再下来我们同样可以很轻松的解决掉问题@H_404_10@1和@H_404_10@2,只需删除这@H_404_10@6个@H_404_10@cs文件中的所有@H_404_10@using System.Drawing、@H_404_10@using System.Drawing.drawing2d和@H_404_10@using System.windows.Forms引用即可。
剩下来的仿佛只有问题@H_404_10@3了,这个就更简单了,直接根据提示添加指定的命名空间引用即可:
@H_404_10@
到此是否大功告成了?不妨再次编译一下,结果又是一身冷汗:
@H_404_10@
又增加了@H_404_10@45个错误。偶的神。。。
冷静的回想一下,不过是修改了错误@H_404_10@3,加入了对@H_404_10@Point的识别才造成出现这些错误,莫非与之有关?
再逐条分析,嘿嘿,眉目出来了,原来原代码的@H_404_10@Point是@H_404_10@System.Drawing中的@H_404_10@Point,其中的@H_404_10@Point.X与@H_404_10@Point.Y均为@H_404_10@int类型;而@H_404_10@Silverlight的@H_404_10@System.windows中的@H_404_10@Point.X与@H_404_10@Point.Y则是@H_404_10@double类型。找到了问题所在,解决也就不难了。大家想到的最直接且快速的方案即是转换,我们逐个找出提示出错的地方,然后将它们进行@H_404_10@int类型转换,例如下面这样:
@H_404_10@
当然,这样做有损性能,如果您不嫌麻烦,可以用两个@H_404_10@int来代替@H_404_10@Point,或自己写个@H_404_10@struct,处理方式太多了。至于本节示例嘛,作者比较懒,暂时按上面的方法对所有的错误进行类似处理了。仅仅需要不到两分钟的时间,即可干掉这@H_404_10@45个错误,最后再次按下@H_404_10@Ctrl+Shift+F5,嘿,生成成功啦!激动啊那个激动,用千辛万苦来形容毫不为过。金矿终于被挖出来,但它被存放到了哪儿?我们此时再次打开项目属性,点击输出目录的浏览按钮,然后在该输出文件夹上点右键@H_404_10@->打开:
@H_404_10@
其中@H_404_10@QXGame_Silverlight3.dll即是我们梦寐以求的金矿,一定要好好珍惜哦:
@H_404_10@
如果还有人要提问:该如何使用它?我只能和他说:一个@H_404_10@.NET开发者不知道如何引用第三方@H_404_10@dll,是天大的笑话哪@H_404_10@~
结尾语:本节大家学到了什么?看似简单的问题其实蕴涵着挺多的@H_404_10@Silverlight知识点。到此大家是否已经对本文开头的问题不再疑惑了?
最后说说个人的想法:将他人的源码经过修改后变成自己的工具是可以的,但是同时也应当建立在尊重他人劳动成果的前提下,尽量保留一些对源码来源及作者的信息描述,无论是在源码或是文章中体现,毕竟辛酸只有同道中人能感受。
作者:深蓝色右手
出处:http://alamiye010.cnblogs.com
Tag标签: WPF/Silverlight深度解决方案
A*寻路初探 http://data.gameres.com/message.asp?TopicID=25439
总结以上是内存溢出为你收集整理的WPF/Silverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL)全部内容,希望文章能够帮你解决WPF/Silverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)