热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

游戏编辑器框架教程

if(NULL==lpBitMapBuffer)//如果没有读入成功,退出程序 { Msg





if(NULL==lpBitMapBuffer)//如果没有读入成功,退出程序


{


Msg("无法装入位图,演示无法进行");


exit(-2);


}


//读入成功就复制到后台缓冲去


lpBackBuffer->BltFast(0,0,lpBitMapBuffer,&(CRect(0,0,200,200)),FALSE);

你可以看到代码中指定的位图文件名是test.bmp,所以你也需要一个这样文件名的位图文件,在下面的源码包里附有一个,如果你想换一个文件也可以,不过这个文件以后将用于演示动画的例子。

第二个例子完,需要的话请下载源码
GameEdit2.zip


三、与GDI结合:

上面的两个例子的源码中没有包含资源文件,所以在使用的时候请先按照上面提到的方法建立自己的简单MFC单文档程序,再将源码文件替换你自己的文件再编译。

在第二个例子中,读入了一幅位图并显示在窗口的左上角。这在程序运行中没有任何问题,而且速度还相当快。但如果你同时运行了其他程序,或者将窗口移动到屏幕的边缘位置,会出现一些不正常现象。如果将窗口移动到屏幕边缘,在从后台到前台进行传送的时候,会发生非常矩形错误,意思是指你试图将页面传送到屏幕区域外,也就是前缓冲以外(前面说过,前缓冲与屏幕大小是一样的)。其结果并不会使你的程序当机,只是这次传送不会进行。另外,当你用其他程序的窗口盖住本程序窗口并移动上面的窗口的时候,本窗口的刷新可能导致将位图盖在其他窗口区域内。这是个严重的问题,在编写全屏幕程序的时候不会发生这种情况,因为屏幕被你的程序独占了,而在编写窗口程序的时候,你的程序就会显示非常差劲。

要解决上面的问题,一个办法是当程序失去焦点的时候,你就禁止将位图从后缓冲传送到前缓冲,当重新获得焦点的时候,再恢复位图传送。但有时候这样不理想,比如你在进行程序或者游戏的时候,同时发ICQ的信息,虽然ICQ占的屏幕面积不大,还是会导致你的程序停止更新画面,而如果你在游戏中此时正在紧张而且随时需要你干预的话,程序看起来就非常不友好。

另一个办法是与GDI结合,与GID结合会导致在图像速度上有微小的下降,但会使你的程序看来非常自然。其实方法也非常简单,就是获取后台缓冲的HDC,然后用HDC的BitBlt方法将后台缓冲复制给窗口CDC,可以将OnDraw中的BltFast的方法修改为:

HDC hdc;

lpBackBuffer->GetDC(&hdc);

//获得后台缓冲的HDC

::BitBlt(pDC->m_hDC,0,0,100,100,hdc,0,0,SRCCOPY);

//将后台缓冲的图片传送到窗口DC

lpBackBuffer->ReleaseDC(hdc);

//不要忘了用完后释放HDC,否则会出错

为了与HDC匹配,所以使用pDC的成员m_hDC。BitBlt的具体用法可以看一下帮助文件。使用这个办法以后,无论你将窗口移动到什么位置,以及无论你用什么窗口盖住程序的窗口,都不会有任何不正常的现象发生。它唯一的缺点就是比BltFast慢一点点。因为DC的处理方法是分几次进行,第一次复制到一个DC自己的后台缓冲,然后根据窗口的合法区域分一次或多次复制到屏幕。所以这个方法适用于制作编辑器以及对速度不是极度敏感的游戏。如果要达到最高速度,当然是非全屏幕模式莫属。

 





Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3405




游戏编辑器框架教程




推荐阅读
  • 本文讨论了在PHP中将空格转换为问号的问题,并提供了解决方案。文章指出,空格不是标准的空格,而是特殊的0xC2 0xA0字符。作者尝试使用mb_convert_encoding函数将utf8字符串转换为gbk编码,但未成功。文章建议检查编辑器是否对空格进行了特殊处理,并提供了使用base64_encode函数打印结果的方法。最后,给出了完整的代码示例。 ... [详细]
  • 本文详细介绍了Vim编辑器中的三种模式(命令模式、末行模式和编辑模式)以及它们之间的操作区别和切换方法。Vim编辑器凭借其多种命令快捷键和高效率的操作方式,得到了广大厂商和用户的认可。对于想要高效操作文本的用户来说,了解这些模式的使用方法是必不可少的。 ... [详细]
  • 使用chrome编辑器实现网页截图功能的方法
    本文介绍了在chrome浏览器中使用编辑器实现网页截图功能的方法。通过在地址栏中输入特定命令,打开控制台并调用命令面板,用户可以方便地进行网页截图操作。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • wordpress的内页悬浮选项卡功能预览及使用方法介绍
    本文介绍了wordpress的内页悬浮选项卡功能,包括功能预览和使用方法。用户可以自定义切换按钮,设置锚点信息区域,灵活多变且无需代码编辑。文章可以统一设置按钮,也可以独立设置单篇文章的按钮,滚动模式下按钮以滑动形式展示,具有条理性和锚点属性,有利于SEO。滚动效果增加了网站的互动性,让用户参与互动,同时完全兼容手机,使信息展示更清晰。 ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
  • 本文介绍了常用的编辑器快捷键,包括快速转换编辑器、浏览选项卡、提取本地变量和方法、编辑器窗口最大化等功能。通过使用这些快捷键,可以提高编辑器的使用效率,减少复杂度,并提升代码的可测试性。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • 一、修改注册表去掉桌面图标小箭头1按下win+R组合快捷键,打开windows10系统的“运行”窗口,输入“regedit”,打开注册表编辑器,找到HKEY_CLASSES_ROOT\lnkfi ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • Navicat premium乱码解决
    今天打开NavicatPremium,突然中文都变成乱码了,如下所示。我的版本是12.0.24(64-bit)Premium ... [详细]
  • 编码_QML 编码约定
    本文由编程笔记#小编为大家整理,主要介绍了QML编码约定相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
荆州房产网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有