http://www.cppblog.com/gogoplayer/archive/2006/03/09/3943.html
平常开发
DirectX
游戏基本是用
SDK
或者
MFC
,关于两者的开发想必大家都有了很多的了解,但是基于
ActiveX
控件的
DirectX
游戏开发网上并不多见,近日有兴趣研究了一下,小有成果,不敢独享,小附文章,希望能起到抛砖引玉的功效。
我选用
WIN2K
+
VC6
+
DirectX8
作为开发平台,首先创建
MFC ActiveX ControlWizard
,假设工程名为
DIG
(因为在做一个名为
Digger
的游戏,故取此名)。编写
ActiveX
控件要求资源必须释放完全,要不他会给你各种各样的麻烦,错误提示框叮叮咚咚响,会让你感到这个世界都暗了,因此一定要注意资源的管理,实际上
C
++要求程序员对资源的管理本省就是很高的,算我多言了。
完成了这些步骤后,在初始化
DirectX
时我遇到了一个困难,无法取得
HWND
,没有这个怎么初始化
D3D
设备呢,在各个类中搜索了半天,终于在隐秘的地方发现了这个句柄,在
OnDraw
函数中的
CDC* pdc
可以间接得到这个句柄,
pdc->GetWindow()->m_hWnd
。
得到句柄后初始化
DirectX
设备,这里我选择了
ID3DXSprite
作为图形显示接口,它功能强大,操作简单,支持缩放、半透明、旋转等。因为
MFC
对
Windows
消息进行了封装,不能简单使用
SDK
那套消息处理程序(就是有消息处理消息,没消息渲染图形)。如果直接在
OnDraw
函数中执行渲染函数,编译后在
ActiveX Control Text Container
测试是可以发现,整个程序处于运行状态,但不能对
ActiveX
进行大小调节,并且对于
ActiveX Control Text Container
的所有操作都是极端滞后的,这样开发出来的
ActiveX
控件是没有意义的,所以对执行渲染的那个函数单独开一个线程是个不错的选择,用
CreateThread
函数创建线程,事实证明这种做法所得到的
FPS
还是很客观的,完全能满足在网页上直接插入
ActiveX
控件进行游戏,测试网页上的效果也是很容易的,打开
FrontPage
插入
ActiveX
控件,不需要一句代码就完全兼容,想象一下,这是不是很令人兴奋,从理论上说绝大部分基于
DirectX
的小游戏都可以做成
ActiveX
控件,其他的我没有试验,各位可以各自试验一下,有新的发现不要忘了告诉我
gogoplayer@163.com
,以下是相关的源代码,仅供参考。
HINSTANCE
g_hInst;
//
实例
HWND
g_hWnd;
//
句柄
CSSInput
g_threadInput;
//
输入设备
HANDLE
g_hThread;
DWORD
g_dwThreadID;
bool
g_bIsRunning;
bool
g_bIsInitialise;
CDIGCtrl
::
CDIGCtrl
()
{
InitializeIIDs(&IID_DDIG, &IID_DDIGEvents);
g_bIsInitialise =
false
;
// TODO: Initialize your control's instance data here.
}
/////////////////////////////////////////////////////////////////////////////
// CDIGCtrl::~CDIGCtrl - Destructor
CDIGCtrl
::~
CDIGCtrl
()
{
// TODO: Cleanup your control's instance data here.
//
释放
GameRelease
();
}
/////////////////////////////////////////////////////////////////////////////
// CDIGCtrl::OnDraw - Drawing function
//
渲染用线程
void
WINAPI
ListenThread
(
void
)
{
g_bIsRunning =
true
;
while
(g_bIsRunning ==
true
)
{
g_threadInput.
Capture
();
if
(g_threadInput.
IsUp
(DIK_ESCAPE))
g_bIsRunning =
false
;
Render
();
}
return
;
}
void
CDIGCtrl
::
OnDraw
(
CDC
* pdc,
const
CRect
& rcBounds,
const
CRect
& rcInvalid)
{
if
(g_bIsInitialise ==
false
)
{
g_hInst =
AfxGetInstanceHandle
();
g_hWnd = pdc->
GetWindow
()->m_hWnd;
InitGame
();
g_threadInput.
Create
(g_hInst, g_hWnd);
g_bIsInitialise =
true
;
g_hThread =
CreateThread
(NULL, 0, (
LPTHREAD_START_ROUTINE
)ListenThread, (
void
*)
this
, 0, &g_dwThreadID);
}
}
在文章的最后,我还用
VB
测试了这个
ActiveX
控件,效果很好,轻轻一划,一个窗体,一个控件,
0
行代码实现游戏,这感觉,爽。
分享到:
相关推荐
利用VB5开发ActiveX控件 45 , 45.txt 利用VB三维面板控件设计流动条 46 , 46.txt 浅谈用VB6.0编写BO程序 47 , 47.txt 巧用Visual Basic的TIMER控件 48 , 48.txt 取得控件绝对Top值 49 , 49.txt 如 何 解 决VB 中 的...
使用媒体控制接口(MCI) 使用MCIWnd窗口类 使用OpenGL DirectX编程 DLL的概念 动态链接库的创建 动态链接库的访问 创建ActiveX控件 测试和使用ActiveX控件 进程和线程 线程的管理和操作 线 程 通 信 线程同步 概 述...
基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...
big2gb.zip 一个BIG5码<=>GB码互换的完全免费的ActiveX控件(81KB) 20,capscreen.zip 这是一个屏幕拷贝的控件,可以实现全屏的拷贝并支持另存为位图类型的文件 (28KB) 21,digital.zip 能够以液晶...
组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...
极光软件 Voice Over Net 语音聊天组件 P2P 1.0版简介VON(Voice Over Net)语音聊天控件是为了简化网上语音聊天室开发过程而定制的,基于Microsoft ActiveX技术的ActiveX控件,语音清晰,支持各种网络带宽。...
基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...
基于VC_开发虚拟数字键盘ActiveX控件.pdf 基于VC_的1553B总线接口仿真软件设计.pdf 基于VC_的3G无线上网卡主功能设计与实现.pdf 基于VC_的DXF数据文件接口的研究.pdf 基于VC_的GoogleEarthKML地标文件的自动生成及...
DXVU Meter 2.0是一款ActiveX控件,可以监视任何音频设备,比如麦克,CD ROM等,并显示被监视的音频的波形,可作为标准的VU Meter或作为示波器。VU显示模式计算被监视音频的RMS值,并显示峰值。示波器模式则...
组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...
组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和...
AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...
AVCapture是一个基于Microsoft的DirectShow技术开发的音视频讯号捕捉ActiveX控件,支持模拟视频捕捉卡和1394/USB数字视频设备,它可以帮助那些准备开发音/视频捕捉相关软件的程序员快速获取和处理音/视频数据。...
使用DirectX8.1描绘控制的实时曲线,同时将实时数据显示在界面上,采用ActiveX技术封装用VB语言实现的控制算法,使得控制算法的添加变得简单易行。另外,还设计开发了一个网络接口,以便实现和wEB端通讯。所开发的...
// ActiveX Control Events Sink // IDispatch class CDHtmlElementEventSink; // IHTMLElement Events Sink // IDispatch class CExternalDispatchBase; template<class T> class CExternalDispatchImpl; // ...
10.集成了 Flash10 ActiveX 控件,带控制面板卸载。 11.未额外集成VB5/VB6/VC2005/VC2008运行库。 12.未额外集成DirectX运行库。为方便控制GHO体积,推荐在部署时静默安装DirectX。 13.未额外集成双核补丁,未...
DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...
DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...
DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...
DirectX 实例 DES加密算法源代码 Detected memory leaks 检查内存泄漏源码 DigiStatic_src 自绘CStatic实现数字效果。 DirectShow开发指南pdf附属代码 DirectShow开发指南源码 directUI_D DirectUI界面库 DOM...