﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-野猪世界-随笔分类-Show Demo</title><link>http://www.cppblog.com/zhuyeaini/category/14140.html</link><description>server ogre cegui bullet python lua</description><language>zh-cn</language><lastBuildDate>Tue, 04 Aug 2015 11:14:50 GMT</lastBuildDate><pubDate>Tue, 04 Aug 2015 11:14:50 GMT</pubDate><ttl>60</ttl><item><title>c++ python twisted game server</title><link>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 11 Jan 2014 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/205308.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/205308.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/205308.html</trackback:ping><description><![CDATA[python的twisted网络库<br />c++的逻辑和速度<br />如果把两者结合起来<br />twisted网络库负责首发数据 收到的数据传给c++进行逻辑处理<br />一个比较优雅的网络服务库就成型了。。。<br />再扩展点 一些比较复杂的库就可以通过c++调用python来实现<br />python库就变成了c++的后花园了<br />实际世界中 在线游戏库要复杂点：<br /><img src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/server.png" width="600" height="216" alt="" /><br /><span style="color: e93300;"><strong>GS的代码就是c++为主程序 python作为网络模块</strong></span><br />python网络模块收到数据后 会传给c++代码处理<br />而c++在处理后会把结果交给python网络模块<br />python网络模块再回传给Gate Server<br />Gate Server再回传给Net Server<br />最后由Net Server传给用户<br /><br />好 国际惯例 放代码：<a href="http://pan.baidu.com/s/1dD4iDxv">http://pan.baidu.com/s/1dD4iDxv</a><br /><br /><div><a href="&#8220;http://pan.baidu.com/s/1dD4iDxv&#8221;&lt;/a"></a></div><a href="&#8220;http://pan.baidu.com/s/1dD4iDxv&#8221;&lt;/a">  </a><img src ="http://www.cppblog.com/zhuyeaini/aggbug/205308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2014-01-11 13:56 <a href="http://www.cppblog.com/zhuyeaini/archive/2014/01/11/205308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wildpigEdit 再次起航</title><link>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 09 Jan 2014 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/205263.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/205263.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/205263.html</trackback:ping><description><![CDATA[wildpigEdit是用ogre cegui bullet skyx hydrax lua python poco等许多开源库写的 图形编辑器 没有什么特定方向 想到哪里实现到哪里 这次重构了下 以便以后更好地往下写<br />技术点：<br />1.内存池 即常用简单对象使用内存池 一次分配几百个以供后面使用<br />2.消息请求模式 各个对象之间使用消息进行调用 松耦合 消息序列化<br /><br />目前进度：已经完成地形的编辑 保存 载入<br />要做的：植被<br />未来：再次重构实现界面功能脚本化<br />感兴趣的可以看看：<a href="http://pan.baidu.com/share/link?shareid=2813701924&amp;uk=3762046617">http://pan.baidu.com/share/link?shareid=2813701924&amp;uk=3762046617<br /><br /></a>放图：<br /><img src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen1.png" border="0" alt="" width="800" height="406" /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/205263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2014-01-09 23:12 <a href="http://www.cppblog.com/zhuyeaini/archive/2014/01/09/205263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迷宫问题 回溯法</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Thu, 12 Aug 2010 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/123188.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/123188.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/123188.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/shiye.png" height="256" width="256" /><br /><br />如图，有如此的一个迷宫，要从起点到终点，紫色方格是障碍物方格，不可通行。<br />求：<br />找出一条从起点到终点的道路，在到达终点之前，必须走遍所有可通行的方格一次，而且到达终点的<br />转弯次数要最少，每改变一次前进方向算作转弯一次。<br /><br />经典的回溯法解题思路：<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">方格m*n,k个障碍物</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m,n,k;<br /></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">目标方格</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;dx,dy;<br /></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">当前拐弯数，最右拐弯数</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;dirs,best;<br /></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">//</span><span style="color: #008000;">总共找到几条路线</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;count;<br /></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;search(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;depth,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;di)<br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(depth</span><span style="color: #000000;">==</span><span style="color: #000000;">m</span><span style="color: #000000;">*</span><span style="color: #000000;">n</span><span style="color: #000000;">-</span><span style="color: #000000;">k&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;dx</span><span style="color: #000000;">==</span><span style="color: #000000;">x&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;dy</span><span style="color: #000000;">==</span><span style="color: #000000;">y&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;)<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">找到一条路线</span><span style="color: #008000;"><br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(dirs</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">best)<br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;best</span><span style="color: #000000;">=</span><span style="color: #000000;">dirs;<br /></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保存最优路径，即标记不为0的方格</span><span style="color: #008000;"><br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save();<br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">8</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(没有出边界&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;该方格未行走过)<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board[x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i]][y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i]]</span><span style="color: #000000;">=</span><span style="color: #000000;">depth</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(di</span><span style="color: #000000;">!=</span><span style="color: #000000;">i)&nbsp;dirs</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search(depth</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i],y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i],i);<br /></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">恢复转弯次数</span><span style="color: #008000;"><br /></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(di</span><span style="color: #000000;">!=</span><span style="color: #000000;">i)&nbsp;dirs</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">恢复未行走标记</span><span style="color: #008000;"><br /></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;board[x</span><span style="color: #000000;">+</span><span style="color: #000000;">dx[i]][y</span><span style="color: #000000;">+</span><span style="color: #000000;">dy[i]]</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />看上去挺复杂的问题，用回溯法可以很好地解决，还可以加入剪枝函数，即检测当前dirs是否已经大于best，如果<br />是的话，直接返回。<br /><img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emkulou.gif" align="absmiddle" border="0"  alt="" /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/123188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-08-12 16:07 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/08/12/123188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wildpig 初次show</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 31 Jul 2010 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/121781.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/121781.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/121781.html</trackback:ping><description><![CDATA[<strong style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; "><em>下载地址：http</em></strong><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; ">://wildpigdev.googlecode.com/svn/trunk/</span>&nbsp;<br />wildpig是我新开的轻量级的游戏编辑器demo 主要侧重自然景物的渲染 保持简单性和可扩展性 追求最大真实度 <br />限于开发机子的性能（ati 2系列的显卡） 像深度阴影之类的特耗GPU的效果就没上&nbsp; 等有了新机器再说吧 555555<br /><br />开发环境 ogre1.7.1 cegui0.7.1 boost1.42 一些天龙的模型<br /><br />目前进度：地形+天空+植被+水<br /><br />地形支持可编辑高度纹理：地形分为一个一个的tile 纹理混合因子放在顶点的纹理坐标中<br />天空参考caelum 增加如太阳光晕等效果 光晕：camPos向照相机方向走一定距离(太阳到照相机的距离的一半)到P <br />然后在太阳到点P的向量方向上按照不同距离画光晕<br />植被方面 bush（花花草草之类）每个地形块的同类bush打包成一个渲染体 树模型在近处真实渲染 远处用Billboard代替 因此可支持较大规模的植被系统<br />水支持反射 衍射效果 特别地 像天空 太阳等特殊物体的反射效果需要注意点 她们不会随着摄像机的移动而移动 在代码上要注意处理下<br /><br />未来支持特性：角色寻路、换装 cegui道具管理 物理 物理 还是物理 <br />未来肯定会公开源代码 从开源中来 到开源中去 <br /><br />也终于试下传说中的预编译 很好很强大 好快啊<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/face9.gif" align="absmiddle" border="0"  alt="" /><br />放图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen2.png" height="768" width="1024" /><br />白天 中午<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen4.png" /><br />傍晚吧<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen7.png" height="768" width="1024" /><br />看看月亮<br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/gameScreen11.png" /><br />早上<br /><br /><img src ="http://www.cppblog.com/zhuyeaini/aggbug/121781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-07-31 15:11 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/07/31/121781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ogre中寻路</title><link>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html</link><dc:creator>野猪红</dc:creator><author>野猪红</author><pubDate>Sat, 26 Jun 2010 13:23:00 GMT</pubDate><guid>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html</guid><wfw:comment>http://www.cppblog.com/zhuyeaini/comments/118797.html</wfw:comment><comments>http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zhuyeaini/comments/commentRss/118797.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhuyeaini/services/trackbacks/118797.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emrose.gif" align="absmiddle" border="0" alt="" /> 好 先来朵花 渲染一下气氛<br />
早先写了个寻路的demo 现在总结分享下 <br />
核心算法采用流行的A*寻路算法<br />
Demo大概是这样的：通过cegui(界面库)添加些障碍物 地形用一个简单的平面来代替(因为demo的重点是寻路 能简化<br />
的就简化了) 场景中有几个主角人物乔峰(天龙里的模型) 通过左键选择一个或多个主角 右键确认寻路目标点 主角会绕开障碍物进行寻路 感兴趣的可以从这里下载<br /><strong style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; "><em>http</em></strong><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 12px; line-height: normal; background-color: #e5ecf9; ">://wildpigdev.googlecode.com/svn/trunk/</span>&nbsp;<br /><br />&nbsp;整个寻路主要有3部分组成：1.寻路准备 2.寻路 3.优化路径点<br />
1.寻路准备<br />
在选定要移动的角色后 右键确定目标点 首先发生的是寻路准备<br />
寻路准备是指确认角色要搜寻的范围，开始位置，目标位置 在demo中 我们以人物为中心建立了一个N*N的搜寻方格 一般说来 方格的数量越多
那么搜寻就越费时 方格的大小决定了搜寻的精度 我们在检查此方格是否可以通行时<br />
是以方格的大小作为碰撞的包围盒大小 如果此方格的包围盒和障碍物的包围盒产生碰撞 我们就认为此方格是不可<br />
通行的 在寻路时将排除该方格 如果方格越小 同样的搜寻范围就需要更多的方格 但产生的路径就越精细<br />
2.寻路<br />
贪心算法的思想 算法有两个列表称之为开放列表和闭合列表 一开始都为空 开放列表加入开始方格
每次都从开放列表中选择一个算法认为是最接近目标点的方格 我们称之为代价最小的方格 然后 从开放列表中删除该方格<br />
接下来 判断此方格是否为目标方格 如果是 寻路结束 如果不是 加入到闭合列表 检查该方格周围的8个邻居 对每个邻居 如果该方格不在开放列表
也不在闭合列表 并没有和障碍物发生碰撞 那么 把该方格加入到开放列表中 并在同时计算代价 还要注意为该方块记录其行走路径
也就是从哪个方块走到哪个方块的 一直循环到开放列表为空<br />
或找到目标方格 在找到目标方格后 根据其行走路径可以往前倒推到开放方格 形成一条路径 当然 也可能找不到<br />
路径 <br />
3.优化路径点<br />
优化路径点的思想是尽量使路径直线化 demo中没有做这步优化 算法比较容易实现 从起始点到最后一个点 对于路径中的每一个路径点A
依次检查位于其后的每个路径点B1,B2... 如果A与B1是互相可见(中间无障碍物)的且A与B2也是互相可见的 则B1点是可以去掉的
于是路径变成了A,B2...<br />放几张截图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/1597933442787592477.png" height="562" width="750" /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/zhuyeaini/3190800335993835836.png" /><br /><br />动态寻路：<br />增加动态寻路的角色更新逻辑：<br />为了避免重复寻路 每个角色有一个碰撞列表<br /><br />1. 初始化该角色的碰撞列表为空<br />2. 得出和该角色发生碰撞的其他角色colChas<br />3. 如果colChas为空，更新碰撞列表为空，goUpdate()<br />4. 如果colChas不为空，检查是否有新的碰撞角色(即原碰撞列表中没有的角色)<br />5. 如果没有 goUpdate() 更新列表<br />6. 如果有 判断优先级(只判断状态为go状态的) 如果是最高的 重新寻路 更新列表 如果不是 不作什么 更新列表<img src ="http://www.cppblog.com/zhuyeaini/aggbug/118797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhuyeaini/" target="_blank">野猪红</a> 2010-06-26 21:23 <a href="http://www.cppblog.com/zhuyeaini/archive/2010/06/26/118797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>