﻿<?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++博客-阿四的王国-文章分类-RarkNet引擎</title><link>http://www.cppblog.com/athriller/category/12491.html</link><description>程序一样的人生</description><language>zh-cn</language><lastBuildDate>Fri, 04 Dec 2009 05:38:43 GMT</lastBuildDate><pubDate>Fri, 04 Dec 2009 05:38:43 GMT</pubDate><ttl>60</ttl><item><title>RarkNet引擎－2D网络游戏开发（网络篇）（一）</title><link>http://www.cppblog.com/athriller/articles/102531.html</link><dc:creator>[阿四]</dc:creator><author>[阿四]</author><pubDate>Fri, 04 Dec 2009 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/athriller/articles/102531.html</guid><wfw:comment>http://www.cppblog.com/athriller/comments/102531.html</wfw:comment><comments>http://www.cppblog.com/athriller/articles/102531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/athriller/comments/commentRss/102531.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/athriller/services/trackbacks/102531.html</trackback:ping><description><![CDATA[<div>
<p align=center><font size=3><span>作者：</span><span>akinggw</span></font></p>
<p align=center><span><font size=3>&nbsp;</font></span></p>
<p><font size=3><span>&#8220;</span><span>2D</span><span>网游开发&#8221;，我有时都觉得这个标题包含的内容太多，要实现起来也太难。于是，我决定将它分门别类，我按照我要实现的一个网络游戏将它分成下面几个部分：</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>客户端</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>网络端</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>服务器端</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>网页端</font></span></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>我们来讲解一下，我们分别要在每个端口完成什么内容：</font></span></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>（1）</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>客户端</span> <span>劈开接受网络数据不谈，我们主要在客户端实现游戏界面的显示，游戏界面又包括那些呢？比如，游戏地图的显示，精灵的显示，</span><span>UI</span><span>（用户界面）的显示，还有就是一些游戏规则的制定等等。</span></font></p>
<p><span><font size=3>（2）</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>网络端</span><span>&nbsp;</span><span>网络端我们要做些什么呢？我想主要包括两个方面：在服务器端，从数据库中取出数据，然后将数据发送给客户端，从客户端得到数据，然后更新数据库；而在客户端，我们要干些什么呢？从网络中取出数据，然后更新游戏变量，得到游戏变量，然后将它发送给服务器。这里，我只是谈了一下网络端的大概内容，实际中可能还要修改。</span></font></p>
<p><span><font size=3>（3）</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>服务器端</span><span>&nbsp;</span><span>服务器端的主要内容，我想就是和数据库打交道。因为我们是通过网站来注册用户，所以，服务器端的主要内容就是取数据库内容，更新数据库内容。可能会涉及到删数据库内容，但这不常见。</span></font></p>
<p><span><font size=3>（4）</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>网页端</span><span>&nbsp;</span><span>网页端实现的主要内容，我想大概就是用户的注册，修改，信息的发布，玩家的交流和互动。</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><font size=3><span>我在这里大概讲解了</span><span>2D</span><span>网游开发开发所涉及的内容，可能这些内容会随着实际开发修改，再修改。</span></font></p>
<p><font size=3><span>我想我制作的这个游戏客户端用</span><span>SDL</span><span>，网络端用</span><span>Raknet</span><span>，数据库用</span><span>mySQL</span><span>，网站制作用</span><span>JSP</span><span>。</span></font></p>
<p><span><font size=3>这些内容可能不能算作一篇文章，我想叫心得还可以。当然，我也希望我的这些心得不会让你误入歧途。</font></span></p>
<p><font size=3><span>既然这篇心得叫&#8220;</span><span>2D</span><span>网络游戏开发（网络篇）&#8221;，我就不会写上其它的一些内容，我会在这以下的文章中写我在使用</span><span>Raknet</span><span>的一些感受，同样，我希望它对你有用。</span></font></p>
<p><span><font size=3>反正，我觉得它很有用。</font></span></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>下面，我们就开始吧！</font></span></p>
<p><font size=3><span>大概在这半年时间里，我接触了</span><span>3</span><span>款网络引擎，它们分别是：</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>openTNL (</font><a href="http://www.opentnl.org/"><font size=3>http://www.opentnl.org</font></a><font size=3> )</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>SDL_net (</font><a href="http://www.libsdl.org/projects/SDL_net/"><font size=3>http://www.libsdl.org/projects/SDL_net/</font></a><font size=3> )</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>Radnet (</font><a href="http://www.rakkarsoft.com/"><font size=3>http://www.rakkarsoft.com</font></a><font size=3> )</font></span></p>
<p><span><font size=3>三款网络引擎都是为游戏设计的，下面我来谈一谈我对三款引擎的看法。</font></span></p>
<p><font size=3><span>OpenTNL </span><span>来自于</span><strong><span>Torque 3D</span></strong><strong><span>游戏引擎，关于</span><span>Torque </span></strong><strong><span>的信息，请访问</span> <span><a href="http://www.garagegames.com/"><span>http://www.garagegames.com/</span></a> </span></strong><strong><span>。应该说</span><span>openTNL</span></strong><strong><span>是</span><span>Torque</span></strong><span> </span><span>的一部分。可以跨平台运行，也有许多丰富的文档和教程，但它却有一个致命的弱点——使用过于复杂。因为</span><strong><span>Torque</span></strong><strong><span>属于那种早期的游戏引擎，所以在</span></strong><span>OpenTNL</span><span>中，很多的编码方式都与你所学的不同，你需要花费很多的时间去学习它。我想这也是为什么</span><span>OpenTNL</span><span>没有做过许多项目的原因。</span></font></p>
<p><font size=3><span>SDL_net </span><span>来源于</span><span>SDL</span><span>，也是一个跨平台的网络引擎。</span><span>SDL_net</span><span>使用</span><span>C</span><span>语言写成，学习起来也简单明了，但</span><span>SDL_net</span><span>太年轻了，只发展了短短几年时间。因此，</span><span>SDL_net</span><span>还存在太多的</span><span>BUG</span><span>（错误），另外缺少足够的支持文件也是它发展缓慢的原因，毕竟，它太年轻了。</span></font></p>
<p><font size=3><span>Radnet&nbsp;</span><span>可以说是基于上述两款引擎的优点为一体。它既有</span><span>OpenTNL</span><span>的文档丰富，又有</span><span>SDL_net</span><span>的使用简单。</span></font></p>
<p><font size=3><span>在接下来的日子里，我们将讲解如何使用</span><span>Radnet</span><span>，让你充分享受网络给你的快感。</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><font size=3><span>Radnet</span><span>是一个基于</span><span>UDP</span><span>网络传输协议的</span><span>C++</span><span>网络库，允许程序员在他们自己的程序中实现高效的网络传输服务。通常情况下用于游戏，但也可以用于其它项目。</span></font></p>
<p><font size=3><span>Radnet</span><span>有以下好处：</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>高性能</span><span>&nbsp;</span><span>在同一台计算机上，</span><span>Radnet</span><span>可以实现在两个程序之间每秒传输</span><span>25</span><span>，</span><span>000</span><span>条信息；</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>容易使用</span><span>&nbsp;Radnet</span><span>有在线用户手册，视频教程。每一个函数和类都有详细的讲解，每一个功能都有自己的例程；</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>跨平台，当前</span><span>Radnet</span><span>支持</span><span>Windows, Linux, Macs</span><span>，可以建立在</span><span>Visual Studio, GCC, Code: Blocks, DevCPP </span><span>和其它平台上；</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>在线技术支持</span><span> <span>RakNet</span></span><span>有一个活跃的论坛，邮件列表，你只要给他们发信，他们可以在几小时之内回复你。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>安全的传输</span><span> <span>RakNet</span></span><span>在你的代码中自动使用</span><span>SHA1, AES128, SYN</span><span>，用</span><span>RSA</span><span>避免传输受到攻击</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>音频传输</span><span>&nbsp;</span><span>用</span><span>Speex</span><span>编码解码，</span><span>8</span><span>位的音频只需要每秒</span><span>500</span><span>字节传输。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>远程终端</span><span>&nbsp;</span><span>用</span><span>RakNet</span><span>，你能远程管理你的程序，包括程序的设置，密码的管理和日志的管理。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>目录服务器</span><span>&nbsp;</span><span>目录服务器允许服务器列举他们自己需要的客户端，并与他们连接。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>Autopatcher&nbsp;Autopatcher</span><span>系统将限制客户端传输到服务端的文件，这样是为了避免一些不合法的用户将一些不合法的文件传输到服务端。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span><font size=3>对象重载系统</font></span></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>网络数据压缩</span><span>&nbsp;BitStream</span><span>类允许压缩矢量，矩阵，四元数和在</span><span>-1</span><span>到</span><span>1</span><span>之间的实数。</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>远程功能调用</span><span>&nbsp;</span></font></p>
<p><span><font size=3>l</font><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><font size=3><span>强健的通信层</span><span>&nbsp;</span><span>可以保障信息按照不同的信道传输</span></font></p>
<p><font size=3><span>RakNet</span><span>支持两种版权，如果你是做免费游戏，</span><span>RakNet</span><span>将是免费的。相反，你必须支付一定的费用。</span></font></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><font size=3><span>从这里你可以下载到最新的</span><span>RakNet</span><span>：</span></font></p>
<p><span><span><font size=3>&nbsp;</font></span><a href="http://www.rakkarsoft.com/raknet/downloads/RakNet.zip"><font size=3>http://www.rakkarsoft.com/raknet/downloads/RakNet.zip</font></a><font size=3> </font></span></p>
<p><span><font size=3>&nbsp;</font></span></p>
<p><font size=3><span>关于</span><span>RakNet</span><span>的设置方式，我们将在下一篇讲解。</span></font></p>
<p><font size=3><span>关于更多内容请访问金桥科普网站（</span><span> <span><a href="http://popul.jqcq.com/">http://popul.jqcq.com</a> &nbsp;</span></span><span>）游戏开发栏目，如你需要游戏开发方面的书籍请参考金桥书城游戏频道（</span><span><a href="http://book.jqcq.com/category/1_70_740.html">http://book.jqcq.com/category/1_70_740.html</a> </span><span>）。</span><span> </span><span>如果你在阅读本篇文章时有什么好的建议请来信给我，我的</span><span>E_mail: akinggw@126.com. </span><span>如果你在使用</span><span>SDL</span><span>时有什么问题，请到金桥科普网站（</span><span><a href="http://popul.jqcq.com/">http://popul.jqcq.com</a> &nbsp;</span><span>）游戏开发栏目，我将详细地为你解答。</span></font></p>
</div>
<img src ="http://www.cppblog.com/athriller/aggbug/102531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/athriller/" target="_blank">[阿四]</a> 2009-12-04 13:31 <a href="http://www.cppblog.com/athriller/articles/102531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>