Vincent先整体理解下webgame。

1.webgame优势:打开既玩,开发成本低。

2.webgame缺点:基于浏览器,基于flash player的效率比较低

3.webgame开发:总体分为前端和后端(B/S结构)

4.前端:美术设计,交互设计。webgame是基于浏览器开发的一种多人在线游戏,前端要做很好交互体验, 采用FLASH实现是最好不过的了,同时ActionScript3.0 是FLASH脚本语言的革新,我们完全可以很好的组织代码,利用OOP的思想去组织大的项目。

5.后端:服务器端开发。我们需要两种方式去实现webgame的运作,一种是实现游戏的实时性,一种是实现游戏的数据保存。第一,采用Socket连接去实现游戏的实时机制,实现同一个房间的信息,人物的移动同步,人物公聊与私聊等。目前有些现成的Socket Server, 比如SFS, FMS, RED5等等。第二,一些数据的存储与处理,比如打怪的时候你打到了一个装备,客户端与服务器端是一种一问一答的请求模式,可以采用HTTP通信方式,用AMFPHP去建立FLASH与数据库之间的关联。

总结:技术层,as3 + JAVA Socket + AMFPHP + MySql;理论层,按需加载,用户可以尽快体验。做好数据层与表现层的分离,做好类的组织,降低耦合度。

标签:
1,123 人关注    尚无评论

用SmartFoxServer构建FLASH社区游戏应该是一件容易的事情, Madud最近有想做类DNF网游的冲动,所以先学习下SFS吧,关于SFS基本的东西,链接登录,虚拟形象的思路总结如下。

1.连接SFS

2.如果连接(触发 onConnection)成功就登陆

3.如果登陆(触发onLogin)成功,接着会自动获取房间列表(触发onRoomListUpdate),如果成功,自动或者手动加入一个房间(joinRoom方法)。

4.成功加入房间(触发onJoinRoom),获取下房间名字以及该房间的用户列表, 并加载房间, 初始化自己的虚拟形象,将该形象需要客户端共享的变量传给服务器端(setUserVariables)初始化其他的虚拟形象,getVariables返回所有用户的变量列表,通过这些从服务器端获取的变量,设置其它人此时的状态

 5.此时,已经完成 连接,登陆,加入场景,初始化自己的虚拟形象和其他虚拟形象,下面需要做的是移动,为了实时看见其它虚拟形象的移动(动作,颜色等需要其它玩家实时看见的),需要用setUserVariables 传变量给服务器端,无论什么时候只要用户变量初始化或者更新都会触发onUserVariables, 然后再触发函数里面通过getVariable()从服务器端获取此时虚拟形象的状态(坐标,颜色,服装等),从而进行控制。这样就形成了多人在线社区的实时功能

 6. 用户进入或离开房间,当用joinRoom方法成功进入到另一个房间时,也意味着成功离开了当前房间(除了第一次进入社区的情况外),这个时候会触发onUserEnterRoom和onUserLeaveRoom事件,当用户离开的时候,需要获得离开房间的用户对象,然后便利删除该对象,同样进入房间的时候把该用户加入用户列表

 7.公用聊天,用sendPublicMessage() 发送公共消息, 触发onPublicMessage 事件处理该消息

标签:
1,794 人关注    尚无评论

祖国60岁的今天,正好是Madud第一个多人游戏告一段落的时候,写点总结,希望与大家一起交流进步!

1.要达到的目的是:所有客户端实时共享画板

2.前后端结构:客户端FLASH , 服务器端SFS,mySQL

3.单机与多人:单机就是自己和电脑玩,多人游戏就是人和人玩

4.多人共享数据:要实现人和人玩,就意味着你的行为要让大家知道,这就需要你告诉大家你做了什么,所以与单机不同的是你需要用服务器去实时共享你的行为给大家!

5. 画板制作:画板分两层,上层是Sprite,下层是bitmap, 他们的关系是将sprite绘制出来的画面存到bitmap的bitmapdata中,在Sprite中,用MOUSE_MOVE事件函数里面用Sprite的graphics.moveTo, lineTo实现任意画线,然后鼠标抬起的时候,将你在Sprite上所画的保存到bitmapdata中,然后清空Sprite

6.奇淫巧计:橡皮差与清除画板的实现,同事的点子,既然画板背景色是白色,橡皮差就用白色的线条绘制就可以了,同样道理,清除画板只需要用一次遍历,将bitmapdata所有像素点的颜色变成白色就可以了

7.共享画板:为了实现共享,我需要把“画面”发送给服务器,然后服务器在把这个“画面”发送给其他客户端,这样就实现了共享. 但主意的一点是“哥发的不是画面,哥发的是字符串!”,就是说服务器要接收能接收的东西,意思是你不能发送Sprite给他,所以我们就需要借助bitmapdata,并进一步将bitmapdata进行Base64编码转换成字符串发送给服务器端,然后服务器端将字符串发送给客户端,客户端将字符串反编回bitmapdata并绘制!

8.何时发送:当你正在画线,鼠标并没有抬起的时候,大家看不到你所画的,当鼠标抬起的时候大家才能看见,就是说我鼠标抬起的时候我才告诉服务器去广播我所做的事情!不想频繁的发送,MOUSE_UP的时候再通知SFS JAVA扩展,应该算一种得当的方式吧!

9.遇到的问题:服务器对字符串接收有长度限制,处理的方法是将字符串分段发送

10.用到的两个类BitmapByte和Base64

阅读全文 »

标签:
1,865 人关注    尚无评论