随笔分类 - 【Visual C++】
摘要:最近有朋友在下载了我的专栏“【Visual C++】游戏开发”里某一节笔记的源代码之后,发觉一个问题:他们的IDE是VS2008,而我提供的源代码都是注明在VS2010下运行。于是我发表这篇博文,希望能对想解决这个问题的朋友有所帮助。当用VS2010打开VS2008解决方案(sln文件)或项目(csproj文件或vbproj文件等)时,VS2010会提示需要进行升级转换。反之,如果用VS2008打开VS2010的解决方案文件,会提示此sln是新版本的VS创建,无法打开;如果打开项目,会有安全警告,但可以打开。有时候,你可能又想用VS2008打开VS2010的解决方案,比如你的机器还没有装VS2
阅读全文
摘要:最近有朋友在编译我提供的【Visual C++】游戏开发某一节笔记的源代码的时候,提到出现“fatal error C1083:无法打开包括文件:“StdAfx.h”这个错误。这里我专门找了点资料,然后部分修改,写成了一篇博文发出来,希望能对出现这个问题的朋友们有所帮助。这个错误大都是由于预编译头文件及#include<stdafx.h>这两者的关系纠缠不清引起的,呵呵。这里我们采用vs2010讲解,其他版本其实操作方案也差不多。1、如果在Visual C++工程的.cpp文件中包含了代码#include<stdafx.h>,则工程就需要将属性设置为:“使用预编译头”,
阅读全文
摘要:BitBlt该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。原型:BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);参数: hdcDest:指向目标设备环境的句柄。nXDest、nYDest:指定目标矩形区域左上角的X轴和Y轴逻辑坐标nWidth、nHeight:指定源和目标矩形区域的逻辑宽度和逻辑高度。hdcSrc:指向源设备环境的句柄。nXSrc、nYS
阅读全文
摘要:CDC是MFC的DC的一个类HDC是DC的句柄,API中的一个类似指针的数据类型.MFC类的前缀都是C开头的H开头的大多数是句柄这是为了助记,是编程读\写代码的好的习惯.CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派生类).CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄.记住下面的一句话,会有助于你的理解.MFC的类,是在用window API语句开发出来的有一定功能的小程序.(也可称为类).使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记).如果将window api比做汇编语言那么MFC就
阅读全文
摘要:一般的windows复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,这样就会感觉闪烁了。解决方法:尽量快的输出图像,使输出在一个刷新周期
阅读全文
摘要:我们常常听闻AI(ArtificialIntelligence人工智能)这个名词,比如Dota里面的AI地图。写这篇文章的时候,最新版的DotaAI是6.72f,估计过几天6.73的AI也要出来了。很多Dota玩家喜欢玩AI地图练练感觉和补刀,可以这样说,Dota地图成功的加入了AI元素,是近几年Dota风靡全球不可缺少的因素之一。一、知识点讲解那么,到底什么是AI呢?首先我们来了解一下人工智能(AI)的具体定义。“人工智能”(ArtificialIntelligence)简称AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能研究如何用计算
阅读全文
摘要:我们知道,VisualC++中的CBitmap类的功能简直太弱小了,这曾经让Visual C++在图像处理方面的功能比较尴尬。之前笔记里面,我们采用的CBitmap配合GDI进行透明图像的处理有些晦涩繁琐,而且受到图像素材的限制,可以说是有些落后,不是太实用。为了解决这个问题,这节笔记我们将系统的学习MFC和ATL中新增一个图像处理的类,它就是华丽而强大的CImage类。由于本节笔记是对CImage类的一个非常系统近乎完全的介绍,我尽量让它涵盖到了CImage类的所有的属性和类成员,所以篇幅也许比以往的笔记内容都长,里面的不少内容是用到的时候才需要掌握或者查阅的,并不用强行记忆。一,概念讲解部
阅读全文
摘要:上一节我们讲解了键盘消息处理相关的知识。键盘加鼠标作为目前人机交互方式依旧的主流,在讲完键盘消息处理之后接着讲鼠标消息处理,自然是理所当然的。这一节主要介绍各种鼠标消息的处理方式以及一些相关函数的运用方法,然后用一个小实例来巩固本节所学。一,鼠标消息的处理方式大家都知道,目前市场上主流鼠标规格为两个按键加上一个滚轮。那么,我们先列出Windows中这种鼠标设备输入时的消息:WM_LBUTTONDBLCLK双击鼠标左键消息WM_LBUTTONDOWN单击鼠标左键消息WM_LBUTTONUP松开鼠标左键消息WM_MBUTTONDBLCLK双击鼠标中键(滚轮)消息WM_MBUTTONDOWN单击鼠标
阅读全文
摘要:相信大家都熟悉《仙剑奇侠传98柔情版》的人机交互方式,用的仅仅是键盘。在那个物质并不充裕的时代,一台配置并不高的电脑,一款名叫《仙剑奇侠传》的游戏,却能承载一代人对梦想的追逐。虽然在这十几年间,各种新潮的游戏层出不穷,但是《仙剑奇侠传98柔情版》,作为国产单机游戏无法被超越的传奇,已经永远留在了我们这代人的心中。那是一个永远无法被取代的,最最唯美的梦。从这节笔记开始,我们就开始讲解游戏输入消息的处理,开始人机交互,开始真正意义上的游戏开发。这一节里我们主要讲解键盘消息的处理。键盘作为基本的输出装置,在每一款优秀的游戏研发中都有着至关重要的地位(当然我们在这里暂时不讨论ios和android平台
阅读全文
摘要:“排序贴图”是源自于物体远近呈现的一种贴图概念。回忆我们之前笔记的贴图思想,先进行距离比较远的物体的贴图操作,然后再进行近距离物体的贴图操作,一旦定出贴图的顺序之后就无法再改变了。然而这样的作法在画面上物体会彼此遮掩的情况下就会不适用。也许会出现后面的物体反而遮住了前面的物体的这种不协调的画面。为了避免这种因为贴图顺序而固定而产生的错误画面,必须在每一次窗口重新显示时动态地重新决定画面上每一个物体的贴图顺序。那么,如何动态决定贴图顺序呢?我们可以采用排序的方式。为了演示排序如何运用在贴图中,我们举一个例子。假设现在有10只要进行贴图的小牛图案,先把它存在一个数组之中,从2D平面的远近角度来看,
阅读全文
摘要:"透明动画”是游戏中一定会用到的基本技巧,它通过图案的连续显示及图案本身背景的透明化处理,在背景图上产生出栩栩如生的动画效果。看过之前笔记的朋友们应该知道,在笔记六里我们介绍了使位图背景透明的方法,在笔记八里我们讲解了使用游戏循环显示动画的技巧,而这节笔记的内容,刚好是两者的一个综合。如果有没看过之前笔记系列的朋友,为了便于理解本节的内容,可以先浏览一下之前的笔记六和笔记八,下面我给出链接。【VisualC++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法【VisualC++】游戏开发笔记之八——基础动画显示(二)游戏循环的使用为了实现透明动画的效果,我们采用了一个如下图
阅读全文
摘要:本系列文章由zhmxy555编写,转载请注明出处。http://blog.csdn.net/zhmxy555/article/details/7364697作者:毛星云邮箱:happylifemxy@qq.com欢迎邮件交流编程心得地图是游戏元素里面不可缺少的一部分,要产生游戏地图,除了可以直接使用已经绘制好的位图外,对于一些画面不太复杂,并且具有重复性质的地图或场景,有一个比较好的解决方法,那就是利用地图拼接,将一小块一小块的小地图组合成较大的地图。地图拼接的有点在于节省系统资源,因为一张大型的地图会占用比较多的内存空间,且加载速度较慢,如果游戏中使用了为数较多的大型地图,那么势必会降低程序
阅读全文
摘要:在笔记七中我们讲解了用定时器来产生动画的效果。定时器的使用固然简单方便,但是事实上这样的方法仅适合用在显示简易动画及小型的游戏程序中。因为一般而言,游戏本身需要显示顺畅的游戏画面,使玩家感觉不到延迟的状态。基本游戏画面必须在一秒钟之内更新至少25次以上,这一秒钟内程序还必须进行消息的处理和大量数学运算甚至音效的输出等操作。而使用定时器的消息来驱动这些操作,往往达不到所要求的标准,不然就会产生画面显示不顺畅和游戏响应时间太长的情况。这里我们提出一种游戏循环的概念,游戏循环是将原先程序中的消息循环加以修改,方法是判断其中的内容目前是否有要处理的消息,如果有则进行处理,否则按照设定的时间间隔来重绘画
阅读全文
摘要:本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7343337作者:毛星云邮箱:happylifemxy@qq.com欢迎邮件交流编程心得定时器的使用定时器(Timer)对象可以每隔一段时间发出一个时间消息,程序一旦接收到此消息之后,便可以决定接下来要做哪些事情。这样的一个特性刚好可以适合播放静态的连续图片,产生动画的效果。下面来介绍如何建立与使用定时器。<1>建立定时器WindowsAPI的SetTimer()函数可为窗口建立一个定时器,并说每隔一段时间就发出WM_TIMER消息,此函
阅读全文
摘要:本系列文章由zhmxy555编写,转载请注明出处。http://blog.csdn.net/zhmxy555/article/details/7338082作者:毛星云邮箱:happylifemxy@qq.com欢迎邮件交流编程心得从这节开始我们来讲解制作一般2D游戏画面经常要使用到的绘图特效。笔记六我们主要介绍“透明”特效的制作方法。透明效果由于所有的图文件都是以矩形来储存的,我们也许会需要把一张怪兽图片贴到窗口的背景图上,而这种情况下如果直接进行贴图,结果如下图:这似乎不是我们想要的结果。为了得到透明效果,我们需要运用到BitBlt()贴图函数以及其参数Raster的值来将图片中不必要的部
阅读全文
摘要:本系列文章由zhmxy555编写,转载请注明出处。http://blog.csdn.net/zhmxy555/article/details/7335103作者:毛星云邮箱:happylifemxy@qq.com欢迎邮件交流编程心得以游戏文件来说,使用的位图数量相当多,因此都会先将位图存成文件,等到程序需要时再将文件加载到窗口中。将位图从文件加载带绘图窗口中必须经过一下几个步骤。<1>从文件中加载位图对象<2>建立一个与窗口DC兼容的内存DC<3>内存DC只用步骤1中所建立的位图对象<4>将内存DC的内容粘贴到窗口DC中,完成显像操作。下面进行这
阅读全文