某传说中的网游 0.9 beta 完成

=。= 时隔3个月。。。

在某网游公司工作3个月了啊。觉得学到了很多很多很多的东西。

于是原本打算准备截稿的毕业设计又拿出来大修了一番。基本整个框架都重写一遍了。

加入许多新模块:游戏状态机,消息管理器,模型管理器,聊天管理器,战斗管理器…
消息管理器是在之前的基础上加上了观察者订阅模式,感觉整个结构都清晰明了多了。
加入游戏状态机后,各个状态之间的切换也完全不用担心资源的释放问题了,很赞的说。

也移除了非常多的东西,事件管理器(记得以前还特别为此写过一篇文章,实际上这货只在需要大量监听的时候才用的到,但是引入了游戏状态机后,基本上监听事件根本多不起来,也不会遇到忘记移除的情况),界面管理器(使用Aswing后,这货基本就死了)。

服务端基本全部重写了,加入了心跳包(之前判断线是以获取amf对象失败的catch中的出错判断移除,bug很多)。 现在改为心跳包无响应后自动断开连接。
加入了防止重名登录。 多线程命名也因此改为以用户ID来取名,而ID的获取是根据线程池的大小来决定。

把客户端和服务端通信的包头全部改为数字了,之前用字符串本来是为了好理解,但是jdk7 之前的sdk 都不支持 字符串的 switch,因此写的都是 if,else if.太坑爹了。 现在改为数字后,全部改写为 switch 的形式。。 比较懒的迁移到 jdk7 上面。

近日完成如下项目后,正式截稿打包吧~
1.客户端战斗特效.
2.延迟包计算,人物移动速度补偿(看心情).
3.完整剧情.
4.对话框人物立绘.
4.地图NPC.

嘛嘛~还是要感谢公司里的 服务端的达~ 在多次沟通项目中的bug过程中,对服务端的思想有了新的认识。
顺便感谢下主程 成~ 经常说我代码又写错地方了,对整个程序的结构有了非常深的了解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        public function Main():void
        {
            stage?init():addEventListener(Event.ADDED_TO_STAGE,init);
           
            var myMenu:ContextMenu=new ContextMenu();
            myMenu.hideBuiltInItems();
            contextMenu=myMenu;
        }
       
        private function init(event:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE,init);
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
           
            bgBmd=new bg()
            bgBmd.x = stage.stageWidth - bgBmd.width >>1;
            bgBmd.y = stage.stageHeight - bgBmd.height >>1;
            addChild(bgBmd);
           
            Config.sw=stage.stageWidth;
            Config.sh=stage.stageHeight;
           
            stage.addEventListener(Event.RESIZE,stageResize);
           
            GameStateManager.instance.init(this);
        }

整个游戏的入口类 由原本的 1000+ 行,变成了现在的不到 50行。其余部分全部扩散到 游戏状态机的各个部分中了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.