Franco.Chou's Space

Franco's Tech Blog

一种将XNA(GAME)insert到WPF中的尝试


最近,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图形库的

例子:http://creators.xna.com/en-US/sample/winforms_series1>

留下评论