逍遥剑客
Nebula3嵌入WPF
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
逍遥剑客
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
Nebula3嵌入WPF
Nebula3嵌入WPF
逍遥剑客
关注
发布于 2018-05-23 16:02:47
544
0
发布于 2018-05-23 16:02:47
举报
文章被收录于专栏:
逍遥剑客的游戏开发
逍遥剑客的游戏开发
C++/CLI只能使用MD/MDd的运行库, 所以N3的编译选项需要改一下. 可以在makeslnwin32.tcl里改, 然后重新生成所有的工程文件.
N3的System命名空间与.Net的冲突. 主要是byteorder.h这个头文件里的Math命名空间, 改成"::Math"或"using namespace Math"都可以. Input之类的同理.
编译时有些代码(估计是内联部分)会提示无法编译成托管代码, 只需要把#include用#pragma unmanaged/#pragma managed包起来
XNAMath的对齐数据会无法编译成托管代码, 会有一个警告, 工程设置里忽略就可以.
WPF没有所谓的主循环, 所以Appcliation的Run方法就不能用了. 所以UpdateXXX之类的方法需要开放给外部调用.
为了不段地更新引擎, Update/Render之类的方法需要有个地方调用. 临时使用的是CompositionTarget.Rendering这个事件, 大约60FPS的样子. ComponentDispatcher.ThreadIdle可能是更好的解决方法, 我还没搞明白怎么用.
WPF不再使用HWND来做控件, 所以DX要跟WPF结合的话只能使用HwndHost. BuildWindowCore转入的hwndParent做为DisplayDevice的父窗口句柄.
BuildWindowCore在MSDN里有个说明: "The child window will be created only if the window is owned by the calling thread." 而N3的DisplayDevice是在渲染线程创建的窗口, 所以需要把窗口的创建改到主线程.
由于窗口在主线程创建, 那么Win32DisplayDevice::WndPro也需要在HwndHost::WndProc中实现一遍. 要不然所有的输入消息都没法在InputServer中得到处理.
键盘消息的处理比较麻烦. 看看是不是应该切换焦点, 还是重写HwndHost的函数来处理.
本文参与
腾讯云自媒体分享计划
,分享自作者个人站点/博客。
原始发表:2010年09月24日,如有侵权请联系
cloudcommunity@tencent.com
删除
前往查看
其他
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体分享计划
,欢迎热爱写作的你一起参与!
其他
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
关注
文章
0
获赞
0
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐