一起做网游吧【8.5】:轻松一下
网游的教程下周估计可以更新。目前正在处理文档和bug修正中。在最近的两周中,我几乎全力以赴在了网页上了,从时间上计算,大概占用了7天以上的时间,因为周末大部分时间要配老婆,所以,服务器的代码其实占用时间不多。
今天终于完成了大约90%的量了,当然,中间有些特性不得不放弃了。所以可以轻松一下。反思下这次的失误和教训,顺便说下将要更新的内容。
未能完成的内容:
1.web管理界面的数据更新,原因在于自己对javascript没有想象中熟悉,对于extjs库,没有时间去理清细节。这直接导致了制作周期比想象中的要长。
2.web管理界面中的事件及输出日志到web页面。由于第一点的原因,这部分未能有时间添加。以后可能作为一个专题来说。
3.web管理界面中的功能。没有想好该如何布局,即使想好了,由于对extjs不熟悉,暂时也没有能力添加。
已经完成的内容:
1.多服务器结构。虽然这个特性是我两周之前临时决定要增加的,但觉得还是提前处理比较好,而且,这个结构和之前计划的不太一样。之前的计划是,某台服务器作为唯一的接入点,将其他功能可以布置到其他的服务器上,其他服务器对于客户端来说,不可看见。这样做的好处是处理比较简单。缺点是接入服务器要有足够容量的连接支持,如果接入点出现故障的话,则没有人能接入了。现在我将这个分开了。在开始阶段,接入点还是只有一个可见,当用户登录之后,出现了服务器列表,每个服务器可能是由不同的服务器组合而成的。在加入服务器之后,用户将在该服务器下找一个当前用户最少的服务器进行重新连接。这样分担开了接入点的压力。当然,这样处理会有引发一些小问题。在代码更新的时候将会做特殊说明。
2.web管理界面的初步进行。虽然该部分我进行了努力的奋斗,虽然该部分进度非常的糟糕,但还是可以看的见点东西。
3.服务器的动态添加和关闭,移除等。监视状态的钩子植入(目前有些bug,可能是我整理代码引起的。)
在完成内容部分,虽然看上去不是很难,但其中的细节处理却比较的麻烦。而多服务器的结构,直接导致了之前数据库结构的重新安排。改动还是比较大的。之前提到的tcp_server,觉的有点满足不了要求,想改,却来不及了。通过调整结构,也总算可以了。
网游教程的代码位置
嗯,该如何解释这次事情呢?
之前的代码一直放在dropbox的共享目录中,今天才看了dropbox中的帮助文件,发现不支持共享目录,而我则是将代码的仓库直接放在共享目录中,开发的时候则是链接到本地目录下。需要上传的时候则将dropbox联网,自动完成了。
但dropbox不支持目录共享,我今天才注意,因为同步某个参考文件的时候由于网络问题,速度超慢,无所事事就看了帮助文档。在国内看来,上dropbox的条件是越来越艰苦了。
于是想看看有没有支持目录共享,类似于dropbox的网盘,最后找到了4shared。关键是各平台支持。唯一令我不满的是,不像dropbox那样,自动上传。因为我可不想每时每刻总挂在那里,而在ubuntu下,挂上这个,gui端不管点开那个文件夹都超慢,弄得我只好用emacs来进行文件夹浏览了。在fedora下稍好,但还是不想列出网盘的目录都要等半天,真希望出个dropbox的方式啊。
废话半天,今天的主角登场:(需要登入)
下次更新的时候,再增加一个仓库的压缩文件,共享目录,浏览可以,但不可以整个目录往下端(我没有找到方法,谁知道的话告诉我声),下载整个目录需要掏钱的。暂时先这样,最近一段时间在和网页大战,放弃的时间太长了,当初学的时候都还在html状态,谁要是对extjs熟悉的话,麻烦教教我,懒的仔细看帮助了。网页目前主要是为了查看各个服务器的状态以及进行管理。下一次的代码服务器将支持客户端的网页下载(目前就只有一个j2me客户端),以及通过网页来查看服务器状态,简单的管理服务器。但我的网页UI的代码能力,目前处在比0稍高的位置。
一起做网游吧【8】:初步的登录客户端
忙死了,忙死了。
将之前教程的客户端做出来了。部分代码是很早之前写的,部分代码是新改写的。放的位置在之前的帖子中有提到。使用j2me做客户端主要是因为我懒的说太多的内容,基本上每个函数和变量都有注释。如果还看不懂的话,那我就没办法了。值的注意的是网络线程的接收部分,有一个单次接收的最大的限制,不想弄的那么完美,如果想要解决的话,也不是很难。写代码要详细的注释绝对是一件体力+耐力的劳动,几乎每次写注释用的时间要比写代码用的时间要长,不小心用别的什么编辑器打开看的时候,或者因为使用的电脑不对,将文件转换的时候,一个不小心说不定就引起这个那个的问题,实在太麻烦了。
抱怨完了,简单说下编译方法,我是在linux下编译的,jdk安装在用户自己目录的bin中,我使用了一个链接,这样更新jdk的时候就只用修改下链接就行了,WTK也是类似的位置和方法,在client/mobile/phone/j2me中的makefile中可以看到,使用这么长的目录是因为说不定哪天心情好的时候,会弄个其他的平台。编译么,到上面长长的目录中执行make就行了,简单吧。启动模拟器的话,make startemu就行了。
写了长长的代码,却无话可说,而有的时候,可能只是最简单的几行代码,却值得浪费大把大把的唾沫。就像最近在看的mtk的东西,发现在调用memcpy的函数,系统默认的函数比我自己写的函数高效的多,使用不同的优化办法,我将linux内核代码的memcpy拖出来,发现和自己的想比,没有太大的差别,而与sdk中的memcpy想比,差老大一截,然后又用汇编优化,提升并不明显,使用汇编的块传送,循环指令保持到3行,还是差一截。看来sdk中的函数可能使用了硬件加速了。只好看看CP15了。
windows开发的烦恼
我竟然将近一周没有更新博客了,而这一周的繁忙以至我几乎觉得昨天还是周一,周一到周五就在一晚上之间度过了。那么,这一周做了什么事情?我本来计划做一个关于语言的陷阱系列,还有erlang的某些不统一的地方(这个还没有考察好),这一周,公司的项目碰到了一点不大不小的问题。为了将项目移植到一个还未公布的手机之上,但该平台的提供的SDK却异常的简陋,提供了pnglib,zlib,但无法用gcc链接,提供了blitter,也无法链接,我移植的是一个2D的游戏,但只有opengles可以使用,blitter无法提供描绘到缓冲之上,而这是我必须要使用的。最后终于尝试使用opengles的FBO来解决问题,但竟然显卡不支持,而在经过很多很多的显卡考察之后,挑出合适的显卡之后,opengles 2.0不支持1.0的很多描绘函数(很可能这是一个规范,我目前还未用过2.0)。我必须要尽快的学会GLSL,然后熟练的使用它,因为我只有2周的时间来进行剩下的事情。
利用周末的时间,我决定在家里尝试下opengles 2.0的学习,家里本身有cygwin的环境,在一切准备就绪之后,发现没有ssh,scp等。cygwin版本不对,重新安装,发现许多软件包没有,只好在网上找了个脚本,将所有软件的下载地址提取出来,导入到迅雷中,总过将近5000个软件包,但迅雷每次却只能添加1000左右。我能做的只有等待,查看资料,听着迅雷不紧不慢的叮叮响,某些软件包还报告说无法找到等等。
使用windows开发竟然如此的痛苦,我想念在linux下开发的感受,我在ubuntu下,当我刚装完ubuntu之后(最新的软件安装程序大约在20分钟之内完成,我一直只下载livecd),安装开发组件,大约不到1GB,使用国内的源的话大约1个小时就完成了,然后就可以快乐的进行开发了,缺少什么的话apt-get就可以了,查api等等的话也很方便,而我在windows下,从昨天就已经在望眼欲穿了。
关于硬件的问题,linux下对与显卡对opengl的支持情况,简单的命令就可以获知了,而我在window下却不知道如何才能知道,准确的来说,我甚至都不知道windows到底在使用哪一个opengl的动态库。我曾经在我电脑上装了个kmplayer,就是看电影的那个,很不错的,就是在放dvd r9的时候会将字幕定位到不知道什么地方,然后我不管怎么配置都不可以,当我安装了smplayer,还有一些已经记不起的播放器之后,它竟然工作正常了,而我不知道该去掉哪一个。对于解码的dll库,在我的系统中可以找到好几个针对同一文件的,我不知道哪一个是正确的。我所知道的就是,让他们保持那个样子,只要他们还没有表现出对你不满。
我在windows上装了很多的程序,有很多的程序都带有相同的dll,相同的库,某些相同的功能,这些都需要占用我的磁盘,内存,影响我的运行性能,最要命的就是,你必须老老实实的服从软件的安排,不得丝毫的反抗,否则,总有一部分不会正常工作的。就拿下载来说吧,我不知道为什么迅雷有了一个最大的下载数量限制,我已经忍受了看广告,分享网络,弹出窗口,但获得的却不是我所想要的功能,为什么下载错误之后不能重新来下载?我分明已经将下载错误的重试值提高到最大了。而我之前曾经写过的ssh传输的脚本,大约2000多个软件包,没有广告,传输错误会自动重新传输,直到成功为止,没有弹出窗口,我有些时候,甚至已经忘记了还有一个东西在默默的给我干活,这才是享受。我曾经提到过,我的一个自动提交版本的脚本,它工作了整整将近2年的样子,我甚至从未注意到它,自动关机的脚本,我几乎都忘了工作的电脑还是需要关机的,这些脚本,几乎从来不会出错(关机脚本出错过一次,windows蓝屏了,无法关机),直到某一天我不小心人为的影响了它们。
有些时候,当我面对windows的时候,我都快要分不清我面对的是一个人还是一台电脑,我只知道电脑对面的人的位置,都快成电脑了。而在linux下的时候,我明白,我是在创造,不管是否已经有人已经创造出来相同的了,对于我来说,那是创造,而这,才是生活。
试用slitaz
这几天本来是想将老机器做服务器,找一个占用内存比较小的版本,(现在机器挂掉了),原来老机器用的是puppy,puppy是不错,但每次意外挂机总不能正常进去,某些需要配置。查找期间,看到了slitaz,只有30MB左右,在虚拟机里面跑了一下,大概占用内存几十MB。老机器挂掉之后,我买的8G存储卡到了,就想转到存储卡上吧,省的在每台电脑上都要配置开发环境。于是就开始了试用之旅。
brew 使用浮点数关于libspace.0的错误
在BREW中,能不使用浮点数,尽量不要使用,如果要使用浮点数,可以用定点数来模拟。但是,不幸的是,拿到的代码可能很多都大量使用了浮点数,当将其中的浮点数替换完之后(我是用重定义一个浮点类,然后使用宏替换的),在链接过程中,总出现libspace.o的错误,大致意思是使用了.bss。下面的情况是使用了.bss段,但编译的时候不会出现任何警告,但链接的时候会出现libspace.o错误。
int + float
如果你写出下面的代码:
int temp = 5; var = temp + 1.0; //var 为float或者double类型