Franco.Chou's Space
Franco's Tech Blog
一种将XNA(GAME)insert到WPF中的尝试
2009年08月5日
Posted by 于 最近,Rabbit的需要,想要做个Rabbit的导航系统。鉴于XNA强大的图形库,我们准备用它来做。
我们知道XNA是一种微软新推出的跨平台的(当然,仅限于微软的平台–windows和xbox),基于.net的游戏开发工具。
我们遵照以下步骤。
1.利用XNA GAME STUDIO3.0建立一个游戏,我们可以下载一个现成的,连接在上篇日志中有(克制!写篇日志清醒下),我们下了贪食蛇(MoveTheGrowingCreatureButDoNotCollide)这个项目做测试。
2.建立一个WPF BROSWER的工程
3.将MoveTheGrowingCreatureButDoNotCollide工程导入WPF项目中。 ADD–> Exsisting Project. 修改property–>application–>outputtype为 class libary 并编译
<这步骤的作用是将该工程打包,作为WPF中的资源库进行引用>
4.在MoveTheGrowingCreatureButDoNotCollide工程的references里添加System.Windows.Forms
在WPF工程的references里面添加System.Windows.Forms.Integration , MoveTheGrowingCreature ,Microsoft.Xna.Framework.Game 和 System.Windows.Forms
5.根据网上的资料(http://petosky.net/node/13)来进行修改。<细节不再赘述,按照上面做就可以>
6.如果运行时有错误:找不到材质(资源),那么就查看它所缺的路径,添上资源。将debug/content中的三个xnb文件拷出,放到debug中。
7.运行之后截图如下:
<我们发现,有个窗体盖住了panel>
<将窗口移开,可以正常游戏>
但是,窗口最小化后发现不能响应键盘消息。
原因分析:XNA本身所带的GAMEWINDOW和PANEL的基类不同,当把GAMEWINDOW的句柄传给PANEL的时候,内容可以显现出来
但是,由于不兼容的关系,还是会出来一个游戏窗口。而消息的路由必须经过该窗口,无论是将它最小化,还是将它强行转化为FORM
Control,并将visible设为false后,都不能响应键盘消息。但是,将游戏窗口直接嵌入浏览器又是不能实现的。这里就有一个瓶颈:有
了GAMEWIDOW,太不美观,没有GAMEWINDOW,PANEL又不能响应键盘消息!
后记:XNA作为一个GAME的开发工具,我个人觉得拿它来做插件有些不太合适,就像要在浏览器中嵌入桌面游戏一样。(当然,如果
可以实现这样的效果,部署将会非常非常方便!)所以,我个人觉得,如果要做插件,就不要建立GAME了,直接利用XNA里面的图形
渲染库比较好,毕竟XNA里面包装了D3D的库,是.NET中不可多得的比较好图形库!<这里有个比较好的直接用XNA图形库的
近期评论