??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久亚洲AV片无码下载蜜桃,97精品国产91久久久久久,狠狠色狠狠色综合久久http://www.shnenglu.com/cloud/category/4241.htmlzh-cnFri, 11 Dec 2009 14:13:38 GMTFri, 11 Dec 2009 14:13:38 GMT60把D3D画面渲染到桌面!不用创徏MH口 http://www.shnenglu.com/cloud/archive/2008/03/21/45032.htmlcloudcloudFri, 21 Mar 2008 02:53:00 GMThttp://www.shnenglu.com/cloud/archive/2008/03/21/45032.htmlhttp://www.shnenglu.com/cloud/comments/45032.htmlhttp://www.shnenglu.com/cloud/archive/2008/03/21/45032.html#Feedback0http://www.shnenglu.com/cloud/comments/commentRss/45032.htmlhttp://www.shnenglu.com/cloud/services/trackbacks/45032.htmlHWND hWnd  =  FindWindowEx(GetDesktopWindow() ,  0  ,  " Progman "  ,  " Program Manager " );
hWnd 
=  FindWindowEx(hWnd ,  0  ,  " SHELLDLL_DefView "  ,  0 );
hWnd 
=  FindWindowEx(hWnd ,  0  ,  " SysListView32 "  ,  " FolderView " );
//  初始?nbsp;D3D 讑֤ 
InitD3D(hWnd);

昄的时候,如果x染在桌面的一角,则可以这样写Q?br>// 昄在左上角Q?28×128?/span>
RECT rect;
rect.left 
= 0;
rect.right 
= 128;
rect.top 
= 0;
rect.bottom 
= 128;
// 昄
g_pd3dDevice->Present(0 , &rect , 0 , 0);



cloud 2008-03-21 10:53 发表评论
]]>
[转]游戏Entity设计不完全整?/title><link>http://www.shnenglu.com/cloud/archive/2008/01/09/40796.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Wed, 09 Jan 2008 07:14:00 GMT</pubDate><guid>http://www.shnenglu.com/cloud/archive/2008/01/09/40796.html</guid><wfw:comment>http://www.shnenglu.com/cloud/comments/40796.html</wfw:comment><comments>http://www.shnenglu.com/cloud/archive/2008/01/09/40796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cloud/comments/commentRss/40796.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cloud/services/trackbacks/40796.html</trackback:ping><description><![CDATA[<div id="tzbhvxh" class=postText> <p class=MsoNormal style="TEXT-ALIGN: center"><span style="FONT-FAMILY: 宋体"><span style="FONT-FAMILY: 宋体"><span style="FONT-FAMILY: 宋体">在游戏引擎中Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">通常被翻译成实体Q也常用诸如</span><span lang=EN-US>GameObject</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Actor</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>SimulationObject</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Unit</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Character</span><span style="FONT-FAMILY: 宋体">{名字。相比于对图像声韛_擎的热情Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">层多q来一直备受冷遇,但最q几q随着大型游戏的发展,</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">层设计的重要性已l达到和囑փ声音的同{水qI而且已经出现了多U通用?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">架构。当Ӟq里伴随着争议和分歧?/span></p> <h3><span style="FONT-FAMILY: 宋体">直接模式Q?/span><span lang=EN-US>The C Approach</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">q是最早、最单、也是Q何h都能直接惛_的模式。这U方式下一?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">是一个简单的</span><span lang=EN-US>struct:</span></p> <p class=MsoNormal><span lang=EN-US>struct Mob<br>{<br>int level, hp, mp, attack, …;<br>};</span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">q种情况下往往需要对不同cd?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">定义不同?/span><span lang=EN-US>struct</span><span style="FONT-FAMILY: 宋体">Q比?/span><span lang=EN-US>Player</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Mob</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Item</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Doodad</span><span style="FONT-FAMILY: 宋体">{?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的数据库可以直接使用现成的数据库pȝ或者从数据文gdQ比?/span><span lang=EN-US>csv</span><span style="FONT-FAMILY: 宋体">文g。一般会选择</span><span lang=EN-US>Excel</span><span style="FONT-FAMILY: 宋体">~辑数据库,然后导出</span><span lang=EN-US>csv</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Excel</span><span style="FONT-FAMILY: 宋体">的强大表格和l计计算功能是调节游戏数据^衡的得力工具。以致这U最古老而简单的</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">模式以强大的生命力一直活到现在?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">那么Z?/span><span lang=EN-US>Developers</span><span style="FONT-FAMILY: 宋体">会要L索其他方式呢Q最大的问题是这U方式下各种</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">完全不同质。比?/span><span lang=EN-US>Player</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Mob</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Doodad</span><span style="FONT-FAMILY: 宋体">都有位置Q都要做撞,但他们却是不同的cdQ不能用同一份代码;</span><span lang=EN-US>Player</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Mob</span><span style="FONT-FAMILY: 宋体">都有</span><span lang=EN-US>hp</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>mp</span><span style="FONT-FAMILY: 宋体">Q也有基本相同的处理逻辑……当然Q这个可以用</span><span lang=EN-US>hack</span><span style="FONT-FAMILY: 宋体">的方法解冻I只要各个</span><span lang=EN-US>struct</span><span style="FONT-FAMILY: 宋体">前若q个成员cd和顺序完全相同,可以将指针</span><span lang=EN-US>cast</span><span style="FONT-FAMILY: 宋体">成统一的一?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">cd来处理。不q,M人都能想到更好的办法Q用c!</span></p> <h3><span style="FONT-FAMILY: 宋体">l承模式Q?/span><span lang=EN-US>Inheritage</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">q也?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>GameObject</span><span style="FONT-FAMILY: 宋体">{这些名字的由来Q他们就是基cR于是我们可以得C颗承关pL(wi)Q例如:</span></p> <p class=MsoNormal><span lang=EN-US>Entity</span></p> <p class=MsoNormal><span lang=EN-US><span>       </span>Character</span></p> <p class=MsoNormal><span lang=EN-US><span>              </span>Player</span></p> <p class=MsoNormal><span lang=EN-US><span>              </span>Mob</span></p> <p class=MsoNormal><span lang=EN-US><span>       </span>Missile</span></p> <p class=MsoNormal><span lang=EN-US><span>              </span>Laser</span></p> <p class=MsoNormal><span lang=EN-US><span>              </span>GuidedMissile</span></p> <p class=MsoNormal><span lang=EN-US><span>       </span>Item</span></p> <p class=MsoNormal><span lang=EN-US><span>       </span>…</span></p> <p class=MsoNormal><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">对象的逻辑大多也是直接包含在类里的。但也有人采用了数据对象和逻辑对象的分,其好处是对相同的数据可以替换不同的逻辑。不q,个h比较怀疑这U分L否值得Q因为类的派生本w就是可以拥有不同的逻辑?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">另外Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">间的交互除了用标准的直接讉K方式外,l常使用消息模式。消息模式和</span><span lang=EN-US>Windows</span><span style="FONT-FAMILY: 宋体">的消息模式类|</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">间通过消息交互。虽说窗口编E画了多q时间才摆脱了当q肥大的</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体">的消息处理模式,?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">层用消息模式还是有意义的,因ؓ消息很容易广播且可以直接在网l上发送。执着?/span><span lang=EN-US>OO</span><span style="FONT-FAMILY: 宋体">的h会将消息写成</span><span lang=EN-US>Command</span><span style="FONT-FAMILY: 宋体">对象Q但原理仍然是一L(fng)?/span><span lang=EN-US><o:p></o:p></span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">同时Q联|游戏出玎ͼ指针不能在不同的机器上标识对象,我们必须用稳定的</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体">来标识对象,于是我们有了</span><span lang=EN-US>EntityManager</span><span style="FONT-FAMILY: 宋体">来分?/span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体">和管理对象集合,或者叫</span><span lang=EN-US>GameObjectManager</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>ObjectManager</span><span style="FONT-FAMILY: 宋体">{。这在一D|期内几乎成了完美的方案?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">随着游戏内容的丰富性的q速膨胀Q传l的q序员来实现游戏逻辑功能的模式也来力不从心。脚本语a的集成将大部分创意性工作从E序员的担子上拿了下来,交还l游戏设计h员。ؓ了给脚本提供_的控制权Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">l构上必L充分的灵zL?/span></p> <h3><span style="FONT-FAMILY: 宋体">数据驱动Q?/span><span lang=EN-US>Data-Driven</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">现在有句很流行的话,“唯一不变的是变化。(</span><span lang=EN-US>The only constant is change.</span><span style="FONT-FAMILY: 宋体">Q?#8221;数据驱动使得变化对引擎的影响最化。数据驱动不能算是一U独立的</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">模式Q不如说它是一U设计思想Q其目的是内容制作和游戏引擎的制作分d来。与上面所说的填充</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">属性数据库的不同之处在于,它还要能通过数据来设计游戏逻辑?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">游戏设计人员需要的一Ҏ(gu)基本功能是自定义h物属性,所以与其在c里写死属性成员,不如使用属性表Q?/span><span lang=EN-US>Attributes/Properties</span><span style="FONT-FAMILY: 宋体">Q。通常使用一个哈希表Q?/span><span lang=EN-US>Hashtable</span><span style="FONT-FAMILY: 宋体">Q,或?/span><span lang=EN-US>std::map</span><span style="FONT-FAMILY: 宋体">Q或?/span><span lang=EN-US>Dictionary</span><span style="FONT-FAMILY: 宋体">Q或者就是个数组Q随个h喜好Q其实就是要一?/span><span lang=EN-US>key-value</span><span style="FONT-FAMILY: 宋体">的映表。然后ؓ脚本和编辑器提供对属性表的操作?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">动态的逻辑主要靠脚本了,必须本提供够的事g和方法。个人推荐用</span><span lang=EN-US>Lua</span><span style="FONT-FAMILY: 宋体">脚本Q因为它是在游戏领域内用得最多的通用脚本语言Q其引擎很小、速度很快、易于集成,管语法q于松散。不要迷信宣传去用庞大、极慢、难于集成的</span><span lang=EN-US>Python</span><span style="FONT-FAMILY: 宋体">。ؓ脚本提供事gQ其实也是调用脚本里的函数Q这里如果用了前面所q的消息模式Q那么就只要调用一个脚本方法,传递不同的消息参数p了。当然也有h觉得q样很丑陋而更愿意Z同的事g注册不同的函数?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">当有了数据驱动后Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的承树(wi)基本失L义了Q因Z?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">是什么已l不是程序里军_的了Q而是通过数据和脚本设计出来的。但数据和脚本又不是全部Q一?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的核心内容和需要高效处理的部分Q如撞,q是要程序来完成。于是我们需要重新设?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">c,困难的局面也q此开始?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">一个直观的x是一个统一且唯一?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">c,它包含了所有的基本功能Q如昄、碰撞检、运动、背包等Q然后由数据军_哪些lg被启用。比如一个玩家角色可能会启用l大部分lgQ而一颗树(wi)只启用显C和撞组件。但也伴随着~点Q一、这个类太大了;二、对于树(wi)木等一些简单的</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">也要费其他lg的私有数据所占的内存。那么一个简单的折中是部分用ѝ部分用数据定制。例?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">只提供最基本的组Ӟ再派生出</span><span lang=EN-US>CharactorEntity</span><span style="FONT-FAMILY: 宋体">提供_人物角色使用的组件?/span></p> <h3><span style="FONT-FAMILY: 宋体">lg模式Q?/span><span lang=EN-US>Component-Based Entity</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">提到lgQ那么很自然的就q渡到组件模式,是把显C、运动、攻凅R背包、队伍、声音等基本功能都做成独立的lgQ由数据来决定向</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">里添加哪些组件。由此可以得到另外一个扩展,是既然可以有引擎内|的lgQ那׃可以有脚本制作的lgQ实现脚本模块的复用。这U模式在</span><span lang=EN-US>GDC2002</span><span style="FONT-FAMILY: 宋体">正式提出Q到现在L的引擎都有这U设计?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">q种模式在理Z很完,但实践上q是有不疑问。最常见的问题就是组仉的依赖关pR理x况下Q各个组件是完全独立的,但实践中必然有所依赖。比如运动速度、攻d度等和角色的基本属性有养Iq动lg需要角色的包围盒来试是否撞Q?/span><span lang=EN-US>AI</span><span style="FONT-FAMILY: 宋体">lg需要分析角色当前状态和发出q动、攻d令,角色动作状态变化时改变昄lg属性,dlg需要访问队伍信息组件以止d队友{等。处理这U依赖关pM要要解决两个问题Q?/span></p> <p class=MsoNormal style="MARGIN-LEFT: 19.5pt; TEXT-INDENT: -19.5pt"><!--[if !supportLists]--><span lang=EN-US><span>一?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">              </span></span></span><!--[endif]--><span style="FONT-FAMILY: 宋体">谁依赖谁。比如是敏捷属性改变而去修改Ud速度Q还是运动组件读取敏捷属性来计算Ud速度。如果要游戏设计人员自由定义基本属性的话,p选择前者,因ؓ基本属性组件会是脚本组件?/span></p> <p class=MsoNormal style="MARGIN-LEFT: 19.5pt; TEXT-INDENT: -19.5pt"><!--[if !supportLists]--><span lang=EN-US><span>二?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">              </span></span></span><!--[endif]--><span style="FONT-FAMILY: 宋体">如何取得另一lg的指?/span><span lang=EN-US>/</span><span style="FONT-FAMILY: 宋体">引用。常见的Ҏ(gu)是给每个lgcd一个唯一</span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体">Q然后用?/span><span lang=EN-US>ID</span><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">上查询注册了的组Ӟ如果扑ֈq回其指?/span><span lang=EN-US>/</span><span style="FONT-FAMILY: 宋体">引用Q否则返?/span><span lang=EN-US>null</span><span style="FONT-FAMILY: 宋体">。当Ӟ每次讉K都做q个查询会很费</span><span lang=EN-US>CPU</span><span style="FONT-FAMILY: 宋体">Q如?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的组件不会在q行时动态添加删除的话(除非在编辑器里,否则很少有h会这么做Q,可以?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">初始化后让每个组件缓存它所要用的其他组件指针。那么当所依赖的组件不存在怎么办,一般情况下都是无声地忽略?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">由很多组件组成后Q交互的消息需要发l每一个组件。这里又一ơ体现出消息机制的优势,你不需要在</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">里ؓ每一个事件函数写一?/span><span lang=EN-US>loop</span><span style="FONT-FAMILY: 宋体">来调用组件的相应事g函数。但q里也出C一个问题,消息到达各个lg的顺序。很多时候这个顺序不会有什么媄响,但个别时候不同的序会导致完全不同的逻辑发展方向?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">此外Q?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的序列化存储也变得比较复杂,l典?/span><span lang=EN-US>Excel</span><span style="FONT-FAMILY: 宋体">导出</span><span lang=EN-US>csv</span><span style="FONT-FAMILY: 宋体">的模式难以奏效,因ؓq里需要结构化的存储,所以需要结构化的数据文件如</span><span lang=EN-US>XML</span><span style="FONT-FAMILY: 宋体">来存储,或者完全用脚本来包含所有数据和构?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">?/span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">据个人经验,使用数据驱动的承模式时很是向往lg模式Q感觉上它一个非常自然的扩展方向Q但ֿ其引入的额外的复杂性,其是需要游戏设计h员具有一定的~程能力Q所以一直不敢全盘接q用。但退一步,在引擎里仍然使用lg思想Q但</span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">的组件构成在~译时固定,可以辑ֈ某种妥协Q这和采用承与数据驱动的折中类伹{?/span></p> <h3><span style="FONT-FAMILY: 宋体">混入模式Q?/span><span lang=EN-US>Mix-in</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">q是又一U常见的折中模式Q即使用</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体">的多重承,各个组件类混入一?/span><span lang=EN-US>Entity</span><span style="FONT-FAMILY: 宋体">cR如Q?/span></p> <p class=MsoNormal><span lang=EN-US>class Mob: public GameObject, public Renderable, public Movable, public Attackable<br>{<br>…<br>}</span></p> <p class=MsoNormal><span lang=EN-US><o:p></o:p></span><span style="FONT-FAMILY: 宋体">q种Ҏ(gu)因其单而且非常W合多重l承设计思想而被很多引擎采用。当然缺点也是只能在支持多重l承的语a里用,而且当组件很丰富Ӟ</span><span lang=EN-US>dynamic_cast</span><span style="FONT-FAMILY: 宋体">变成一个代价高昂的操作?/span><span lang=EN-US><o:p> <br></o:p></span></p> <h3><span style="FONT-FAMILY: 宋体">功能性与复杂性(</span><span lang=EN-US>Functionality vs Complexity</span><span style="FONT-FAMILY: 宋体">Q?/span></h3> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">~程领域最古老的原则之一是?#8220;单快?#8221;。但随着问题的复杂化Q程序也随之变得来复杂。好的方法应该能有效的降低或隐藏复杂性。但是,没有不带副作用的药(</span><span lang=EN-US>No silver bullet.</span><span style="FONT-FAMILY: 宋体">Q,在取得更强大的功能的同时M带来额外的复杂性。我们需要做出权衡,在必要时牺牲一些功能,也就是要估算性h(hun)比?/span><br><span lang=EN-US><o:p></o:p></span></p> <p class=MsoNormal><span style="FONT-FAMILY: 宋体">一般游戏内容制作h员不会或不太会编E,~程人员也不善于游戏的内容创造和数值^衡,q于复杂的系l会D需要两面兼儡人才Q会大大增加做出一ƾ游戏的隑ֺ?/span></p> </span></span></div> <img src ="http://www.shnenglu.com/cloud/aggbug/40796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cloud/" target="_blank">cloud</a> 2008-01-09 15:14 <a href="http://www.shnenglu.com/cloud/archive/2008/01/09/40796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于串号的问?/title><link>http://www.shnenglu.com/cloud/archive/2007/06/18/26573.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Mon, 18 Jun 2007 09:37:00 GMT</pubDate><guid>http://www.shnenglu.com/cloud/archive/2007/06/18/26573.html</guid><wfw:comment>http://www.shnenglu.com/cloud/comments/26573.html</wfw:comment><comments>http://www.shnenglu.com/cloud/archive/2007/06/18/26573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cloud/comments/commentRss/26573.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cloud/services/trackbacks/26573.html</trackback:ping><description><![CDATA[q几天服务器H发一个bug, 登陆的h员会发生串号, 是A玩家登陆? 得到B玩家的角?<br>  q个bug触发的主要原因是|络底层在得C个客L(fng)的连接请求时, 会分配一个id,而这个id是用栈在保存?当有新的q接, id出? 当连接断开?id入栈, q样导致了id被重复利用的ơ数非常?其是某些id. 当这些id生成?会进入登陆队?{待登陆l果, 如果q个时候登陆认证模块的速度很慢, 或者说q个时候客L(fng)退Z, q个时候的id是一个无效id? 可是q个只有|络底层知道, q就造成引用层编写的隑ֺ.  所以最好的解决Ҏ(gu)是每次的连接id都是不一L(fng),cM操作pȝ的HANDLE <img src ="http://www.shnenglu.com/cloud/aggbug/26573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cloud/" target="_blank">cloud</a> 2007-06-18 17:37 <a href="http://www.shnenglu.com/cloud/archive/2007/06/18/26573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快?double 转整?/title><link>http://www.shnenglu.com/cloud/archive/2007/05/11/23890.html</link><dc:creator>cloud</dc:creator><author>cloud</author><pubDate>Fri, 11 May 2007 04:01:00 GMT</pubDate><guid>http://www.shnenglu.com/cloud/archive/2007/05/11/23890.html</guid><wfw:comment>http://www.shnenglu.com/cloud/comments/23890.html</wfw:comment><comments>http://www.shnenglu.com/cloud/archive/2007/05/11/23890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cloud/comments/commentRss/23890.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cloud/services/trackbacks/23890.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_16_40_Open_Image onclick="this.style.display='none'; Codehighlighter1_16_40_Open_Text.style.display='none'; Codehighlighter1_16_40_Closed_Image.style.display='inline'; Codehighlighter1_16_40_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_16_40_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_16_40_Closed_Text.style.display='none'; Codehighlighter1_16_40_Open_Image.style.display='inline'; Codehighlighter1_16_40_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">union luai_Cast </span><span id=Codehighlighter1_16_40_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_16_40_Open_Text><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> l_d; </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> l_l; }</span></span><span style="COLOR: #000000">;<br><img src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> lua_number2int(i,d) \</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_75_152_Open_Image onclick="this.style.display='none'; Codehighlighter1_75_152_Open_Text.style.display='none'; Codehighlighter1_75_152_Closed_Image.style.display='inline'; Codehighlighter1_75_152_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_75_152_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_75_152_Closed_Text.style.display='none'; Codehighlighter1_75_152_Open_Image.style.display='inline'; Codehighlighter1_75_152_Open_Text.style.display='inline';" src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>    </span><span id=Codehighlighter1_75_152_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_75_152_Open_Text><span style="COLOR: #000000">{ </span><span style="COLOR: #0000ff">volatile</span><span style="COLOR: #000000"> union luai_Cast u; u.l_d </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (d) </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">6755399441055744.0</span><span style="COLOR: #000000">; (i) </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> u.l_l; }</span></span></div> <img src ="http://www.shnenglu.com/cloud/aggbug/23890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cloud/" target="_blank">cloud</a> 2007-05-11 12:01 <a href="http://www.shnenglu.com/cloud/archive/2007/05/11/23890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不错的字符?hash 函数http://www.shnenglu.com/cloud/archive/2007/05/11/23891.htmlcloudcloudFri, 11 May 2007 04:01:00 GMThttp://www.shnenglu.com/cloud/archive/2007/05/11/23891.htmlhttp://www.shnenglu.com/cloud/comments/23891.htmlhttp://www.shnenglu.com/cloud/archive/2007/05/11/23891.html#Feedback0http://www.shnenglu.com/cloud/comments/commentRss/23891.htmlhttp://www.shnenglu.com/cloud/services/trackbacks/23891.htmlunsigned long hash(const char *name,size_t len)
{
    unsigned 
long h=(unsigned long)len;
    size_t step 
= (len>>5)+1;
    
for (size_t i=len; i>=step; i-=step)
        h 
= h ^ ((h<<5)+(h>>2)+(unsigned long)name[i-1]);
    
return h;
}


cloud 2007-05-11 12:01 发表评论
]]>
一个快速开方的函数http://www.shnenglu.com/cloud/archive/2007/05/11/23889.htmlcloudcloudFri, 11 May 2007 04:00:00 GMThttp://www.shnenglu.com/cloud/archive/2007/05/11/23889.htmlhttp://www.shnenglu.com/cloud/comments/23889.htmlhttp://www.shnenglu.com/cloud/archive/2007/05/11/23889.html#Feedback4http://www.shnenglu.com/cloud/comments/commentRss/23889.htmlhttp://www.shnenglu.com/cloud/services/trackbacks/23889.html 

/* 来至 Quake 3 的源?nbsp;*/
float CarmSqrt(float x){
    union
    
{
        
int intPart;
        
float floatPart;
    }
 convertor;
    union
    
{
        
int intPart;
        
float floatPart;
    }
 convertor2;
    convertor.floatPart 
= x;
    convertor2.floatPart 
= x;
    convertor.intPart 
= 0x1FBCF800 + (convertor.intPart >> 1);
    convertor2.intPart 
= 0x5f3759df - (convertor2.intPart >> 1);
    
return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));
}


cloud 2007-05-11 12:00 发表评论
]]>
快速查找指定对象周边的对象http://www.shnenglu.com/cloud/archive/2007/05/10/23816.htmlcloudcloudThu, 10 May 2007 09:33:00 GMThttp://www.shnenglu.com/cloud/archive/2007/05/10/23816.htmlhttp://www.shnenglu.com/cloud/comments/23816.htmlhttp://www.shnenglu.com/cloud/archive/2007/05/10/23816.html#Feedback0http://www.shnenglu.com/cloud/comments/commentRss/23816.htmlhttp://www.shnenglu.com/cloud/services/trackbacks/23816.html做法:
     1.把一个地囑ֈ分成N*N个网?每一个网格拥有一个list
     2.定每个对象在网g的位|?假定对象的位|[x, y]): x%N, y%N,扑ֈ指定的格子之?加入到l(f)ist中即?br>     3.q有是一个网格需要按情况军_要多?q样才能定处N的大?nbsp;

优点:
     速度?br>~点:
     占用内存,其是地图过大的时?

cloud 2007-05-10 17:33 发表评论
]]>
ݺݾþ| ղƷþþþþþ| 91þ㽶Ů߿| þҹӰ| Ļ˾þ| þAVһ| þ99Ʒþþþ| þĻԴվ| þۺϸϾþúݺݺ97ɫ69| þۺϾþۺϾþ| 뾫ƷþɪӰ| Ʒþ99| ˾þۺ| þþþ97Һ| ŷƷ99þ| ݺݾƷþþĻ| Ѿþˬˬav| þù| Ʒþþþþþ| þþþAVۿ| 91þۺ| þþƷһ| ޺ݺۺϾþþþ | ۺպþóAV| һþaþþƷۺ| ƷŮٸAVѾþ| þۺƵվ| Ʒ99þþþþö | þ÷׾Ʒ| þɫۺϼ | þٸ۲AV| 9191ƷѾþ| þþþùһëƬ| vaĻþ| þþAVɫۺ| þþƷ| ޹þþþƷС˵| 99Ʒ99þþþþ97| þ޾ƷAVӣ| ޾ƷþþþĻ69| þþŮ붯ȺëƬ|