- 博客(797)
- 资源 (3)
- 收藏
- 关注
原创 本人打算利用工作之余把一些好的游戏技术文章整理到(游戏技术论坛)(http://www.592xue.net/)
本人打算利用工作之余把一些好的游戏技术文章,这些文章主要是这几块:关于2d,3d的游戏客户端技术,游戏渲染,物理引擎,以及游戏服务端开发,策划文档等等。整理到(游戏技术论坛)(http://www.592xue.net/)
2012-04-30 12:31:10
4541
1
原创 DirectInput 键盘编程
DirectInput 键盘编程入门 游戏编程可不仅仅是图形程序的开发工作,实际上包含了许多方面,本文所要讲述的就是关于如何使用 DirectInput 来对键盘编程的问题。 在 DOS 时代,我们一般都习惯于接管键盘中断来加入自己的处理代码。但这一套生存方式在万恶的 Windows 社会下是行
2012-02-18 22:29:40
3343
原创 设置窗口背景透明
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|0x80000); typedef BOOL (WINAPI *FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD); FSetLayeredWindowAttributes
2011-12-29 10:26:12
3487
原创 一个监听器模式的消息管理器实现
消息管理器是用来在各个实体对象和功能模块之间进行数据通信的.一个好的消息管理器可以最大限度的实现解藕操作,使得模块具有"热插拔"特性,这是我们所希望达到效果.但是在实现的过程中有几点细节实现需要仔细斟酌,比如消息管理与分发的方式,如何实现一个通用的支持动态更新的消息管理器.下面是我学习根据自身经验实现的一个消息管理器,希望能够抛砖引玉,共同提高 :) 基本思路: 1. 面向接口编程: 实现一个IMsgListener抽象接口类,所有需要消息处理的类都需要从该接口类
2010-10-22 21:19:00
3773
1
原创 标准库和boost库中几个智能指针的比较
这些智能指针在设计的时候,一个关键的问题就是所有权的控制。如果把指针所指向的对象比作电视机的话,那么指针就是观众。第一个人需要看电视的时候需要打开它,没人看的时候就要保证把电视关掉。对于std::auto_ptr,boost::shared_ptr和scoped_ptr,情况如下:<br />1. std::auto_ptr:auto_ptr这个种族很有趣,每次只让一个人看电视,大家可以换着看,由最后那个不想看的人关掉。当把一个auto_ptr赋值给另一个时,就好比换一个人看电视似的。总之,电视只能一个人看
2010-10-22 20:50:00
3268
1
原创 uiwebview打开doc,pdf文件
<br />UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 55, 320, 300)];<br /> webView.delegate = self;<br /> webView.multipleTouchEnabled = YES;<br /> webView.scalesPageToFit = YES;<br /><br /> NSArray *paths = NSSearchPathForD
2010-10-22 16:27:00
9598
1
原创 Lua脚本在C++下的舞步(一)
现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮你完成某些任务,亦或帮你查看别的玩家或者NPC的状态。。。如此等等。<br /><br />但是我觉得,其实脚本语言与C++的结合,远远比你在游戏中看到的特效要来的迅猛。它可以运用到方方面面的领域,比如你最常见的应用领域。比如,你可以用文本编辑器,写一个脚本语言,然后用你的程序加载一下,就会产生出很绚丽的界面。亦或一两句文本语言,
2010-10-19 21:57:00
2677
1
原创 How do I pause my game?
Object[] objects =FindObjectsOfType(typeof(GameObject));foreach(GameObject go in objects){ go.SendMessage("OnPauseGame",SendMessageOptions.DontRequireReceiver);}<br />And to resume call OnResumeGame on all objects.<br />A basic script with movemen
2010-10-19 15:36:00
2347
原创 [iPhone] 观察者模式与游戏开发
简介 三月份的时候,我接到一个IPhone游戏项目的开发,为了这个游戏,我学习了观察者模式,并使用它在我的游戏里 背景 在我的游戏中,我设计的GameScene来当作游戏关卡的上层类。背景<br />在我的游戏中,我设计的GameScene来当作游戏关卡的上层类。它继承Observable,利用GameRole来实践游戏角色,像是Player跟NPC。GameRole则实践Observer,利用观察者模式来实践关卡中的角色的更新。<br /><br />代码如下<br /><br /> 1. class
2010-10-19 13:30:00
2449
原创 iPhone游戏中既播放背景音乐又播放特效声音的办
<br />有时候在 iPhone 游戏中,既要播放背景音乐,同时又要播放比如枪的开火音效。此时您可以试试以下方法<br /> NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"wav"]; //创建音乐文件路径<br /> NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicFilePath]; <br
2010-10-19 09:50:00
4751
原创 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
原创 DrawPrimitiveUP 与 DrawPrimitive
<br />在D3D中,一共有三种基本图元,分别是点、线和三角形。点是最简单的图元,由它可以构成一种叫点列(point list)的图元类型。线是由两个不重合的点构成的,一些不相连的线组成的集合就叫线列(line list),而一些首尾相连但不形成环路的线的集合就叫线带(line strips)。同理,单独的三角形集合就叫三角形列(triangle list),类似于线带的三角形集合就叫三角形带(triangle strips),另外,如果多个三角形共用一个顶点作为它们的一个顶点的话,那么这个集合就叫三角形
2010-10-18 19:33:00
2905
原创 NSNotificationCenter用于增加回调函数
<br />[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_willBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
2010-09-04 21:10:00
2600
原创 extern用法
<br />// 某个头文件,比如叫 ExternTest.h 中<br />externint iExtern; // 这样就是一个变量声明——而不是定义,因为没有分配存储空间<br /> //这以后就可以引用这个变量,而这个变量的存储于下面的 int iExtern; 的那个位置分配<br /> <br /><br />// 某个源文件,比如叫 ExternTest.c 中<br />int iExtern;<br /
2010-08-31 23:38:00
2440
原创 初识A*算法
初识A*算法 写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里抛砖引玉,希望大家都来热心的参与。 还是说正题,我先拿A*算法开刀,是因为A*在游戏中有它很典型的用法,是人工智能在游戏中的代表。 A*算法在人工智能中是一种典型的启发式搜索算法,为了说清楚A*算法,我看还是先说说何谓启发式算法。一、何谓启发式搜索算法 在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是在解
2010-08-26 21:38:00
2218
原创 UML符号含义
类之间的关系 UML把类之间的关系分为以下5种. ● 关联:类A与类B的实例之间存在特定的对应关系 ● 依赖:类A访问类B提供的服务 ● 聚集:类A为整体类,类B为局部类,类A的对象由类B的对象组合而成 ● 泛化:类A继承类B ● 实现:类A实现了B接口 关联(Association) 关联指的是类之间的特定对应关系,在UML中用带实线的箭头表示。按照类之间的数量对比,关联可以分为以下三种: ● 一对一关联 ● 一对多关联 ● 多对多关联注意:关联还要以分为单向关联
2010-08-20 18:03:00
2587
原创 测试程序的效率
<br />#include <stdio.h>#include <stdlib.h>#include <time.h>void main( void ){ time_t start, finish; long loop; double result, elapsed_time; printf( "Multiplying 2 floating point numbers 10 million times.../n" ); ti
2010-08-06 23:03:00
2493
原创 mysql 字段的修改
//主键 alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);//增加一个新列 alter table t2 add d timestamp; alter table infos add ex tinyint not null default '0';//删除列 alter table t2 drop c
2010-08-05 21:35:00
2295
原创 在表中指定位置加上一个字段
<br />ALTER TABLE your_table ADD photo VARCHAR(255) NOT NULL AFTER idcard
2010-08-05 21:32:00
2392
3
原创 显示加载动态库
<br />cosnt char *szModule = "DB.dll"<br />HANDLE hModule = LoadLibrary(szModule);<br />FUNC fuc = (FUNC)GetProcAddress(hModule,"StatInfoUpdate");
2010-08-05 20:14:00
733
原创 打开文件选择框
<br /> void TestGetOpenFileName(void){ // OPENFILENAME ofn; // 设置此属性 TCHAR szFile[MAX_PATH]; //存放处 // ³õʼ»¯Ñ¡ÔñÎļþ¶Ô»°¿ò¡£ ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = NULL; ofn.lps
2010-08-05 17:19:00
846
原创 istringstream, ostringstream, stringstream 实现数据类型转化为 string
<br />#include <iostream>#include <string>#include <sstream>using namespace std;int main(){ int a, b; string Str1, Str2; string Input = "abc 123 bcd 456 sss 999"; //ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型
2010-08-04 16:48:00
2808
原创 VC6.0编译器参数的设置
<br /><br />VC6.0编译器参数的设置主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:<br /><br />/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"
2010-08-04 14:45:00
686
原创 Tinyxml使用入门
<br />两种在Tinyxml中查找元素的方法,对应两种不同的XML文件格式。 test2.xml文件: view plaincopy to clipboardprint?------------------------------------------------------------------------------------------------------------------------ <?xml version="1.0" encoding="UTF-
2010-07-31 01:12:00
3106
原创 C++ XML解析之TinyXML篇
最近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。以后的文章里会讲解使用Xerces进行C++ XML解析的例子,希望大家一起交流。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是
2010-07-30 21:37:00
1271
原创 遍历文件夹下文件
<br /> #include<iostream>#include<string>#include<io.h>using namespace std;void filesearch(string path,int layer){ struct _finddata_t filefind; string curr=path+"//*.*"; int done=0,i,handle; if((handle=_findfirst(cur
2010-07-30 15:48:00
1324
原创 C/C++获取当前系统时间
//方案— 优点:仅使用C标准库;缺点:只能精确到秒级<br />#include <time.h> <br />#include <stdio.h> <br />int main( void ) <br />{ <br /> time_t t = time(0); <br /> char tmp[64]; <br /> strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); <br /> put
2010-07-28 16:33:00
14160
原创 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
原创 使用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
1
原创 参数方程
<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
原创 创建灵活的摄象机
<br />通过鼠标活动改变vLookatPt(x,y,z)中的xyz<br />从而改变观察矩阵。<br />D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec )
2010-06-30 14:48:00
639
原创 实现委托
<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
原创 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
原创 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
原创 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
原创 浮点数四舍五入最简洁的办法。
<br />float x=5.2;<br />int n;<br /> <br />n= int(x+0.5);
2010-06-23 22:43:00
1441
原创 d3d旋转分解
<br />D3D是通过Device的SetTransform来设置世界变换矩阵的。物体默认是在D3D的世界坐标原点上。如果我们要把它做一些变换再显示出来,就要计算一个该物体的世界矩阵matWorld,再调用Device的SetTransform(D3DTS_WORLD,&matWorld),来变换他的位置。<br />位移好说,用一个D3DXMatrixTranslation就能统统搞定,关键是旋转。D3D的所有旋转函数所围绕的轴都是穿过原点的,所以如果我们要空间中任意轴旋转,就要和位移配合起来做。<br
2010-06-23 17:09:00
3662
原创 关于3d旋转
<br />3d游戏中涉及到很多旋转,但是在计算旋转矩阵时,点的旋转要转化为向量的旋转来计算,而向量的旋转要从三维坐标转化为二维坐标来计算。
2010-06-20 22:55:00
879
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人