02 2011 档案
摘要:Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。 可从http://sourceforge.net/project/showfiles.php?group_id=7586下载安装boost库。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的
阅读全文
摘要:运动模糊是景物图象中的移动效果。它比较明显地出现在长时间暴光或场景内的物体快速移动的情形里。为什么会出现运动模糊 摄影机的工作原理是在很短的时间里把场景在胶片上暴光。场景中的光线投射在胶片上,引起化学反应,最终产生图片。这就是暴光。如果在暴光的过程中,场景发生变化,则就会产生模糊的画面。 Why should you bother? 不难发现,在电影或电视中,运动模糊是经常出现的,甚至于你不会注意到它。另一方面,在计算机图形中,你就会发现缺少运动模糊,由此也带来了失真。 举个例子,lensflare是近来较为流行的一种图象效果,但传统的图象制作者常常简化此效果,自从我们认识到它是仿真的一种工.
阅读全文
摘要:动态模糊近几年广泛应用于游戏制作的一种特效,可以使得游戏所呈现出的运动画面更接近于真实相机所拍摄出的效果。 在真实世界中,运动模糊是指在相机拍摄画面时,由于被拍摄物体在相机快门曝光的短暂时间内有一定幅度的运动,造成拍摄出的画面产生残影和模糊的效果,通常相机只有在捕捉高速运动物体或者相机本身处在高速旋转中会出现这种效果。 那么如何能利用GPU在游戏画面中实现这一效果的呢? 其实原理和实现都非常的简单,实现Motion blur的方法也有很多,这里以DirectX9自带Sample中的方法为例进行说明。 我们知道在游戏中对于画面的渲染是一种单帧渲染,通常情况下,两帧之间并没有直接关联,但是对于动.
阅读全文
摘要:1.什么是体积雾? 这个问题通过图片来解答再合适不过了,下面是本文利用体积雾做的一个结果 所谓体积雾:顾名思义就是被限制了形状的雾,本文表述如何通过ImageProcess(图象处理)的方式实现体积雾。 2.常规雾原理 雾效最终体现在雾颜色与场景色的混合上。决定雾的浓度的关键就在这个混合因子上。下面我们给出公式.float4 finalColor = factor * fogColor + ( 1 - factor) * sceneColor; ( !提取公因式,减少计算量)=factor( fogColor - sceneColor) + sceneColor; ( factor>=0
阅读全文
摘要:最近一段时间看到版上关于C++里浮点变量精度的讨论比较多,那么我就给对这个问题有疑惑的人详细的讲解一下intel的处理器上是如何处理浮点数的。为了能更方便的讲解,我在这里只以float型为例,从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。还要说的一点是文章和程序一样,兼容性是有一定范围的,所以你想要完全读懂本文,你最好对二进制、十进制、十六进制的转换有比较深入的了解,了解数据在内存中的存储结构,并且会使用VC.net编译简单的控制台程序。OK,下面我们开始。 大家都知道任何数据在内存
阅读全文
摘要:1.C++很简单的一种办法:#include <iostream>#include <fstream>using namespace std;#define FILENAME "stat.dat"int main(){ fstream _file; _file.open(FILENAME,ios::in); if(!_file) { cout<<FILENAME<<"没有被创建"; } else { cout<<FILENAME<<"已经存在"; } return 0;}2.利用 c 语言的库的办法: 函数名: acces
阅读全文
摘要:Visual Studio 2005 Other Versions Visual Studio 2010 Visual Studio 2008 Write formatted data to a string. These are versions of sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l with security enhancements as described in Security Enhancements in the CRT.CopyParametersbuffer Storage location
阅读全文
摘要:在VC2005的CRT中,增加了一些具有更强安全性的CRT函数,例如strcpy_s, strncat_s等。(MSDN: <Security Enhancements in the CRT > Significant enhancements have been made to make the CRT more secure. Many CRT functions now have more secure versions. If a new secure function exists, the older, less secure version is marked as
阅读全文
摘要:看名字明白,它和strcpy()函数的功能应该一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。三个参数时:errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );两个参数时:errno_t strcpy_s( char (&strDestina
阅读全文
摘要:不知道大家是否碰到过这种情况,当某个玩家发出一个火球,这个火球有自己的运动轨迹,那么如何来判断火球是否打中了人呢?大部分情况,当策划提出这个要求的时候,一般会被程序否认,原因是:太麻烦了,呵呵。复杂点的还有包括两个火球相撞之类的事情发生。那么网络游戏中,是否真的无法模拟实现这种模拟呢?首先我们来看看模拟此种操作会带来什么样的麻烦:1,服务器必须trace火球的运行轨迹,乍一想,挺慢的。2,网络延迟,传过来有延迟,传过去有延迟,延迟还不稳定,麻烦。3,都有两点解决不了了,接下来不愿意再想了。呵呵,实际上呢,对火球的模拟比对人物运动的模拟要轻松很多,原因很简单,火球的方向不会变。下面来看看具体用什
阅读全文
摘要:socket编程原理 socket编程原理 1问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完成后,用户进程关闭调用,通知操作系统已经完成了对某对象的使用。 TCP/IP协议被集成到UNIX内核中时,相当于在UN
阅读全文
摘要:对 TCP/IP 、 UDP 、 Socket 编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1. 什么是 TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗?什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。这里有一张图
阅读全文
摘要:Beej网络socket编程指南 -------------------------------------------------------------------------------- 介绍 Socket编程让你沮丧吗?从manpages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用connect()前的bind()的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解C语言并想穿过网络编程的沼泽,那么你来对地方了。 ----------------------------------------
阅读全文
摘要:Windows下Socket编程主要包括以下几部分:服务端 1、初始化Windows Socket库。 2、创建Socket。 3、绑定Socket。 4、监听。 5、Accept。 6、接收、发送数据。客户端 1、初始化Windows Socket库。 2、创建Socket。 3、连接Socket。 4、接收、发送数据。服务端每接收到一个客户端的Socket,则创建一个线程。满足一个服务端连接多个客户端。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/
阅读全文
摘要:在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况:struct test{ char x1; short x2; float x3; char x4;};结构的第一个成员x1为char类型,其自然对界为1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其自然对
阅读全文
摘要:欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部
阅读全文
摘要:酷壳: http://CoolShell.cn/ 原文: http://coolshell.cn/?p=2746在酷壳,有很多文章都提到了代码注释,如:《十条不错的编程观点》、《优质代码的十诫》、《整洁代码的4个提示》、《惹恼程序员的十件事》等等。今天,某国外的程序员在这里列举五种应该避免的程序注释,我觉得比较有道理,但我觉得有少数几个观点也并不绝对。所以,我把原文的这五种应该避免的程序注释罗列在下面,并放上原作者和我的个人观点作为比较。希望对大家有用。一、自恋型注释(注:原文为Proud,我觉得“自恋”更好一点)public class Program
阅读全文
摘要:据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探路,交通路线导航,人工智能,游戏设计等等。美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。 最短路经计算分静态最短路计算和动态最短路计算。 静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。 动态路径最短路是外界环境不断发生变化,即不能计算预测的情况下计算最短路。如在游戏中敌人或障碍物不断移动的情况下。典型的有D*算法。 这是Drew程序实现的10000个节点的随机路网三条互不相交最短路 真实路网计算K条路径示例:节点5696到节点3006,三条最快
阅读全文
摘要:1、不要试图重载||,&&操作符,因为它们使用短路求值法(一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也停止运算),而重载之后采用的是函数调用法。首先当函数被调用时,需要运算其所有参数,所以调用函数functions operator&& 和 operator||时,两个参数都需要计算,换言之,没有采用短路计算法。第二是C++语言规范没有定义函数参数的计算顺序,所以没有办法知道表达式1与表达式2哪一个先计算。完全可能与具有从左参数到右参数计算顺序的短路计算法相反。同样,也不要试图重载逗号(,)操作符,因为
阅读全文
摘要:这个最好看MSDN,讲的比较清楚http://msdn.microsoft.com/en-us/library/aa366599(VS.85).aspx不过要注意以下几点:1 申请的私有内存只能被调用进程(就是call这个api的进程)使用2 HANDLE WINAPI HeapCreate( __in DWORD flOptions, __in SIZE_T dwInitialSize, __in SIZE_T dwMaximumSize);第三个参数的设置,如果指定为0的话,则堆可以在需要的情况下不断增大。Applications that need to allocate large m
阅读全文
摘要:好久没有更新过博克了,春节的最后一天更新一下,写一下关于游戏中关于光影效果的方法,以及我的实现.去年有个机会和call duty3的程序总监聊天(此人是一个华人,当时已经回国在腾讯做互动娱乐部门副总,想找我过去),他提到次时代游戏和前一代游戏的最大区别之一就是游戏的光影效果,可见游戏中光影效果是如此的重要。关于游戏中的光照,就目前来看大致两种方式,一种是Unreal的与渲染光照贴图+ShadowMap,另一种则是Crysis的完全实时光影。效果上都不错,下面来简单分析一下。在讨论之前先要明确一点,游戏中的光影真的要追求和现实中一样的物理机理么?答案是否定的。画面是一个视觉艺术,只要看上去真是,
阅读全文
摘要:最近这几天在搞一个GameFramework,其实就是在引擎基础上增加一个游戏框架,对游戏进行抽象,对引擎使用的一些封装。在进行具体设计的时候很多细节问题是值得思考的。总结如下 总的来说我所设计的游戏框架从功能上来讲就是两件事,一个是游戏的状态管理(什么菜单状态,游戏状态等等),在一个就是AI管理,又有一个有效的机制来负责对所有AI进行更新和维护还有交互。 对于一个所谓的通用框架需要考虑的是在各种不同游戏类型中的最小抽象是什么?那些东西是个各种类型游戏都需要有的,这个抽象如果过小很可能失去其意义,如果过大则很难做到普适,当然有些情况下想做一个通用的东西想法本身就是错误的。 根据我之前的单机游戏
阅读全文
摘要:昨天和同事无意中聊到开发引擎使不是一件容易的事情。我想首先需要搞清楚的是什么是引擎。早在上世纪80,90年代,那时候的游戏开发都是从头来做,没有什么引擎,后来一些聪明的开发者把个个游戏中共用的部分独立出来,包装成了一个函数库并提供一组API共二次开发者调用,这边有了引擎。也就是说引擎的本质概念就是一个能够在不同游戏项目中,或者至少是同类型游戏中重用函数库而已。而今的现代游戏引擎则更加复杂,它融入了游戏开发的各个模块系统,资源管理系统,渲染系统,物理系统,声音系统,等等。这些系统有些容易实现一些,有些较为复杂,而且它们之间有时候并不是完全隔绝独立的,更过的是相互交融配合,互为支持。更为重要的是,
阅读全文
摘要:近几个星期以来一直在搞粒子系统,下面简要总结一下。粒子系统从其本质来说就是一些点被发射出来,并在其生命周期内受到一些影响。这些点的信息也无非就是位置,方向,颜色等等,根据需要也可以扩充其他。而渲染的时候则根据粒子的信息,再结合具体的渲染类型(比如billboard)进行渲染。从上面可以看出粒子系统分为4各部分1. 粒子,这里只要把他理解成一些关心的变量集合,比如位置,方向,颜色,纹理偏移,生命时间等2. 发射器,其实就是一个喷嘴,把粒子发射出来。所谓发射出来,听起来挺悬的,其实就是将粒子标记为活动,并对其数据进行初始设置。3. 影响器,对发射出来的例子数据施加影响,根据物理模型,或者其他什么规
阅读全文
摘要:作为一个引擎程序员,在我以往经历的项目中经常会遇到这样的问题,这个功能是不是该市现在引擎中,似乎放在逻辑中(或者客户端)也可以。每当举棋不定的时候我都会想引擎到底该做什么!?我这里我说说我的想法。很久以前并没有什么引擎,所有东西都是写在一起的,当开发新的游戏时基本上都是从头开始,这样就有大量重复的工作。后来一些聪明的程序员将那些可以在各个游戏中使用的代码独立出来,并作成一个库,这样便有了引擎。其实这已经很清楚了,引擎应该是可以在各个项目中进行重用的部分,或者说可以公用的模块。虽然现代的引擎更加复杂,模块更加丰富,但他依然没有改变它原有的职能。如果说某个所谓的引擎在拿到其他项目时需要进行大量的改
阅读全文
摘要:编写Max导出插件目前有两种选择,一种是使用max脚本,另一种就是使用max SDK了。使用Max SDK又分为使用Max标准API和IGame接口。我使用IGame接口编写Max导出插件。IGame接口就是在Max标准API的基础上有针对性地对游戏导出进行了封装,将通常繁琐的操作调用简化成一个函数,与此同时还可以通过IGame接口获得标准API的数据结构从而使用标准API进行一些复杂的操作。要想编写Max导出插件首先需要对Max内部对数据的组织形式有一个大致的了解。Max的数据不论是材质还是骨骼还是网格都是使用树结构保存,每个数据都在相应的节点上,通过便利节点,获得节点类型并作相应的转换便可
阅读全文
摘要:工作这么多年,也开发过几个引擎,去年还独立开发一个基于iPhone平台的3D FPS游戏引擎(包括引擎和所有编辑器)。最近在研究Unreal 3和Crysis的引擎,有了些新的想法,于是想全新开发一个新的引擎 ZeusEngine。在写这片博客的时候这个引擎已经开发一段时间。下面列出这个引擎将要支持的特性。首先这个引擎是一个同时支持PC和iPhone平台的引擎,使用统一架构(事实上没有写任何区分平台的代码)。根据资源及其配置情况便可支持在PC上的高级效果,也可以支持iPhone上的简单效果,一切都是外部资源决定。引擎特性如下:1. 材质系统 简单来说材质中分为Solution,Solution
阅读全文
摘要:现代的游戏大多资源量都比较大,无法做到游戏启动之初就加载了全部资源,所以资源动态加载必然要做。下面说一说一些不同的资源动态加载方案。第一种方式,分贞加载。所谓分贞加载顾名思义就是把游戏资源的加载分解到不同贞去做,这样可以降低某一贞突然加载大量资源导致的帧率急剧下降。这种分贞可以是以资源为单位,也可以加载步骤为单位。比方说第一步进行磁盘IO,第二步进行一些资源使用前的准备工作(如提交显卡等),这些步骤也可以分别放在不同贞中进行。为了使贞率更加平稳,可以限定每贞加载的量,或者时间阈值。比方说目前渲染以贞的时间是10ms,目标帧率是30贞,这样还有20ms左右的空闲时间,这时可以在加载的时候累计耗时
阅读全文
摘要:不光还是游戏引擎,任何一个项目都有必要做好内存管理,至少可以监控内存使用量和内存泄露。而对于游戏引擎而言更是如此,在游戏引擎里面动态分配释放内存的地方不在少数,做好内存管理对于提高引擎运行效率是十分必要的。内存管理就是做两件事,负责内存的分配和释放,再有就是对内存的分配释放进行监控,据此来解决内存泄露和掌握内存使用情况。先说说内存分配释放,这也是内存管理最重要的部分。一般来说内存管理只管理小内存的分配释放,大内存则无需管理制作监控即可。过多的小内存分配释放会造成系统内存碎片从而可能分配不下内存,与此同时过多的调用系统的内存分配释放函数也是低效。malloc,free这些函数本身就很慢。现在问题
阅读全文
摘要:以前一直没有接触过粒子系统,上一个引擎由于试运行在iPhone上,也没有专门的实现这一模块。最近由于工作关系不得不进行研究并写一个编辑器。通过这一段时间对各种粒子系统,特效系统的研究我也有了进一步的了解,在51期间自己写了一个十分简单的粒子系统框架,给大家共享(见后面的连接),并打算进一步集成到目前正在独立开发的ZeusEngine中。看到粒子系统作的各种效果感觉很神秘也很强大,其实粒子系统本质很简单。粒子系统包括发射器,影响器还有图形(或者叫渲染器),这三个部分被集成到一个叫粒子系统的类中,他们是一have a的形式集成近来,也就是说使用成员变量的方式。他们的工作原理可以用一个例子来简单解释
阅读全文
摘要:简介:log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点),然后分原理,手动使用步骤,配置文件驱动方式使用步骤,其他考虑等方面进行讨论。以下讨论基于log4cpp0.3.4b。0. 优点提供应用程序运行上下文,方便跟踪调试; 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslo
阅读全文
摘要:原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbb
阅读全文
摘要:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#if0//整数match_resultsresults;tstringstr("f34");rpatternpat("^[+|-]?\\d+\\d*$");match_results::backref_typebr=pat.match(str,results);if(br.matched){tcout<<"ma
阅读全文
摘要:GRETA 是 Microsoft Research 的 Eric Niebler 开发的一个 free C++ 正则表达式实现,下载地址 http://research.microsoft.com/projects/greta/ 。 greta主要有如下类:rpattern 正则表达式类。 match_results 执行结果类 rpattern的主要方法: rpattern 构造函数。设置正则表达式和参数。 match 执行正则表达式。可以接受三种参数:std::string, const char*, const_iterator。返回值为match_results::backref_t
阅读全文
摘要:1.目前c/C++方面的正则表达式大家必提boost,其实boost是一个庞大的库集合,正式因为庞大,下载编译后还得100多M。所以不选择。2.greta是微软的正则表达式封装,不过看它说明除了windows下可以用,linux其实也可以用(c++)。3.greta实在vc6下发布的,用vs2005编译,会报错:具体错误参照:social.microsoft.com/Forums/zh-TW/vcgeneral/thread/7461e68d-739d-4b36-a068-1c12a827e594 ,“Greta Parser for VS2005”,就
阅读全文
摘要:作者:朱金灿来源:blog.csdn.net/clever101 GRETA是微软研究院推出的一个正则表达式模板类库,GRETA 包含的 C++ 对象和函数,使字符串的模式匹配和替换变得很容易,它们是:· " rpattern: 搜索的模式 · " match_results/subst_results: 放置匹配、替换结果的容器 据测试,GRETA库的匹配速度比Boost Regex和ATL7的CATLRegExp都快。另外GRETA虽说是微软研究院出的,在linux其实也可以用的。 GRETA库原在vc6下发布的。用VS 2005编译
阅读全文
摘要:本文摘要翻译了几篇文章的内容,简单介绍 ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库,这些表达式库使我们可以方便地利用正则库的巨大威力,给我们的工作提供了便利。 正则表达式语法 字符元意义.匹配单个字符[ ]指定一个字符类,匹配方括号内的任意字符。例:[abc] 匹配 "a", "b"或 "c"。^如果^出现在字符类的开始处,它否定了字符类,这个被否定的字符类匹配除却方括号内的字符的字符。如:[^abc]匹配除了"a", "b"和"c"之
阅读全文
摘要:李群 (mailto:liqun@nsfocus.com?subject=便利的开发工具-log4cpp快速使用指南)绿盟科技李群,关注于网络安全产品的开发、研究;软件开发过程等方面。您可以通过 liqun@nsfocus.com和他联系。 简介:log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点
阅读全文
摘要:内存映射API函数CreateFileMapping创建一个有名的共享内存:HANDLE CreateFileMapping(HANDLE hFile, // 映射文件的句柄, //设为0xFFFFFFFF以创建一个进程间共享的对象LPSECURITY_ATTRIBUTES lpFileMappingAttributes, // 安全属性DWORD flProtect, // 保护方式DWORD dwMaximumSizeHigh, //对象的大小 DWORD dwMaximumSizeLow, LPCTSTR lpName // 必须为映射文件命名);与虚拟内存类似,保护方式可以是PAGE_
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 在网络应用中,“负载均衡”已经不能算是什么新鲜话题了,从硬件到软件,也都有了很多的方法来实现负载均衡。我们这里讨论的负载均衡,并不是指依靠DNS转向或其它硬件设备等所作的负载均衡,而是指在应用层所作的负载均衡。 一般而言,只有在大型在线系统当中才有必要引入负载均衡,那么,多大的系统才能被称为大型系统呢?比如动辄同时在线数十万的网络游戏,比如同时在线数在10万以上的WEB应用,这些我们都可以理解为大型系统,这本身就是
阅读全文
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。 完成端口的主要优点在哪里? 完成端口的最大优点在于其管理海量连接时的处理效率,通过操作系统内核的相关机制完成IO处理的高效率。注意:完成端口的优点在于管理连接量的巨大,而不是传输数据量的巨大。在这种场合最适合用完成端口:连接量巨大,且每个连接上收发的数据包容易比较小,通常只有几K甚至不到1K的字节。 既然完成端口处理的是海量连接问题,那么我们对完成端口的优化则也应该首先放在海量连接的相关管理上。为此,我们引入“
阅读全文
摘要:接触了一段时间的网游封包设计,有了一些初步的思路,想借这篇文章总结一下,同时也作个记录,以利于以后更新自己的思路。 网络游戏的技术研发,分为三个主要的方面:服务器设计,客户端设计,数据库设计。而在服务器和客户端之间实现游戏逻辑的中介则是游戏数据包,服务器和客户端通过交换游戏数据包并根据分析得到的数据包来驱动游戏逻辑。网络游戏的实质是互动,而互动的控制则由服务器和客户端协同完成,协同就必然要依靠数据来完成。 当前网络游戏中的封包,其定义形式是各种各样的,但归纳起来,一般都具有如下要素:封包长度,封包类型,封包参数,校验码等。 封包长度用于确定当前游戏数据包的长度,之所以提供这个数据,是因为
阅读全文
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。由于手头的一个网游项目正在启动,所以,这一篇文章与上一次的文章之间相隔了很长的时间,特向读者道歉,让大家久等了。这个系列文章,是没有事先打草稿的,纯属信手写来,所以,其中的条理性可能不太好,我会在以后的整理中将稿子再好好整理。我们接着上一次的内容,说一说游戏机器人的开发工具和开发步骤。游戏机器人的开发包括两个重要方面,它们是:封包分析和加解密。当然,这是一种相当宽泛的说法,非常不严密。具体地来说,在封包分析中,又包括:
阅读全文
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。 最早听说网络机器人的存在,是在2002年底,那时第一次听说GOOGLE为了统计和查询网络资源,专门研制了一种网络机器人,在世界各地为GOOGLE不辞劳苦地忙碌着,然而,关于网络机器人更详细的信息却一直不得而知。 直至2003年10月,才第一次在网络游戏中听说了有一种程序叫:机器人程序(以下简称游戏机器人)。简单地说,游戏机器人是一种智能化游戏程序,可以全部或部分代替玩家从事游戏活动,让玩家从无休止的升级打怪的痛苦
阅读全文
摘要:本文作者:sodme 本文出处:http://blog.csdn.net/sodme版权声明:本文可以不经作者同意任意转载,但转载时烦请保留文章开始前两行的版权、作者及出处信息。 当大家尝试了若干年由互联网信息资源大爆炸所带来的甜头后,我们开始为寻找有用资源以及有效利用这些庞大的资源而发愁,更多的时候,我们更象一只乱撞的苍蝇在这个URL和那个URL之间奔走,半天的忙碌说不定给我们带来的却是一场空。于是,我们不由自主的渴望着,如果有一种软件,能代替这种近乎体力劳动的“搜索”和“处理”工作,那该多好呀。 我自己也曾不止一次地发出过这种感慨,但我想,对这种软件有最强烈渴望的群体应该首选网络游戏玩
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 要了解此篇文章中引用的本人写的另一篇文章,请到以下地址: http://blog.csdn.net/sodme/archive/2004/12/12/213995.aspx 以上的这篇文章是早在去年的时候写的了,当时正在作休闲平台,一直在想着如何实现一个可扩充的支持百万人在线的游戏平台,后来思路有了,就写了那篇总结。文章的意思,重点在于阐述一个百万级在线的系统是如何实施的,倒没真正认真地考察过QQ游戏到底是不是那
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 特别声明: 本人非常欣赏暴雪及他们的游戏,之所以写这个文章,是想让大家了解一些网络封包分析方面的常见方法以及学习暴雪游戏在网络处理方面的经验,偶认为作为一个网络编程者,熟练掌握封包分析的工具和方法应该是其基本功之一。本文所列的所有封包分析内容,全部是采用普通黑箱方式即可得来的,并未涉及对魔兽世界可执行程序的逆向工程。同时,除此文涉及的内容外,本人拒绝向任何人透露更详细的关于魔兽世界封包方面的更多内容,有兴趣者请自己
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载、复制、引用。但任何对本文的引用,均须注明本文的作者、出处以及本行声明信息。 之前,我分析过QQ游戏(特指QQ休闲平台,并非QQ堂,下同)的通信架构(http://blog.csdn.net/sodme/archive/2005/06/12/393165.aspx),分析过魔兽世界的通信架构(http://blog.csdn.net/sodme/archive/2005/06/18/397371.aspx),似乎网络游戏的通信架构也就是这些了,其实不然,在网络游戏大家庭中,还有
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章开始前三行的作者, 出处以及声明信息. 谢谢.参考资源:http://www.lua.org/pil/ 一 个小小的脚本语言都能玩出这么多花样来,还真有点让我始料不及。你还别说,越写越觉得有意思了,现在干的活,很多的时候,象一个打字员或翻译员:把c++ 的代码翻译成lua的代码. 当然, 这只是一种比喻, 事实上, 在写的过程中, 针对于游戏的逻辑来说, 肯定会加上自己的理解以及判断, 然后作出适当的调整与取舍.lua是一种动态类型
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章开始前三行的作者, 出处以及声明信息. 谢谢.参考资源:http://www.lua.org/pil/ 7. 如果有人问我, c里, 你觉得哪种基本数据类型最爽? 我会说, 那可能是union吧, 因为它可以让我一定程度的偷懒. 而如果有人问我, lua里你觉得哪种基本数据类型最爽?我会肯定的回答: table. lua的官方文档里是这样"吹嘘"table的:We use tables to represent ordinary a
阅读全文
摘要:本文作者:sodme本文出处:http://blog.csdn.net/sodme声明: 本文可以不经作者同意, 任意复制, 转载, 但任何对本文的引用都请保留文章开始前三行的作者, 出处以及声明信息. 谢谢.很多高深的人物都说过类似的话:"语言层面的东西, 都是表面的东西, 最核心的是设计模式, 是算法", 我完全赞同这句话, 但同时也完全赞同另一句话: "对于从事编码实践的我们, 还是应该踏实的多掌握一些编码层面的东西, 才更有利于理解核心的东西, 附带的, 也可以借以增加自信, 找回青春"...前面写过的孔乙己系列, 是以底层的眼光看阳春白雪的C++(当然,还没写完), 而在这个系列里,
阅读全文
摘要:http://blog.csdn.net/jaredz/archive/2006/04/29/697392.aspx好强呀,这篇文章。第六集 纹理映射技术为使建立的3D模型更接近现实世界中的物体, 简单的颜色变换已经无能为力, 这时我们就需要纹理映射技术了. 这一集我们讲解基础的纹理映射技术的数学模型, 对于在粒子系统使用的过程纹理技术在高级部分讲解.6.1 二维纹理映射6.1.1 纹理映射的简单建模 二维纹理映射就是从二维纹理平面到三维物体表面的映射. 一般二维纹理平面是有范围限制的, 在这个平面区域内, 每点都可用数学函数表达, 从而可以离散的分离出每点的灰度值和颜色值, 这个平面区域称为
阅读全文
摘要:转:http://community.csdn.net/Expert/topic/5631/5631339.xml?temp=.5729029 【Ref】Windows对文件的读写提供了很丰富的操作手段,如:1. FILE *fp, fstearm...; (C/C++)2. CFile, CStdioFile...; (MFC)3. CreateFile, ReadFile...;(API)...在处理一般的文件(文本/非文本),这些足够了。然而在处理比较大的文件如几十M, 几百M, 甚至上G的文件, 这时再用一般手段处理,系统就显的力不从心了要把文件读出,再写进,耗费的是CPU利用率与内存
阅读全文
摘要:--------------------------------------本文主要包含如下内容:1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错3. 怎样“调试” Release 版的程序-------------------------------------- 关于Debug和Release之本质区别的讨论 一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优
阅读全文
摘要:当然TCP方式的模型还有事件选择模型。就是把所有的网络事件和我们的一个程序里定义的事件梆定。这个有它的好处,可能可以让我们更好的写一个线程来管理接收与发送。现在来讲一下一个完成端口模型。 完成端口 一个完成端口其实就是一个通知队列,由操作系统把已经完成的重叠I/O请求的通知放入其中。当某项I/O操作一旦完成,某个可以对该操作结果进行处理的工作者线程就会收到一则通知。而套接字在被创建后,可以在任何时候与某个完成端口进行关联。步骤:1、创建一个空的完成端口;2、得到本地机器的CPU个数;3、开启CPU*2个工作线程(又名线程池),全部都在等待完成端口的完成包;4、创建TCP的监听socket,使用
阅读全文
摘要:首先得弄清楚同步、异步、阻塞、非阻塞的概念。同步和异步是针对通讯的工作模式,阻塞和非阻塞是指socket的I/O操作。实际上对于socket,只存在阻塞和非阻塞,同步与异步是在程序实现上有所不同。以阻塞的方式执行recv函数,在没有收到数据前,此函数是不会返回的,所以这很容易执行函数的线程处于等待I/O上的数据状态,然后被挂起。非阻塞就不一样,执行recv时候不管有没有数据都立即返回,有数据时返回数据,没数据时返回错误。非阻塞可以带来程序的高效,也带来了写程序中必须注意的地方,非阻塞情况下,发送与接收数据时候,要用户自己管理自己的缓冲区,并且要记录发送与接受的位置,因为很可能发送与接受数据的任
阅读全文
摘要:欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术: I/O端口 同步/异步 堵塞/非堵塞 服务端/客户端 多线程程序设计 Winsock API 2.0 在这之前,我曾经开发过一个项目,其中一块需要网络支持,当时还考虑到了代码的可移植性,只要使用select,connect,accept,listen,send还有recv,再加上几个#ifdef的封装以用来处理Winsock和BSD
阅读全文
摘要:作者: James Hobart 翻译: spark.bbs@bbs.nankai.edu.cn 日期: 2001-3-23 转自:http://nku.nankai.edu.cn/cim/students/doctor/spark/articles/PrinciplesOfGUIDesign.htm 译序:我在网上查找中文的 GUI 设计规范,居然没有详细一点的,一篇泛泛而谈的文章却被转载了几十次。只好退而求其次,找来这篇英文的,顺带翻译成中文,以方便国内编程人员。 +++++++++++++++++++++++++++++++++++++++++++++++++ 图形用户界面( GUI
阅读全文
摘要:一、底层开发包和工具1. http://www.mesa3d.orgMesa 是一个类OpenGL( http://www.opengl.org )的开源实现。2. http://openil.sourceforge.netDevIL (即以前的OpenIL)是一个跨平台的图形处理包,支持BMP、JPG、GIF 等多种图形文件格式。二、2D 游戏开发包1. http://www.libsdl.org/http://www-900.ibm.com/developerWorks/cn/linux/theme/special/SDL(Simple DirectMedia Layer)是一个跨平台的多
阅读全文
摘要:除了指定的是鼠标标识符以及鼠标数据格式外,初始化鼠标就和初始化键盘几乎完全相同。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--//--------------------------------------------------------------------------------//Initializemouseinterface,returnamouseinterfacepointer.//----------------------
阅读全文
摘要:设置数据格式每种设备都有一种用于读取数据的特定数据格式,需要考虑的东西也很多,包括键、鼠标按键、轴等。因此要使程序从设备读取数据,首先必须告诉DirectInput读取这种数据所采用的格式。通过 IDirectInputDevice8::SetDataFormat函数即可满足上述要求。Sets the data format for the Microsoft DirectInput device.SyntaxHRESULT SetDataFormat(LPCDIDATAFORMAT lpdf);ParameterslpdfAddress of a structure that describ
阅读全文
摘要:原著:Radu Privantu 翻译:pAnic 2005年5月11日 原文出处:http://www.devmaster.net/articles/building-mmorpg ------------------------------------------------------------------- 译者序:这是一篇讲解如何开发一款MMORPG的入门文章,作者本人也是一款游戏的开发者,文中的内容源于实践,有很高的参考价值。很多人都想拥有自己的游戏,这篇文章对那些想自己开发游戏的人来说可能是一纸福音,也可能是一盆冷水。无论如何,开发游戏都不是一件简单的事情
阅读全文
摘要:DirectInput是一些COM对象的集合(和所有DirectX组件相同),这些COM对象描绘了输入系统和各个输入设备。最主要的对象是DirectInput8,它用于初始化系统以及创建输入设备接口。DirectInput COM对象:IDirectInput8:主要的DirectInput8 COM接口,其他所有接口都通过这个接口进行查询。DirectInputDevice8:用于输入设备的COM接口,每个设备都有自己单独的接口可供使用。DirectInputEffect:用于力反馈效果的 COM接口,比如某些游戏杆和某些鼠标上的力反馈效果。各种输入设备(比如键盘、鼠标和游戏杆)都使用相同的
阅读全文
摘要:下面的这些内容不包含在本文中:官方的Lua包和文档 (参看 http://www.lua.org/),;涉及到Lua使用但不是被Lua使用者普遍使用的东西 (参看 http://www.lua.org/uses.html), ;本wiki已经存在的内容(参看 LuaDirectory). 类库和与Lua绑定的资源LibrariesAndBindings 开发环境[LuaIDE] (5.0) - Windows平台Lua的整合开发环境(最新发布 2004-01-29).[wxLua] (5.0) -Lua and wxWidgets的混合体.有自己的带有调试器的IDE。这个IDE使用wxlua开
阅读全文
摘要:加入到MP3的革命中MP3是一种音频压缩格式,它通过删除或修改音乐中不易被人耳察觉的部分来使音乐更小,占用的存储空间更少。在项目中使用MP3(.MP3文件)需要使用DirectX中的 DirectShow组件,在这个组件的帮助下,只需几行短短的代码,就能使用任意的MP3文件了(DirectShow也支持其他的媒体文件,比如 WMA,AVI,MPG等)。当然要想使用更多的媒体文件,必须已经在操作系统中安装了解码器。解码器(codec)是一个程序,用于解码或编码一些指定的格式(比如MP3解码器专门解码.MP3文件)。通常可以从发明或者创建这种格式的公司中获取这种格式的解码器。比如,MP3解码器来自
阅读全文
摘要:加载音色库(乐器)DirectMusic加载器在使用固有文件或者MIDI文件的时候会自动加载默认的音色库。乐器总是被一组一组地使用,很多组乐器音色的集合被称之为DLS音色库(可下载的音乐)。每组乐器使用三个值编号,它们是:最高有效位(most-significant byte,MSB),最低有效位(least-significant byte,LSB)和组编号。通常播放MIDI文件的乐器组是标准化的,也就是说编号为1的乐器总是钢琴,如果想使用新的钢琴作为乐器,可以从DLS集合中加载。DirectMusic包含了标准的乐器集合,通常称之为GM/GS集合(GM = General MIDI,GS
阅读全文
摘要:使用通告“通告”是一种触发机制,当缓存中播放位置达到某个固定的位置时,就会向程序发出通知。有了通告,就可以知道播放什么时候结束,这种机制在比较长的声音中特别有效。通告使用一个叫做 IDirectSoundNotify8的对象,这个程序的作用就是在音频缓存中标记一个位置,然后触发事件通知应用程序,而应用程序可以通过消息循环或者单独的线程进行处理。标记的位置可以是一个缓存中的偏移值,也可以是由宏指定的停止标记,这个表示停止的宏是 DSBPN_OFFSETSTOP。并不是任何偏移值都可以用来作为通告发生的位置,这个值必须和音频的数据块对齐,并且通告的偏移必须按照从小到大的顺序排列。偏移值是不能够共享
阅读全文
摘要:使用DirectMusic在DirectAudio 中,DirectSound负责数字音频方面的处理,而DirectMusic则负责Midi文件(Musical Instrument Data Interface,数字音乐格式,.mid作为文件扩展名),DirectMusic固有音乐文件(.sgt文件)和数字录音设备录制的波形格式文件(.wav文件)等文件的播放操作。能体现DirectMusic的强大之处是DirectMusic固有文件格式,一首用DirectMusic固有文件格式制作的音乐包括数个小音乐格式,这些样式还能用不同的乐器组合一个接一个地播放。随机的样式和乐器的选取创造出了随时都在
阅读全文
摘要:调整声道平衡所谓声道平衡就是调节左右声道的大小, DirectSound定义了两个宏帮助把声道平衡调节到最左边和最右边,使用DSBPAN_LEFT将声道调整到最左边,使用DSBPAN_RIGHT 将声道调整到最右边。通过调用IDirectSoundBuffer8::SetPan函数可以调节声道平衡。 The SetPan method sets the relative volume of the left and right channels.ParametersdwFrequency Frequency, in hertz (Hz), at which to play the audio
阅读全文
摘要:音乐就是一系列的音符,这些音符在不同的时间用不同的幅度被播放或者停止。有非常多的指令被用来播放音乐,但是这些指令的操作基本相同,都在使用各种各样不同的音符。在计算机上进行作曲,实际上是存储了很多组音乐,回放时由音频硬件将这些音符播放出来。Midi格式(文件扩展名是.MID)是存储数字音乐的标准格式。DirectMusic 音乐片段(music segments)使用.SGT文件扩展名,其他的相关文件包括乐队文件(band file .BND),这种文件里面包含乐器信息;弦映射表文件(chordmaps file .CDM)包含在回放时修改音乐的和弦指令;样式文件(styles file .ST
阅读全文
摘要:开始使用主音频缓存让缓存在程序启动的时候开始播放可以节省不少处理器时间。因为内存资源是有限的,特别是在硬件设备中,而你使用的数据缓存可能需要任意大小,因此主音频缓冲区和辅助缓冲区使用环形缓存。因为数据缓冲是一个一维数组,所以可以让这个缓冲区头尾相接。这是一个十分强大的技术,利用这个技术我们可以节省大量的内存。声音在进行混音处理后,被送入环形主音频缓存。一旦播放位置到达主音频缓存的终点,声音又从头开始播放,这样声音就被无间隙地连续播放。如果想要使用缓存的这种循环特性,需要指定启用循环播放的特性,若不然当播放到缓冲区终点时,播放就停止了。为了播放缓存中的音频数据(在开启循环选项的情况下播放),需要
阅读全文
摘要:游戏要实现模型的突出显示,最好是边缘高亮的效果.刚听到这个东西时,第一个进入头脑中的就是:边缘检测.于是就写了一个:Pass 0:渲染模型到一个RenderTarget Model上,并把模型的形状写入Alpha通道.Pass 1:对上面得到的Alpha通道用拉普拉斯模板进行滤波,得到一个边缘,写入另一个RenderTarget Edge.Pass 2:把前面得到的两个RenderTarget进行合成,输出到屏幕.虽说效果还不错,但是用掉了两个RenderTarget,显然不合算.而且,用拉普拉斯在PixelShader中进行逐像素的处理,效率并不高.阿来在GameDev上求得另一种方法:把模
阅读全文
摘要:作者:炎龙工作室 千里马肝版本:v1.0最后更新日期:2002-3-30绪言在游戏中,因为我们是中国人麻,通常都需要显示汉字,比方说交待剧情。而对于文字的显示,英文的显示要较其简单得多,因为只有26个字母,就算再加一些标点、符号什么的,用一张位图,就可以足以显示所有的单词了,而相关实现技巧,也比较轻松。而中文的显示方法,要复杂得许多。记得原来在DOS下,汉字的显示都是读的UCDOS的点阵字库,而点阵字库的读取方法,在UCDOS SDK中都有源代码可以参考。但是自从Windows操作系统开始,我们开始了解到一种更好的字库,它就是TTF。注:以下我所指的开发环境,除非明确说明,默认的平台是VC6.
阅读全文
摘要:接口程序和API(Interfaces 和 API) 图14:各种流行的API技术 现在让我们讨论音频引擎中API编程的应用。可供选择的选项并不多:Windows Multimedia, Direct Sound, OpenAL, Aureal A3D。 不幸的是,Aureal A3D 的驱动仍旧臭虫(bug)连篇,在目前最流行的Windows 2000和XP操作系统,它工作效率的稳定性仍然非常差。 视窗媒体系统(Windows Multimedia system)是从早期的Windows 3.1继承而来的最基本的声音再现系统。它较大的缓冲会造成比较大的延迟,所以在游戏中很少有应用;但是,某
阅读全文
摘要:3D 音响技术:声波追踪 VS 缠绕(wavetracing vs reverb) 图9:多种音效技术 在1997-1998年,每个芯片制造商都加大力度开发它们认为有前途的音频技术。Aureal,当时业界的领先者,将赌注放在极限真实的游戏上,它采用的技术为"声波追踪"(Wavetracing)。Creative 则认为使用缠绕的预前运算会更有更好的效果,于是它便开发了EAX。Creative 在1997年收购了Ensoniq / EMU:专门研究开发和制造音效芯片的公司 - 这也是为什么它在当时拥有缠绕技术的原因。Sensaura 出现在市场的时候,它使用了EAX作为基础,命名为Environ
阅读全文
摘要:在最佳听音位置(sweet spots)听众能够理想地听到所有的3D音频效果,而在其它的区域声音会发生失真。这样我们在倾听声音的时候就就需要选择正确的位置。对于一对音箱来说,有一个平衡、声带、细节、立体感最好的听音位置,称作Sweet Spot。录音和制作的时候始终在这一点对监听具有重要的意义。Sweet Spot通常位于一对立体声音箱中间,前方数英尺的地方。许多专家认为从高音头的上方到听音者的鼻尖构成一个虚幻的等边三角形,就是Sweet Spot的所在。因为受到许多客观条件的影响,这个位置可能有一些偏移,例如调音台面板的反射就会有影响,音箱的差异也会影响到Sweet Spot,一些音箱具有较
阅读全文
摘要:3D Sound vs Surround Sound 在游戏开发中,声音(Sound)的地位并不如图象那么重要。游戏开发者们会发费大部分的时间来增加3D图形的新功能和特效;但是,想要说服他们花更多的时间和金钱,来开发具有高质量音频效果的游戏可以说是非常的困难。同时,在硬件方面,玩家们也更乐意购买最新款式的3D图象加速卡,而对新的声卡似乎也并不是那么感冒。 然而,随着显示卡的发展正在呈现出顶峰的状态,玩家对游戏也表现出越来越挑剔的姿态,认为优秀的游戏除了具有赏心阅目的图象和绚丽的特效外,音效也是不可缺少的,所以现在的形势似乎有急转的趋势 - 用户和开发者比以往任何时候都专著于音频系统的效果。在
阅读全文
摘要:现代游戏已经不能没有声音,所以音频引擎成为游戏引擎中不可缺少的一部分.这是一篇介绍现代音频引擎的文章(http://hard.zol.com.cn/labs/2003/0520/60986.shtml).FMOD音频引擎(http://www.fmod.org/)是一个非常不错的音频引擎,其使用也比较简单,下面做一些简单介绍:一.基本准备它是免费的,你可以从它们的主站上下载API等文件.之后,你需要添加头文件和库文件,如下(C/C++):fmodvc.lib 用于 Microsoft Visual C++ 和 Codewarriorfmodbc.lib 用于 Borlandfmodwc.lib
阅读全文
摘要:原文出处:Strsafe.h: Safer String Handling in C 在微软公司举行的Microsoft Windows Security Push 活动期间,一批测试者、程序管理经理和普通程序员共同决定要为 C 语言量身定制一套具有较高安全性的字符串处理函数,并且希望这些函数能被 Windows 程序员和微软公司内部的程序员所采用。简单说来,现有的 C 语言运行时函数实在难以在当今充斥着恶意攻击企图的大环境下立足。这些函数要么在返回值和参数上缺乏一致性,要么隐含着所谓的“截断误差”(truncation errors) 错误,要么无法提供足够强大的功能。坦言之,调用这些函
阅读全文
摘要:如 前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删 除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存 空间。6.1.1 默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。系 统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或 者分配最
阅读全文
摘要:-- Lua tables 分析 (1)-- bitbull.cn@gmail.com-- 转载请保持文章完整-- ver 1.0 @ 2007/07/09Lua的tables实现了关联数组,关联数组指不仅可以通过数字下标检索数据,还可以通过别的类型的值检索数据.Lua中除了nil以外的类型都可以作为tables的索引下标.另外tables没有固定的大小,你可以根据需要动态的调整他的大小.tables是Lua主要的也是唯一的数据结构,我们可以通过他实现传统数组, 符号表, 集合, 记录(pascal), 队列, 以及其他的数据结构.Lua的包也是使用tables来描述的,io.read意味着调
阅读全文
摘要:从C#、JAVA到C ,让我觉得像是从公产主义社会回到了原始社会,不顺手,所以很心里憋气!!!函数名:strtok功能:查找由在第二个串中指定的分界符分隔开的单词用法:char*strtok(char*str1,char*str2);程序例:#includestring.h#includestdio.hintmain(void){charinput[16]="abc,d";char*p;/**//*strtokplacesaNULLterminatorinfrontofthetoken,iffound*/p=strtok(input,",");if(p)printf("%s\n",p)
阅读全文
摘要:Lua解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在Lua中操纵字符串的功能基本来自于string库。字符串库中的一些函数是非常简单的:string.len(s) 返回字符串s的长度;string.rep(s, n) 返回重复n次字符串s的串;你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要);string.lower(s) 将s中的大写字母转换成小写(string.upper将小写转换成大写)。如果你想不关心大小写对一个数组进行排序的话,你可以这样:table.so
阅读全文
摘要:如何让EditPlus支持LUA这次主要介绍一下学习Lua之前的准备工作。(1) 下载Lua安装包,最新版本是lua-5.1.3. 它的体积很小,只有210Khttp://luaforge.net/frs/?group_id=377这是WINDOWS版本. 附带了编辑器,连环境变量都一次搞定了。(2)安装lua包(3)安装EditPlus编辑器:EditPlus 简单又好用, 我自己喜欢汉化版 http://www.crsky.com/soft/1578.html. 2.3以上版本可以使用一下注册码:Name:www.cnzz.ccCode:60A8E-21F10-5BZ83-ADW4E-F3
阅读全文
摘要:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://cjbskysea.blogbus.com/logs/48140313.html基本函数库为Lua内置的函数库,不需要额外装载1、assert (v [, message])功能:相当于C的断言,参数: v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息,默认为"assertion failed!"--------------------------------------------------------------------------------2、collectgarbag
阅读全文
摘要:《Programming in Lua中文版》 -- 8.Compilation, Execution, and Errors转自http://www.lifangjin.com/ (凉风集 李方进的个人BLOG)虽然我们把Lua当作解释型语言,但是Lua会首先把代码预编译成中间码然后再执行(很多解释型语言都是这么做的).在解释型语言中存在编译阶段听 起来不合适,然而,解释型语言的特征不在于他们是否被编译,而是编译器是语言运行时的一部分,所以,执行编译产生的中间码速度会更快.我们可以说函数 dofile的存在就是说明可以将Lua作为一种解释型语言被调用.前面我们介绍过dofile,把它当作Lu
阅读全文