`
文章列表
在clyde中,几乎所有的外部资源都是以config的形式存在。每个config都有一个name来唯一标识这个config。ManagedConfig是所有config的基类,它是一个抽象类,定义了一些最基础的方法,ParameterizedConfig是它直接的子类。   1. ParameterizedConfig   ParameterizedConfig引入了parameter这一概念,利用parameter可以实现对config的个性化定制,这样可以复用绝大多数的config,并且减少config的数量。比如你有一个model,这个model在不同的场景需要应用不同的贴图,那么 ...

3D MMO Demo

今天终于把Demo搞出来了。
CoordIntMap是一个基类为Map数据结构,是存储游戏地图场景数据的基础数据结构,在应用中一共涉及到3个类,第一个自然是CoordIntMap,另外还有Coord和Cell,Cell定义在CoordIntMap中,是一个内部类。   Coord用一个int来表示和存储一个2D的坐标,在存储和表示之前分别需要encode和decode。 /** * Encodes the supplied coordinates (presumed to be in [-32768, +32767]) into a single * integer. */ ...
Scope相关的接口、类都定义在expr这个包中,官方的说明很简单,只有一句话:expr - expression evaluation and symbol binding,但scope这个概念却很重要,可以说是整个clyde框架的核心基石之一。那么它到底是个什么概念,又起到了什么作用呢?首先它是一个接口,在这个接口中,最重要的就是下面这个方法:   public <T> T get (String name, Class<T> clazz);     再看它的注释:   Looks up a symbol in this scope,return the ...
  本来想用LoaderRunner对Narya的网络性能再做一次测试,LR的java vuser可以直接用java来编写测试脚本,本来还是挺方便的,但是不知道为什么脚本一跑起来就报这么个错:   Error (-17998): Failed to get [param not passed in call] thread TLS entry ...
Narya是基于NIO的网游服务器底层通讯引擎,并在其上做了对象的序列化,可以直接做方法的远程调用。今天有时间测试了下其性能。   测试环境如下   服务器 CPU:Intel Xeon   X3220  2.40GHz 四核 内存:8G 操作系统:Red Hat Enterprise Linux Server release 5.4, 内核版本为2.6.18-164.el5PAE   客户机 CPU:Intel Xeon   E5410  2.33GHZ 八核 内存:4G 操作系统:WIndow Server 2008 R2 Enterprise   关键测试代码 ...
B+树的定义:     1.任意非叶子结点最多有M个子节点;且M>2; 2.除根结点以外的非叶子结点至少有 M/2个子节点; 3.根结点至少有2个子节点; 4.除根节点外每个结点存放至少M/2和至多M个关键字;(至少2个关键字) 5.非叶子结点的子树指针与关键字个数相同; 6.所有结点的关键字:K[1], K[2], …, K[M];且K[i] < K[i+1]; 7.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树; 8.所有叶子结点位于同一层; 5.为所有叶子结点增加一个链指针; 6.所有关键字都在叶子结点出现; 可以 ...
这两篇文章发表于去年的4月。在第二部分结束的时候,我说:       “矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述。而 作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够 ...
接着理解矩阵。   上一篇里说“矩阵是运动的描述”,到现在为止,好像大家都还没什么意见。但是我相信早晚会有数学系出身的网友来拍板转。因为运动这个概念,在数学和物理里是跟微积分联系在一起的。我们学习微积分的时候,总会有人照本宣科地告诉你,初等数学是研究常量的数学,是研究静态的数学,高等数学是变量的数学,是研究运动的数学。大家口口相传,差不多人人都知道这句话。但是真知道这句话说的是什么意思的人,好像也不多。简而言之,在我们人类的经验里,运动是一个连续过程,从A点到B点,就算走得最快的光,也是需要一个时间来逐点地经过AB之间的路径,这就带来了连续性的概念。而连续这个事情,如果不定义极限的概念,根本 ...
前不久chensh出于不可告人的目的,要充当老师,教别人线性代数。于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次。很明显,chensh觉得,要让自己在讲线性代数的时候不被那位强势的学生认为是神经病,还是比较难 ...
利用Threerings框架制作了一个2D MMO的Demo,实现了人物在地图上移动,并且支持多个客户端。   运行方式:   1.下载压缩包并解压,例如到目录demo 2. 打开命令行,进入到demo目录,运行server.bat,启动服务端 3. 再打开一个命令行,进入到demo目录,运行client someUserName,启动一个客户端 4. 再打开一个命令行,进入到demo目录,运行client someOtherUserName,启动另一个客户端 5. 控制人物在地图上移动可以同时在另一个连接上观察到   等有时间研究了3D再出一个3D的MMO Demo。
如果要在gameGarden下开发游戏的话,因为游戏会运行在sandbox中,服务端和客户端都将用ant任务来启动,这给开发调试带来了很多的困难。下面介绍一种可以在eclipse中调试ant任务的方法。   首先在build.xml中复制server任务到一个新的任务,比如叫做server-debug,在启动虚拟机的时候加入下面的这条语句。   <jvmarg value="-Xrunjdwp:transport=dt_socket,address=5005,server=y"/>   <!-- a target for running th ...
Threerings公司在其核心的三个框架(narya, nenya, vilya)之上又封装了一层toybox,构成所谓的gameGarden,使用这个gameGarden可以快速的构建属于你自己的多人在线小游戏,并且还可以上传到gameGarden的主页上http://www.gamegardens.com/,同所有人一同来分享。   更难得的是,Threerings在gameGarden上创建了一部wiki http://wiki.gamegardens.com,并且包含了一个完整的实例教程翻转棋http://wiki.gamegardens.com/Reversi_Tutorial。 ...
通过前面几篇文章的介绍相信大家对Threerings这个框架已经有了初步的了解了,不过理论再多始终还是理论,只有通过不断实践才能真正掌握,今天我们就来应用这个框架来创建一个简单的聊天室程序,下图是这个聊天室应用的客户端界面,简单的包括了聊天记录区域,用户列表,聊天室编号列表和用户输入等。整个应用分为服务端和客户端两个部分。源代码可以在这里下载聊天应用程序helloworld。     在前面几篇文章中,我们已经介绍过DObject以及框架内部的一些通讯机制。今天我们就要利用这些DObject来帮我们发送聊天消息和用户信息给其他用户。在此之外,我们还会用到经典的MVC模型来创建我们的应用 ...
通过前两篇文章的介绍,大家应该对Threerings框架有了初步的了解,前面笔者也提到过客户端对服务端的请求主要是通过对服务的调用来实现,即InvocationService,这种调用与Java API中的远程方法调用有点类似。而Threerings在框架层面 ...
Global site tag (gtag.js) - Google Analytics