RIX 编程应该是快乐的

3九/100

好用的地图编辑器 gridarta

这段时间在为网游教程找一个相匹配的地图编辑器,虽然几乎每个游戏都有地图编辑器,但我却未能找到比较满意的,绝大部分的地图编辑器都是不公开的,还有很大一部分地图编辑器都是只能在指定的游戏中使用的,剩下的只有歪瓜劣枣了。我找了几个候选的,mappy,hust,gridarta,并分别试用了下:

mappy,功能强大,支持种类多,支持多层,问题是,它怎么就不支持层透明呢?新建一个层就看不到下面的层了,还有,地图分块,是按照竖向排列的,无法在原始图上选择,结果超级的浪费眼睛不说,还是黑灯瞎火的。放弃掉。值得一提的是,这个有pro版,需要花钱的,我没钱,不知道情况如何。反正被我第一个pass掉了。

hust,应该是国产的,版本号挺高,4.2了,我创建了一个比较大的图,512x512的,这下悲剧了,地图块8x8的,太小了,想要放大?我没有找到明显的地方。只支持方块,无斜视角。我个人比较偏好斜视角的,但苦于素材难找,觉得方块的也将就着吧。但也不要大图无法创建啊。尝试了几下,考虑到身体健康,只好放弃了(非常不甘心,我本来期望挺高的)。

gridarta,我其实下载的是daimonin的mapmaker,考虑到编译环境等等,在用之前,我已经做好了失败的准备,甚至考虑着自己也写一个了。结果发现还不错,直接可以了,还附带有大量的资源(可惜没有我最想要的外景的资源,比如房子什么的)。斜45度,支持插件操作,默认保存的都是文本,本来准备写一个数据转换的,但又一想,先看看插件如何吧。然后看它的README,才发现原来是gridarta啊,里面已经有了一个插件了,看了下代码,java的,但关于这方面的文档几乎没有,gridarta也找到(或许我粗心)。只好将gridarta的代码svn co了,然后大致的浏览,分析下各个部件的作用,而外国人写的java项目,代码的位置都变态的深,模块又多,让我狂点鼠标。然后写个测试的插件,折腾了一天,大约明白怎么回事了,然后今天,写了下数据的导出。稍后给出源代码。总算是找到一个比较满意的了:

下面是插件的代码:

26八/100

一起做网游吧【9.5】:补丁,设置服务器地址和端口及网页管理界面更新

首先,代码还在上次的位置,我替换了压缩文件,不用再说,以后也是如此。

前几天,我准备找一个free的地图编辑器,当然,最好是open source的,同时,看看dojo,研究dojo而不是extjs是由于相比来说,dojo的模块划分我比较喜欢,而且,dojo中的测试程序都很有针对性和独立性,这个我比较喜欢。顺便将服务器的管理界面更新了下,修改成了基于dojo的。我对于extjs并没有什么恨意,只是由于不太习惯风格而已,对于extjs比较熟悉的人可能觉得extjs比较好,不管怎么,这只是一个风格而已。顺便提下学习的过程,半天时间来熟悉下小例子,半天时间将界面的布局弄好,一天时间将表格加上,用了各种办法,大概花了两天时间研究出了如何更新表格内容(可能不是正规的方法,谁要是知道的话,还请赐教)。

前段时间,我也又在落灰的wii上安装了erlang,然后将服务器仍在那个上面,运行,然后客户端在切换服务器的时候客户端挂掉!!!,原因在于服务器返回的地址是"127.0.0.1",这是个比较严重的问题,决定将进入游戏之后的内容稍微缓和一下,反正地图编辑器还没有怎么熟悉,地图的资源也要慢慢找,就顺便的添加了下服务器的IP和端口设定,使服务器启动的时候还是监听本地的"127.0.0.1",返还给客户端的可以是自定义的IP地址,提供端口设定是考虑到可能需要路由进行端口映射。

先说服务器内容,使用下面的函数可以获得服务器的公网IP,至于能不能公网直接访问,这就要看你的服务器的IP设定了。

?Download server.erl
1
2
3
4
5
6
7
8
9
10
       getip() ->
    case http:request(get, {"http://www.ip138.com/ip2city.asp",[]},[],[{version, 1.1}]) of 
        {ok, {{_,Ok,_},_, Content}} ->
            Index1 = string:rstr(Content, "["),
            Index2 = string:rstr(Content, "]"),
            Ip = string:sub_string(Content, Index1+1, Index2-1),
            Ip;
        Other ->
            io:format("~p~n", [Other])
    end.

我是从ip138.com获得的公网IP,希望不会带来什么怨言。同时,添加了一个reload函数,因为现在服务器还不是非常的问题,可能由于某些未处理的原因,造成服务器的端口监听关闭,使用下面这个函数可以重新加载。需要传递IP和Port的话,则是根据设定的ip2和port2来判定的:

20八/100

ubuntu关于apache的用户配置

最近研习javascript的编程方面,为了方便管理,我将apache里面的www目录中,建了一个链接到我自己的某个文件夹下,却发现死活都能不行,总是说权限问题,网上大都说什么selinux之类的问题,我却未用selinux。总也修改不对,后来发现原来是一些权限问题:

首先,修改用户的目录权限为可执行:

1
       chmod o+x /home/username

修改想要链接到/var/www(默认的apache网页根目录)的目录权限(这里是web):

1
       chmod a+rx /home/username/web

这样的话,如果你在/var/www里面建立一个链接到username/web的快捷方式,所有的都可以运行了。想到mac下可以通过~username的方式来运行,ubuntu默认的是~/public_html,建立一个,修改权限(同web),看下是否可以,结果发现可以列出目录,可以看html,但就是没办法运行php,后来在php5在apache2的mods配置中找到答案,默认为/etc/apache2/mods-availabe/php5.conf,mods-enable中的那个仅仅是个链接。打开,注释掉关于mod_userdir.c中的"php_admin_value engine Off"一句就可以了。

18八/100

linux增加swap分区

这两天在家里整wii上的linux服务器,在编译最新的erlang R14的时候,发现出现了gcc编译错误,说什么gcc的bug,要报告什么的,系统将cc1什么的kill掉了。找遍所有资料,均不见踪影啊,检查了gcc的版本,不是倒霉的4.3.0,从官方的下载R13,也是如此,查看了所有补丁,也没有,我甚至添加了debian的其他的源,然后更新系统,乖乖,下载需要N小时,我远程连着,不能总开着啊,就将电视盒打开,然后更新吧。反正没事也是没事,就编译R14玩吧,中间知道结果的,gcc的bug,在我去看wii的更新情况的时候,突然发现屏幕上出现了些不同寻常的内容:

out of memory: killed process 7785 (cc1)

o(∩∩)o...哈哈,原来是这儿的问题。用free看看,原来没有swap,内存总数也就80+MB,当然不够了,从网上随便找了下,看如何调整swap,一下就从http://www.cnblogs.com/ovliverlin/archive/2007/07/23/828671.html发现了:

1
2
3
       dd if=/dev/zero of=/home/swap bs=1024 count=128000
       mkswap /home/swap
       swapon /home/swap

考虑到内存实在太小,SD卡速度不说,容量也并非海量,所以设置了128MB大小的交换磁盘。

最后,添加到fstab表,启动自动启用:

1
       echo -e "/home/swap    swap    swap    defaults    0    0" >> /etc/fstab

这下终于可以顺利进行了。

17八/100

笔记:whitte linux的无线网卡启动

之前提到过关于wii来做服务器,前两天又重新弄了下,结果发现无线总是启动不起来,起初以为是内核的事情,后来才发现用的命令错误。

起初使用的是下面的命令:

1
       ifconfig wlan0 up

但该命令启动网卡后,无法获得ip地址等等,根本就无法使用,还说什么qos错误,hwcrypt之类的话。后来查了下资料,发现用下面的命令就完全没有问题了。

1
       ifup wlan0

关闭么,自然就是:

1
       ifdown wlan0

了,上面的所有命令都需要root权限。

16八/100

一起做网游吧【9】:多服务器支持

兑现上周的承诺

代码的位置:

;

先说下编译的方法,满足某些人的好奇心。截图就不提了,之前的有。

由于这次引入了web的方式,所以编译的准备工作有些麻烦。我使用mochiweb来作为web的服务器端程序,extjs作为客户端的javascript程序库,这两个库均未包含在git的仓库中,但可以通过执行others目录中的get_others.sh来获取,这个简单的脚本将获取mochiweb和extjs,并放置到相应的位置中,同时还设置了几个链接。之所以设置链接是由于压缩成7z之后,原来的链接特性消失了,维护不方便。对于ubuntu 10.04和fedora13来说,还有一个问题是关于mochiweb的,貌似最新的mochiweb需要使用erl R14编译,但这两个发行版都是R13(其他的我没有试),编译的时候会出错的,最简单的就是将每个erl最后的那些个测试删掉就可以了。如果服务器的源代码编译不过去,则可能是中文注释的问题,之前有erlang的中文注释补丁的办法,这里不说了。

首先执行get_others.sh,然后到server下执行make,到client下面最里面的makefile目录下执行make,就完成了。(当然,环境变量什么的还是需要手动设置的。)

运行就是以前的start-dev.sh,没什么好说的。下面开始技术分析:

在记录中(schema.hrl)的client段,变成了下面的样子:

?Download schema.hrl
1
2
3
4
5
6
7
       -record(client, {server = none, 
                 player = none,
                 server_name = none,
                 server_port = none,
                 server_ip = none,
                 server_pid = none,
                 game=none}).

添加的变量类型主要是为了进行多服务器的支持,server_pid为port端口的pid值,这样客户端来区分当前在哪一个服务器上。其他的没什么说明的。

server数据库中的记录格式:

?Download schema.hrl
1
2
3
4
5
6
7
8
9
10
11
        -record(server, {
          id,
          socketpid = none,
          ip = none,
          port = none,
          name = none,
          enable = false,
          maxuser = 5000,
          curuser = 0,
          pid = none
          }).
13八/100

一起做网游吧【8.5】:轻松一下

网游的教程下周估计可以更新。目前正在处理文档和bug修正中。在最近的两周中,我几乎全力以赴在了网页上了,从时间上计算,大概占用了7天以上的时间,因为周末大部分时间要配老婆,所以,服务器的代码其实占用时间不多。

今天终于完成了大约90%的量了,当然,中间有些特性不得不放弃了。所以可以轻松一下。反思下这次的失误和教训,顺便说下将要更新的内容。

未能完成的内容:

1.web管理界面的数据更新,原因在于自己对javascript没有想象中熟悉,对于extjs库,没有时间去理清细节。这直接导致了制作周期比想象中的要长。

2.web管理界面中的事件及输出日志到web页面。由于第一点的原因,这部分未能有时间添加。以后可能作为一个专题来说。

3.web管理界面中的功能。没有想好该如何布局,即使想好了,由于对extjs不熟悉,暂时也没有能力添加。

已经完成的内容:

1.多服务器结构。虽然这个特性是我两周之前临时决定要增加的,但觉得还是提前处理比较好,而且,这个结构和之前计划的不太一样。之前的计划是,某台服务器作为唯一的接入点,将其他功能可以布置到其他的服务器上,其他服务器对于客户端来说,不可看见。这样做的好处是处理比较简单。缺点是接入服务器要有足够容量的连接支持,如果接入点出现故障的话,则没有人能接入了。现在我将这个分开了。在开始阶段,接入点还是只有一个可见,当用户登录之后,出现了服务器列表,每个服务器可能是由不同的服务器组合而成的。在加入服务器之后,用户将在该服务器下找一个当前用户最少的服务器进行重新连接。这样分担开了接入点的压力。当然,这样处理会有引发一些小问题。在代码更新的时候将会做特殊说明。

2.web管理界面的初步进行。虽然该部分我进行了努力的奋斗,虽然该部分进度非常的糟糕,但还是可以看的见点东西。

3.服务器的动态添加和关闭,移除等。监视状态的钩子植入(目前有些bug,可能是我整理代码引起的。)

在完成内容部分,虽然看上去不是很难,但其中的细节处理却比较的麻烦。而多服务器的结构,直接导致了之前数据库结构的重新安排。改动还是比较大的。之前提到的tcp_server,觉的有点满足不了要求,想改,却来不及了。通过调整结构,也总算可以了。

4八/100

网游教程的代码位置

嗯,该如何解释这次事情呢?

之前的代码一直放在dropbox的共享目录中,今天才看了dropbox中的帮助文件,发现不支持共享目录,而我则是将代码的仓库直接放在共享目录中,开发的时候则是链接到本地目录下。需要上传的时候则将dropbox联网,自动完成了。

但dropbox不支持目录共享,我今天才注意,因为同步某个参考文件的时候由于网络问题,速度超慢,无所事事就看了帮助文档。在国内看来,上dropbox的条件是越来越艰苦了。

于是想看看有没有支持目录共享,类似于dropbox的网盘,最后找到了4shared。关键是各平台支持。唯一令我不满的是,不像dropbox那样,自动上传。因为我可不想每时每刻总挂在那里,而在ubuntu下,挂上这个,gui端不管点开那个文件夹都超慢,弄得我只好用emacs来进行文件夹浏览了。在fedora下稍好,但还是不想列出网盘的目录都要等半天,真希望出个dropbox的方式啊。

废话半天,今天的主角登场:(需要登入)

下次更新的时候,再增加一个仓库的压缩文件,共享目录,浏览可以,但不可以整个目录往下端(我没有找到方法,谁知道的话告诉我声),下载整个目录需要掏钱的。暂时先这样,最近一段时间在和网页大战,放弃的时间太长了,当初学的时候都还在html状态,谁要是对extjs熟悉的话,麻烦教教我,懒的仔细看帮助了。网页目前主要是为了查看各个服务器的状态以及进行管理。下一次的代码服务器将支持客户端的网页下载(目前就只有一个j2me客户端),以及通过网页来查看服务器状态,简单的管理服务器。但我的网页UI的代码能力,目前处在比0稍高的位置。

29七/100

linux通过http代理安装dropbox

其实没啥好说的,主要是提醒自己用的。

从网上下载下来linux的安装程序或者从源代码编译,第一次运行的时候需要从服务器上下载文件才能使用。默认的话是直接连接服务器的,但是都知道,在国内呢,一切正常的事情都会搞出不正常来,就这么搞来搞去的,弄的你没办法下载了。可以在命令行下这样来通过代理来连接服务器:

1
http_proxy=http://127.0.0.1:8580 dropbox start -i

上面的命令,8580后面有一个空格,不然就找不到命令了。代理在写的时候,需要在前面填上http://,不然没办法连服务器的,就这个玩家整了我好大一会。至于代理从哪儿弄么,除了火星人,地球人都知道了。

26七/100

一起做网游吧【8】:初步的登录客户端

忙死了,忙死了。

将之前教程的客户端做出来了。部分代码是很早之前写的,部分代码是新改写的。放的位置在之前的帖子中有提到。使用j2me做客户端主要是因为我懒的说太多的内容,基本上每个函数和变量都有注释。如果还看不懂的话,那我就没办法了。值的注意的是网络线程的接收部分,有一个单次接收的最大的限制,不想弄的那么完美,如果想要解决的话,也不是很难。写代码要详细的注释绝对是一件体力+耐力的劳动,几乎每次写注释用的时间要比写代码用的时间要长,不小心用别的什么编辑器打开看的时候,或者因为使用的电脑不对,将文件转换的时候,一个不小心说不定就引起这个那个的问题,实在太麻烦了。

抱怨完了,简单说下编译方法,我是在linux下编译的,jdk安装在用户自己目录的bin中,我使用了一个链接,这样更新jdk的时候就只用修改下链接就行了,WTK也是类似的位置和方法,在client/mobile/phone/j2me中的makefile中可以看到,使用这么长的目录是因为说不定哪天心情好的时候,会弄个其他的平台。编译么,到上面长长的目录中执行make就行了,简单吧。启动模拟器的话,make startemu就行了。

写了长长的代码,却无话可说,而有的时候,可能只是最简单的几行代码,却值得浪费大把大把的唾沫。就像最近在看的mtk的东西,发现在调用memcpy的函数,系统默认的函数比我自己写的函数高效的多,使用不同的优化办法,我将linux内核代码的memcpy拖出来,发现和自己的想比,没有太大的差别,而与sdk中的memcpy想比,差老大一截,然后又用汇编优化,提升并不明显,使用汇编的块传送,循环指令保持到3行,还是差一截。看来sdk中的函数可能使用了硬件加速了。只好看看CP15了。

Page 1 of 812345...Last »