77范文网 - 专业文章范例文档资料分享平台

游戏编程文章搜集资料(3)

来源:网络收集 时间:2019-04-13 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

} } }

return S_OK; }

请注意,上面的这段代码只是一个示例,重在使你明白其原理,但并不能满足游戏的需求,因为这其中只查询了一次键盘的全部信息,做了一次轮循,而在游戏中要周期性地查询,并轮循,这就需要你自己用Win32 API函数 SetTimer和 KillTimer 设置初始化 DirectInput 对象函数中在相应的地方设置计计时器,让windows定时向程序发送 WM_TIMER消息,你要通过此消息进行周期性地键盘查询,并在相应的地方解除计时器。

最后一个函数是用于释放指针或DirectInput对象的

void ReleaseDInput(void) {

if (lpDirectInput) {

if(lpKeyboard) {

// Always unacquire the device before calling Release(). lpKeyboard->Unacquire(); lpKeyboard->Release(); lpKeyboard = NULL; }

lpDirectInput->Release(); lpDirectInput = NULL; } }

在这些函数中的注释很明确,关键在于理解其原理,而怎样将他们融入到 Win32 API 程序的基本框架中的,在<<动画程序编写——DirectDraw之旅>> 1-3中的示例代码中已经解释得很明确了,在此不再赘述。不过我们提供其中的代码示例下载。同时你也可以去仔细阅读DirectX 8.0 SDK 包中的 samples\\ multimedia\\ directdraw\\ fullscreenmode 或 \\ samples\\ multimedia\\ directdraw\\

windowedmode 这两个工程中的文件,因为为了我们的示例也是照这两个工程改编过来的,读者可以通过仔细阅读代码和对比我们的更改,而更加了解

DirectDraw的运行运行原理。(请注意:是 DirectX 8.0 SDK 包中的示例,而在 9.0 中 DirectX SDK 已经不提供 DirectDraw的示例代码了) 我们就用这七个函数就已经可以创造出一个小游戏了。

我们下面就要利用<<动画程序编写——DirectDraw之旅>> 1-3 中所用的代码进行进一部的游戏开发。

我们先展示一下 DirectX中\\ samples\\ multimedia\\ directdraw\\ windowedmode 工程中的截图

在这个动画中有黑色背景,并有很多 DirectX 精灵在漂浮。

这是一个全屏的动画程序,而我们在<<动画程序编写——DirectDraw之旅>> 1-3其中做的改动就是为其加了一个背景,改屏幕分辨率 640×480 为 1024×768.注意,因为我们应用的是全屏模式,即可以独占显存资源,所以我们可以更改屏幕的分辨率。这只是做的小小的改动,而我们的目的只在于让大家更加深入了解。且看下面的这副截图:

而我们还要继续深入编程,我们的思路是,先将程序由先前的全屏程序改编成一个windows的窗口程序,然后将其所有的界面翻新,并改编 DirectX精灵为许多小蘑菇在漂浮,还要加入DirectInput 的组建,用键盘控制一个小娃娃。可以上下左右,并可以斜向飞行。 我们先将此动画的截图展现给大家

怎么样,你有什么想法,是想说:“唉,这还不好办,就是又多加了一个!”,但不要光看截图,不要忘记,我们一定让她动起来,并且是可以控制的,这就不是那么简单的事了!

什么?若有人看到这里感到有些迷茫和泄气,不禁想问:“你说了这么多,那么源代码在那里呢!,光给我们几个函数,又能做什么呢?”,如果你这么想,你也不要太急迫。我们还是先分析一下程序框架吧。

不过,还有一件重要的事情,我还是要重申一边。一定要将 DirectX 的头文件价,和lib文件夹加入到 Visual C++.NET 的默认目录中去,这样编译器就可以正确地找到它们了。

如果你不会加入,就请通过工具栏上的 Tool -> Option? 打开Option 对话框,设置如图:

好了,这样我们的准备工作就算已经做好了。 来看看我们的工程文件结构吧,还有工程中的资源。

在工程资源中我们的 ID 号是都用的字符串表示的,笔者认为这样更加方便。 我想对于工程文件中的 ddutil.cpp 和 dxutil.cpp 文件,读者如果了解有些 DirectDraw编程是不会感到陌生的,我们只是将其引入到我们的工程中了。而我们自己实际编程的文件是 outfly.cpp 文件。

我们的程序叙述如下:

首先进行宏定义,结构设置,和全局变量的声明。

后在 WinMain (windows程序的入口点)中首先初始化一切需要初始化的物件(有windows窗口,DirectDraw对象,和 DirectInput对象),在此我们就调用前文讲过的函数,但要有写改动,读者在会在后面看到的。然后进入消息循环,在其中没有消息时,程序会自动更新画面,在有消息时处理消息。 当遇到 WM_QUIT 消息后,结束整个程序。

我们在一些地方有一些小小的改动,我们来看看吧。 1 我们在 HRESULT InitDirectInput( HWND hWnd ) 函数中的开始加入了

KillTimer( hWnd, 0 ); FreeDirectInput();

关掉上一次使用的计时器,并释放 DirectInput 设备。 而在最后加入了

SetTimer( hWnd, 0, 1000 / 100, NULL );

用来重新设置计时器。

2 我们在主窗口的消息处理函数中加入了

case WM_ACTIVATE: //当程序先失去焦点,而现在有重新得到焦点时,要重新锁定键盘资源

if( WA_INACTIVE != wParam && g_pKeyboard ) {

// Make sure the device is acquired, if we are gaining focus. g_pKeyboard->Acquire(); }

break;

case WM_TIMER: //因为设置了计时器所以要处理此消息 if( FAILED( ReadImmediateData( hWnd ) ) ) {

KillTimer( hWnd, 0 );

MessageBox( NULL, _T(\ _T(\

_T(\ }

break;

case WM_DESTROY:// Cleanup and close the app

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库游戏编程文章搜集资料(3)在线全文阅读。

游戏编程文章搜集资料(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/585864.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: