第一次在这个社区发帖子……因为感觉这个社区的技术很好又有热情,所以才选择到这里发帖子,希望路过的朋友们能够帮帮忙…… 先说一下自己做的这个东西吧,我把它开源了并托管在github上,源代码地址在这里,它大概长这个样子……,最左侧是聊天系统,可以缩放到左下角,聊天系统支持广播和私聊两种方式,要先输入昵称才能进入聊天室,点击右侧昵称切换到私聊,点击右侧牛头换到广播(这奇葩的操作,我是怎么想的……)支持键盘操作,比如0-9切换枪,·键弹出系统菜单,空格跳跃,wasd行走等等,源码里有详细说明。 webGL这一块是用的Three.js这个开源库,包括模型的解析等,模型也是Three.js的例子上提供的,后台用的nodeJS,静态文件服务器跟websocket服务器没写在一起,websocket是用的nodeJS的socket.io模块,主要处理多人在线时的消息传输,先在这里感谢一下开源社区。 这个作品一眼看上去感觉效果挺好的,刚把这个东西做出来的时候也挺开心的,但是它存在很多的问题: 1.效率低下。因为要解析这个比较复杂的3D模型,所以在开始初始化的时候很容易导致浏览器崩溃。而且这个东西是前段时间通宵赶工赶出来的(那段时间郁闷极了才会这么逼自己),整个系统的结构,代码的结构,操作流程等等都没有怎么去考虑,只想赶快做出这个东西,所以有很多地方不合理,就比如支持多人在线这一块,本来应该是当有用户加入的时候动态生成一个3D模型,但是当时花了好久去弄,总是生成了一个没有纹理的模型,还不支持添加的键盘操作,然后很烦躁的把代码改成了一开始就初始化5个模型(所以多人也就最多5个人了……),然后有用户加入的时候把他们显示出来,真是坑爹…… 2.只支持chrome。只在chrome 19+做了实验,firefox问题不大,就是后来写css3动画的时候没有考虑firefox,IE就…… 3.存在一些已知或未知的bug。系统健壮性比较差,服务器偶尔会崩溃。现在github上的版本有点已知的bug还没有修改。 4.代码结构不好现在主要的逻辑都放在html文件里面了,还有不少的全局变量什么的,曾经想用seaJS模块化,但是失败了,因为事情比较多就没有继续尝试。 5.作品方向不能明确。这是最坑爹的,我一直在考虑webGL的前景以及这个作品未来的定位,webGL实在是不够成熟,自己做这个东西以后的方向是什么,自己有时也说不清楚。大一的时候看到有学长用openGL做了类似魔兽争霸的3D的游戏(效果什么的还是差很多,但是觉得确实做的很棒),但是被学院的教授们批评的体无完肤,就是因为作品方向的问题,我想现在我也遇到了类似的问题了吧…… 所以很希望有喜欢类似的作品的朋友提出建设性的意见,或者直接拿这份源码进行进一步的开发,只要这个作品能有用途就好。 简单说一下搭建服务器环境吧,server文件夹里面的server.js是静态文件服务器,要注意路径问题,start.js是websocket服务器,注意端口号。常规方式启动就好了,control_s.html里面的websocket服务器地址修改一下。 因为最近校园招聘比较多,这段时间奔波于各种宣讲会和笔试之间,按照以往的经验,一个项目放下一段时间后怎么也提不起兴趣再扩展了,所以也促成自己决心开源,不能让这个作品就这么烂尾了。当然里面吸取了很多开源的精华(虽然作品不咋的),也当作回馈开源社区,以后做出更好的作品还是会选择开源的。还有就是我的某个导师想把代码拿去,等下一级的学生做比赛用,个人觉得这种行为……而且这导师还忽悠我导致没能出去找实习,在他实验室苦逼了一暑假,真心觉得开源比拿去做比赛有意义太多太多了。在拿到正式工作的offer前估计是没多少时间写代码了,希望社区的对这个感兴趣的大神们能对那些问题进行优化或者有建设性的意见,小弟不胜感激!最近这段时间专心于校园招聘,最多修改一点小bug,也请多包涵。
嗯,在关注网易要开源的框架。。 模型用3Dmax等建模工具建好(我不会,在网上找的模型),导出成.js格式的文件,数据是json格式,Three.js就能解析出来了,剩下的就是建立场景,设置摄像头,灯光等
@jiyinyiyong sorry,当试图省事,就直接加了个文件夹把服务器端的东西放到server里面去了。其实server文件夹下面要新建一个app文件夹,然后把index.html,css那些东西放进去才行…
@snoopy 吴哥有时候去看看webGL和openGL,有现有的库,很容易的,我们团队有一个就搞过,但具体不清楚,做出来的东西很神奇,据说是用js操作显卡的东东. http://mrdoob.github.com/three.js/
有谁遇到过客户端socket.io连接上服务器端之后,服务器端不断接受到同一个客户端的连接请求,感觉客户端在不断轮询,不断触发服务器端的connection事件(我用的是express-2.5),不一会就产生大量的日志信息,都快把我的服务器撑爆了~~~~,不得不暂时关闭socket连接了。有什么方法能避免么?