游戏心得

多个swf文件共享AS3 ShareObject

今天不推荐游戏,写写关于AS3 ShareObject的事情,要对得起网站的名字,游手也要好学。

标签:
尚无回复

AS3 优化 之 FOR内循环

写游戏只要有思路,就能实现,但这也只是从功能角度出发,能不能有好的效率,才是关键,于是想积累一些关于优化方面的知识。
关于AS3 FOR内循环的优化

Vincent对webgame开发的整体理解

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;理论层,按需加载,用户可以尽快体验。做好数据层与表现层的分离,做好类的组织,降低耦合度。

标签:
尚无回复

Madud对SmartFoxServer的学习:登录,建立虚拟形象以及聊天

用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 事件处理该消息

多人画板的实现 “哥发的不是画面,哥发的是字符串”

祖国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

标签:
尚无回复