
游戏开发
dadalan
这个作者很懒,什么都没留下…
展开
-
明智地使用私有继承
明智地使用私有继承条款35说明,C++将公有继承视为 "是一个" 的关系。它是通过这个例子来证实的:假如某个类层次结构中,Student类从Person类公有继承,为了使某个函数成功调用,编译器可以在必要时隐式地将Student转换为Person。这个例子很值得再看一遍,只是现在,公有继承换成了私有继承:class Person { ... };class Student:原创 2009-08-24 18:45:00 · 601 阅读 · 0 评论 -
d3d像素雾化
Using Pixel Fog<br />Use the following steps to enable pixel fog in your application.Enable fog blending by setting the D3DRS_FOGENABLE render state to TRUE. Set the desired fog color in the D3DRS_FOGCOLOR render state. Choose the fog formula to use by set原创 2010-06-25 13:57:00 · 1298 阅读 · 0 评论 -
Direct3D顶点坐标变换
<br />开始的话:顶点坐标变换时Direct3D学习中的入门基础,在这里将详述其原理:<br />Direct3D中渲染三维对象的过程分为两个阶段:《1》T&L(Transforming and Lighting),即坐标变换和光照;<br /> 《2》光栅化处理阶段。<br /> <br />一,T&L流水线:<br /> 如下图:<br />原创 2010-06-29 18:19:00 · 3719 阅读 · 0 评论 -
创建灵活的摄象机
<br />通过鼠标活动改变vLookatPt(x,y,z)中的xyz<br />从而改变观察矩阵。<br />D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec )原创 2010-06-30 14:48:00 · 639 阅读 · 0 评论 -
The Direct3D Transformation Pipeline
Introduction<br />This white paper provides a technical explanation for Direct3D application developers on how to set the parameters of the Direct3D Transformation Pipeline by the direct manipulation of Direct3D matrices.Overview<br />Direct3D uses three t原创 2010-06-29 19:04:00 · 1652 阅读 · 0 评论 -
实现委托
<br />#include <iostream>using namespace std;template <class T>class A{private: typedef int (T::*delegateFun)(int); T * _This; delegateFun _deleGate;public: //This是被代理的对象, delegateFun是被代理的方法 A(T * This, delegateFun delegatef)原创 2010-06-30 14:18:00 · 730 阅读 · 0 评论 -
参数方程
<br />定义 <br />在给定的平面直角坐标系中,如果曲线上任意一点的坐标x,y都是某个变数t的函数x=f(t),y=φ(t),(1)且对于t的每一个允许值,由方程组(1)所确定的点m(x,y)都在这条曲线上,那么方程组(1)称为这条曲线的参数方程,联系x、y之间关系的变数称为参变数,简称参数。类似地,也有曲线的极坐标参数方程ρ=f(t),θ=g(t)。(2) <br /> 圆的参数方程 x=a+r cosθ y=b+r sinθ (θ属于[0,2π) ) (a,b)为圆心坐标 r为圆半径 θ为参原创 2010-07-05 13:33:00 · 1964 阅读 · 0 评论 -
使用PeekMessage后,调用postquitmessage(0)不能退出消息循环的原因
<br />如果使用PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE),当调用postquitmessage(0)后,窗口被关闭,此时hwnd已经无效,那么PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)将会获取到一个0xa1的消息,这个消息不等于MSG_QUIT, 所以不会跳出循环,正确的做法是<br />PeekMessage(&msg, 0, 0, 0, PM_REMOVE)原创 2010-07-07 16:56:00 · 3220 阅读 · 2 评论 -
D3DXPLANE平面的构造
<br />typedef struct D3DXPLANE<br />{<br />#ifdef __cplusplus<br />public:<br />D3DXPLANE() {}<br />D3DXPLANE( CONST FLOAT* );<br />D3DXPLANE( CONST D3DXFLOAT16* );<br />D3DXPLANE( FLOAT a, FLOAT b, FLOAT c, FLOAT d );<br />// casting<br />operator FLOAT*原创 2010-07-09 13:36:00 · 2343 阅读 · 0 评论 -
SetRenderState很耗资源,请放入init3D函数中
<br /> g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);<br /> g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);<br /> <br />耗资源,而且只需要对设备设置一次就起到效果,所以放到初始化d3d 设备的函数中。原创 2010-06-16 14:26:00 · 1074 阅读 · 0 评论 -
AfxEnableControlContainer()
要想在应用程序中使用ActiveX控件,必须使你的应用程序成为ActiveX控件包容器。ActiveX 控件包容器就是完全支持ActiveX控件,并能把控件组合进自己的窗口或对话框的父应用程序。利用MFC的AppWizard,你可以很方便地创建你的包容器程序。事实上,在用AppWizard创建新的应用程序时,你的应用程序就被缺省设置为控件包容器,即在第3步选中支持ActiveX Contr原创 2009-09-27 23:49:00 · 19218 阅读 · 2 评论 -
Using ActiveX Controls with MFC
Using ActiveX Controls with MFCContentsIntroduction. Creating a Wrapper for the ActiveX Control. Responding to ActiveX Events. Serializing IntroductionYou may use ActiveX controls in原创 2009-09-26 23:55:00 · 1902 阅读 · 0 评论 -
测试下空类的大小
#include #include #include #include #include #include using namespace std;#pragma pack(push)#pragma pack(1)template class Singleton{};class CMatchListMgr: public Singleton{};int main( )原创 2009-09-14 20:54:00 · 621 阅读 · 0 评论 -
联合的使用
联合用法举例; struct table { int pp; char tt[20]; }; struct list { char name; char password; }; struct All { int原创 2009-08-28 19:24:00 · 714 阅读 · 0 评论 -
ENUM在结构体中占用空间吗
今天在调试网络问题时,突然想到了动态数据包,要用到enum来区分不同的数据包。此时想到一个问题"ENUM在结构体中占用空间吗" 于是我写了段代码测试了一下struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, TAG_ID_3}; int a; int b;};void main(){原创 2009-08-28 16:03:00 · 5077 阅读 · 6 评论 -
ENUM在结构体中占用空间吗(2)
写了上面一篇后,仍然意犹未尽,想测试下函数,虚函数,当然,从书本上我早知道普通函数不占结构体空间,虚函数有个虚函数指针占四个自己的空间。但是我都是从书本上看到的,一直以来没有真正去测试过。 #include #include #include struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, T原创 2009-08-28 16:21:00 · 1680 阅读 · 0 评论 -
union 联合体的测试
一直以来很像tcp一样,做可变长的网络数据包,为此自己写了一些很有意思的测试代码,想了解联合体的朋友,不妨从我这里拷过去自己亲自调试调试。#include #include #include struct Msg_t{ char a; int b; int c;};struct Msg_b{ char a; char b; char c; char d;};struct stU{ in原创 2009-08-28 19:42:00 · 889 阅读 · 0 评论 -
变长数据结构
struct dirent{..............char a[1];}在这里char a[1];长度为1,一般认为作为字符数组只能存放/0,但在这里a[1]声明是放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:[Copy to clipboard] [ - ]CODE: struct dirent{ int len; char a[0];};原创 2009-08-28 21:50:00 · 2193 阅读 · 0 评论 -
测试一下bit位的用法
#include #include #include struct A{ int a: 8; int b: 8; int c: 8; int d: 7; int e: 1;};int main(){ A xxa; memset(&xxa, 0, sizeof(A)); cout return 0;}原创 2009-09-13 18:28:00 · 1114 阅读 · 0 评论 -
pragma pack用法
#include #include #include #include using namespace std;#include #include #pragma pack(push)#pragma pack(1)typedef struct YOUR{ int sd :2; char cTsd[2]; int ss :7;}_YOUR; int原创 2009-09-14 00:45:00 · 1426 阅读 · 0 评论 -
template 配合sigleton使用
#include #include template class Singleton{ static T* ms_Singleton;public: Singleton( void ) { assert( !ms_Singleton ); int offset = (int)(T*)1 - (int)(Singleton *)(T*)1;原创 2009-09-13 18:13:00 · 631 阅读 · 0 评论 -
测试下这个类的大小
#include #pragma pack(push)#pragma pack(1)class CMsgMatchProcess{ enum { TYPE_MATCH_BEGIN = 0, TYPE_MATCH_END = 1, TYPE_MATCH_REGOIN_BEGIN = 2, }; enum { GAME_TYPE_MJ = 0,};private: typedef原创 2009-09-14 20:25:00 · 583 阅读 · 0 评论 -
d3d实现一个旋转的三菱椎
<br />#include "d3d9.h"<br />#include "d3dx9math.h"<br />#pragma comment(lib,"d3d9.lib") <br />#pragma comment(lib,"d3dx9.lib") <br />#pragma comment(lib, "winmm.lib") <br />LPDIRECT3D9 g_pD3D = NULL;//Direct3D¶ÔÏó<br />LPDIRECT3DDEVICE9 g_pd3dDevice =原创 2010-06-16 14:55:00 · 2347 阅读 · 0 评论 -
3d透视投影函数的理解
<br />转自http://blog.youkuaiyun.com/hhzczhh/archive/2010/06/15/5671563.aspx原创 2010-06-15 15:54:00 · 768 阅读 · 0 评论 -
d3d为什么不能显示正反面
<br />如果没加 g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); 会导致看不到正反面,所以如果没有旋转那么此时将看不到任何东西,因为看不到正面或者反面。原创 2010-06-16 14:23:00 · 745 阅读 · 0 评论 -
d3d旋转分解
<br />D3D是通过Device的SetTransform来设置世界变换矩阵的。物体默认是在D3D的世界坐标原点上。如果我们要把它做一些变换再显示出来,就要计算一个该物体的世界矩阵matWorld,再调用Device的SetTransform(D3DTS_WORLD,&matWorld),来变换他的位置。<br />位移好说,用一个D3DXMatrixTranslation就能统统搞定,关键是旋转。D3D的所有旋转函数所围绕的轴都是穿过原点的,所以如果我们要空间中任意轴旋转,就要和位移配合起来做。<br原创 2010-06-23 17:09:00 · 3662 阅读 · 1 评论 -
初识A*算法
初识A*算法 写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里抛砖引玉,希望大家都来热心的参与。 还是说正题,我先拿A*算法开刀,是因为A*在游戏中有它很典型的用法,是人工智能在游戏中的代表。 A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚A*算法,我看还是先说说何谓启发式算法。一、何谓启发式搜索算法 在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是在解原创 2010-08-26 21:38:00 · 2218 阅读 · 0 评论 -
深入A*算法
<br />http://creativesoft.home.shangdu.net/AStart2.htm#1.0原创 2010-08-26 22:07:00 · 2331 阅读 · 0 评论 -
D3D来实现2D的效果 的方法
<br />很多D3D的初学者最感到困惑的问题是如何用D3D来实现2D的效果,因为DirectDraw已经不存在了(当然你还是可以用以前的版本的,但是可能不法利用一些最近的硬件加速)在这里我给大家介绍几种方法可以实现用D3D编写2D游戏 <br /> <br />方法一:<br />使用D3DX的接口ID3DXSprite,<br />void DrawSprite_2D( <br /> int dx,//窗口中的X座标<br /> int dy,//窗口中的Y座标<br />原创 2010-10-18 22:15:00 · 4990 阅读 · 1 评论 -
[iPhone] 观察者模式与游戏开发
简介 三月份的时候,我接到一个IPhone游戏项目的开发,为了这个游戏,我学习了观察者模式,并使用它在我的游戏里 背景 在我的游戏中,我设计的GameScene来当作游戏关卡的上层类。背景<br />在我的游戏中,我设计的GameScene来当作游戏关卡的上层类。它继承Observable,利用GameRole来实践游戏角色,像是Player跟NPC。GameRole则实践Observer,利用观察者模式来实践关卡中的角色的更新。<br /><br />代码如下<br /><br /> 1. class原创 2010-10-19 13:30:00 · 2449 阅读 · 0 评论 -
DrawPrimitiveUP 与 DrawPrimitive
<br />在D3D中,一共有三种基本图元,分别是点、线和三角形。点是最简单的图元,由它可以构成一种叫点列(point list)的图元类型。线是由两个不重合的点构成的,一些不相连的线组成的集合就叫线列(line list),而一些首尾相连但不形成环路的线的集合就叫线带(line strips)。同理,单独的三角形集合就叫三角形列(triangle list),类似于线带的三角形集合就叫三角形带(triangle strips),另外,如果多个三角形共用一个顶点作为它们的一个顶点的话,那么这个集合就叫三角形原创 2010-10-18 19:33:00 · 2905 阅读 · 1 评论 -
Lua脚本在C++下的舞步(一)
现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或帮你查看别的玩家或者NPC的状态。。。如此等等。<br /><br />但是我觉得,其实脚本语言与C++的结合,远远比你在游戏中看到的特效要来的迅猛。它可以运用到方方面面的领域,比如你最常见的应用领域。比如,你可以用文本编辑器,写一个脚本语言,然后用你的程序加载一下,就会产生出很绚丽的界面。亦或一两句文本语言,原创 2010-10-19 21:57:00 · 2677 阅读 · 1 评论 -
一个监听器模式的消息管理器实现
消息管理器是用来在各个实体对象和功能模块之间进行数据通信的.一个好的消息管理器可以最大限度的实现解藕操作,使得模块具有"热插拔"特性,这是我们所希望达到效果.但是在实现的过程中有几点细节实现需要仔细斟酌,比如消息管理与分发的方式,如何实现一个通用的支持动态更新的消息管理器.下面是我学习根据自身经验实现的一个消息管理器,希望能够抛砖引玉,共同提高 :) 基本思路: 1. 面向接口编程: 实现一个IMsgListener抽象接口类,所有需要消息处理的类都需要从该接口类原创 2010-10-22 21:19:00 · 3773 阅读 · 1 评论 -
DirectInput 键盘编程
DirectInput 键盘编程入门 游戏编程可不仅仅是图形程序的开发工作,实际上包含了许多方面,本文所要讲述的就是关于如何使用 DirectInput 来对键盘编程的问题。 在 DOS 时代,我们一般都习惯于接管键盘中断来加入自己的处理代码。但这一套生存方式在万恶的 Windows 社会下是行原创 2012-02-18 22:29:40 · 3343 阅读 · 0 评论 -
浮点数四舍五入最简洁的办法。
<br />float x=5.2;<br />int n;<br /> <br />n= int(x+0.5);原创 2010-06-23 22:43:00 · 1441 阅读 · 1 评论 -
关于3d旋转
<br />3d游戏中涉及到很多旋转,但是在计算旋转矩阵时,点的旋转要转化为向量的旋转来计算,而向量的旋转要从三维坐标转化为二维坐标来计算。原创 2010-06-20 22:55:00 · 879 阅读 · 0 评论 -
D3DXVec3Cross运算的意义
D3DXVECTOR3 *D3DXVec3Cross( <br /><br /> D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2);通过差积运算得到一个垂直于pV1, pV2的向量。此向量垂直于pV1, pV2.原创 2010-06-20 17:27:00 · 4307 阅读 · 0 评论 -
为什么看到的三角形是黑的
<br />如果开了灯光,但是又没有设置材质,此时的三角形会是黑的,所以需要关闭灯光。<br />g_pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);原创 2010-06-16 14:24:00 · 771 阅读 · 0 评论 -
CheckDeviceType的作用
<br />HRESULT CheckDeviceType( <br /><br /> UINT Adapter,<br /> D3DDEVTYPE DeviceType,<br /> D3DFORMAT DisplayFormat,<br /> D3DFORMAT BackBufferFormat,<br /> BOOL Windowed<br />);<br /> <br />CheckDeviceType用来检查是否有匹配的显卡驱动支持该DisplayForma原创 2010-06-16 16:41:00 · 2081 阅读 · 0 评论 -
d3d 画旋转方棱椎与六面体
<br /> //ÏÂÃæÊdzÌÐòËùÐèÒªµÄincludeÎļþ£¬µÚÒ»¸öincludeÊÇÊÓ´°Ëù±ØÐëµÄ£¬ //µÚ¶þ¸öÊÇDirect3D 8Ëù±ØÐëµÄ¡£ #include <WINDOWS.H> #include <D3DX8.H> HWND hWnd; HDC hDC; HINSTANCE hInstance; //µÃµ½³ÌÐòµÄÀý×Ó原创 2010-06-16 17:41:00 · 1405 阅读 · 0 评论