`
hereson2
  • 浏览: 462128 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[Socket+AMF3]给合Flash的Socket和AMF3来尝试开发web游戏引擎

阅读更多

  今天尝试用Socket和AMF3来开发web游戏引擎,用Flash的好处就是因为插件普及率高,无需用户另行安装,所以用Flash来开发丰富的Web游戏成为很好的选择。服务端仍然采用apache mina+AMF3来写Socket服务程序。
演示效果图:
/upload/amf3game.jpg

客户端代码:游戏角色类

  1. /**  
  2. * ...  
  3. * @author Kinglong  
  4. * @version 0.1  
  5. */   
  6.   
  7. package  project.test {  
  8.   
  9.     import  flash.display.*;  
  10.     import  flash.events.*;  
  11.       
  12.     import  gs.TweenLite;  
  13.       
  14.     public   class  GameRole  extends  Sprite {            
  15.         private  var _id:uint;  
  16.         private  var tween:TweenLite;  
  17.         public  function GameRole(id:uint,self:Boolean= false ) {  
  18.             mouseChildren = false ;  
  19.             mouseEnabled = false ;  
  20.             _id = id;  
  21.             if (self){  
  22.                 this .graphics.beginFill( 0xFF0000 );                
  23.             }else  {  
  24.                 this .graphics.beginFill( 0x000000 0.6 );               
  25.             }  
  26.             this .graphics.drawRoundRect( - 10 , - 10 20 20 10 10 );  
  27.             this .graphics.endFill();  
  28.         }  
  29.           
  30.         public  function move(x:Number,y:Number): void  {  
  31.             remove();  
  32.             this .x = x;  
  33.             this .y = y;  
  34.         }  
  35.           
  36.         public  function to(x:Number, y:Number): void  {  
  37.             remove();  
  38.             tween = TweenLite.to(this 1 , { x:x, y:y } );  
  39.         }  
  40.           
  41.         public  function get id():uint {  
  42.             return  _id;  
  43.         }  
  44.           
  45.         private  function remove(): void  {  
  46.             if  (tween !=  null ) {  
  47.                 TweenLite.removeTween(tween);  
  48.                 tween = null ;  
  49.             }  
  50.         }  
  51.           
  52.           
  53.     }  
  54.       
  55. }  



文档类

  1. /**  
  2. * ...  
  3. * @author Kinglong  
  4. * @version 0.1  
  5. */   
  6.   
  7. package  project.test {  
  8.   
  9.     import  flash.display.*;  
  10.     import  flash.events.*;  
  11.     import  flash.net.Socket;  
  12.     import  flash.net.ObjectEncoding;  
  13.     import  flash.text.TextField;  
  14.     import  flash.utils.ByteArray;  
  15.     import  flash.utils.Dictionary;  
  16.       
  17.     import  com.klstudio.data.Map;  
  18.       
  19.     public   class  TestGame  extends  Sprite {    
  20.         private  var _socket:Socket;  
  21.         private  var _id:uint;  
  22.         private  var _lists:Map;  
  23.         private  var _info:TextField;  
  24.         public  function TestGame() {              
  25.             _info = new  TextField();  
  26.             _info.selectable = false ;             
  27.             _info.text = "未连接" ;  
  28.             addChild(_info);  
  29.               
  30.             stage.addEventListener(MouseEvent.MOUSE_UP, handler);             
  31.             _lists = new  Map();  
  32.             _socket = new  Socket();  
  33.             _socket.objectEncoding = ObjectEncoding.AMF3;  
  34.             configureListeners(_socket);  
  35.             _socket.connect("localhost" 110 );            
  36.         }     
  37.           
  38.         private  function configureListeners(dispatcher:IEventDispatcher): void  {  
  39.             dispatcher.addEventListener(Event.CLOSE, handler);  
  40.             dispatcher.addEventListener(Event.CONNECT, handler);  
  41.             dispatcher.addEventListener(IOErrorEvent.IO_ERROR, handler);  
  42.             dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handler);  
  43.             dispatcher.addEventListener(ProgressEvent.SOCKET_DATA, handler);  
  44.         }  
  45.           
  46.         private  function handler(event:Event): void  {  
  47.             switch (event.type) {  
  48.                 case  ProgressEvent.SOCKET_DATA:  
  49.                     var bytes:ByteArray = new  ByteArray();  
  50.                     _socket.readBytes(bytes);  
  51.                     bytes.uncompress();  
  52.                     receive(bytes.readObject());  
  53.                     break ;  
  54.                 case  Event.CLOSE:  
  55.                     debug("连接关闭" );  
  56.                     removeAll();  
  57.                     break ;  
  58.                 case  Event.CONNECT:  
  59.                     debug("连接中..." );  
  60.                     break ;  
  61.                 case  IOErrorEvent.IO_ERROR:  
  62.                 case  SecurityErrorEvent.SECURITY_ERROR:  
  63.                     debug("连接失败" );  
  64.                     break ;  
  65.                 case  MouseEvent.MOUSE_UP:  
  66.                     var mEvent:MouseEvent = event as MouseEvent;                      
  67.                     send(this .mouseX,  this .mouseY);  
  68.                     break ;  
  69.             }  
  70.         }  
  71.           
  72.         private  function send(x:Number, y:Number): void  {  
  73.             if  (!_socket.connected) {  
  74.                 return ;  
  75.             }  
  76.             var bytes:ByteArray = new  ByteArray();  
  77.             bytes.writeObject( { event:"move" , x:x, y:y } );  
  78.             bytes.compress();  
  79.             _socket.writeBytes(bytes);  
  80.             _socket.flush();  
  81.         }  
  82.           
  83.         private  function receive(object:Object): void  {  
  84.             switch (object.event) {  
  85.                 case   "init" :  
  86.                     init(object.id);  
  87.                     for  (var i:uint =  0 ; i < object.list.length; i++ ) {  
  88.                         var item:Object = object.list[i];  
  89.                         add(item.id, item.x, item.y);  
  90.                     }  
  91.                     break ;  
  92.                 case   "move" :  
  93.                     move(object.id, object.x, object.y);                      
  94.                     break ;  
  95.                 case   "remove" :  
  96.                     remove(object.id);                    
  97.                     break ;  
  98.                 case   "add" :  
  99.                     add(object.id);  
  100.                     break ;  
  101.             }  
  102.         }  
  103.           
  104.         private  function init(id:uint): void  {  
  105.             this ._id = id;  
  106.             add(id);  
  107.         }  
  108.           
  109.         private  function add(id:uint, x:Number = undefined, y:Number = undefined): void  {              
  110.             x = x || stage.stageWidth / 2 ;  
  111.             y = y || stage.stageHeight / 2 ;  
  112.             if  (_lists.containsKey(id)) {  
  113.                 return ;  
  114.             }  
  115.             var role:GameRole = new  GameRole(id,_id == id);  
  116.             role.move(x,y);  
  117.             addChild(role);  
  118.             _lists.put(id, role);  
  119.         }  
  120.           
  121.         private  function move(id:uint, x:Number, y:Number): void  {  
  122.             if  (_lists.containsKey(id)) {  
  123.                 var role:GameRole = _lists.get(id);  
  124.                 role.to(x, y);  
  125.             }  
  126.         }  
  127.           
  128.         private  function remove(id:uint): void  {  
  129.             if  (_lists.containsKey(id)) {  
  130.                 var role:GameRole = _lists.remove(id);  
  131.                 trace(role);  
  132.                 if  ( this .contains(role)) {  
  133.                     removeChild(role);                    
  134.                 }  
  135.                 role = null ;  
  136.             }  
  137.         }  
  138.           
  139.         private  function removeAll(): void  {  
  140.             var keys:Array = _lists.keys();  
  141.             for  (var i:uint =  0 ; i < keys.length; i++ ) {  
  142.                 var role:GameRole = _lists.remove(keys[i]);               
  143.                 if  ( this .contains(role)) {  
  144.                     removeChild(role);  
  145.                 }  
  146.                 role = null ;                  
  147.             }  
  148.         }  
  149.           
  150.         private  function debug(msg:String): void  {  
  151.             _info.text = msg;  
  152.             trace(msg);  
  153.         }  
  154.           
  155.     }  
  156.       
  157. }  



这个尝试的游戏引擎功能很简单的,接下来可以加上更丰富的功能了 ...

分享到:
评论

相关推荐

    socket+AMF3

    Socket编程与AMF3在IT领域是两个重要的概念,它们分别代表了网络通信的基础和一种高效的数据序列化机制。在本文中,我们将深入探讨这两个技术,并结合提供的资源,即一篇名为“socket+AMF3”的博客文章,来理解它们...

    java socket amf3 flash game framework

    Java Socket AMF3 Flash Game Framework 是一个专门为Flash游戏设计的后端框架,它结合了Java技术和AMF3编码,使得游戏开发者能够构建交互性强、安全可靠的Web游戏。在这个框架中,Java作为服务器端语言,提供了稳定...

    个性车轮风格flash+xml+php整站源码flash素材下载

    “flash源码”标签表明这个资源主要关注的是Flash编程方面的内容,可能包含AS3(ActionScript 3)代码,这是Flash中用于实现交互性和动画的主要脚本语言。用户可以通过这个源码学习如何在Flash中创建动态效果,或者...

    flash+java通信例子

    3. **Socket通信**:如果需要进行低级别的双向通信,Flash和Java可以通过TCP或UDP套接字进行直接通信。但这需要在服务器端开放特定的端口,并处理跨域安全问题。 4. **AMF(Action Message Format)**:这是一种二...

    FLASH 云素材

    1. **Flash简介**:Flash是由Adobe公司开发的一种矢量图形和富媒体播放平台,它允许开发者创建交互式动画、游戏、应用程序以及网络视频等内容。在2000年代初期,Flash广泛应用于网页设计,提供了丰富的用户体验。 2...

    flash as3 开心农场源代码

    本文将深入剖析这款游戏的源代码,帮助读者理解和学习Flash AS3在游戏开发中的应用。 一、Flash AS3基础 Flash AS3(ActionScript 3.0)是Adobe Flash平台的核心编程语言,相比AS2,AS3具有更强的性能、类型检查和...

    C#与Flash交互

    C#可以使用开源库如AMF.NET或FluorineFX来处理AMF数据,Flash端使用AS3的FlashNetLib库进行AMF通信。 4. **HTTP/HTTPS请求**:Flash的URLLoader类可以发起HTTP或HTTPS请求,C#端可以设置Web服务器处理这些请求。...

    ActionScript 3.0 Socket 源码

    根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍有关ActionScript 3.0 (AS3) 中Socket编程的基础知识与应用实践。 ### 一、ActionScript 3.0 Socket简介 #### 1. Socket概念 在ActionScript 3.0中...

    JSP版Flash小游戏小偷-jsgame

    【JSP版Flash小游戏小偷-jsgame】是一款基于Java技术开发的小型在线游戏平台,主要利用了JSP(JavaServer Pages)技术和Flash技术。在本文中,我们将深入探讨这个项目涉及的技术点、应用场景以及其背后的开发原理。 ...

    flex Socket 通信

    虽然Flex和Java之间可以通过Socket通信,但还有其他方式,如AMF(Action Message Format)和 BlazeDS / LCDS服务,它们提供更高级别的消息传递,支持对象序列化,以及更方便的服务调用。 总的来说,Flex Socket...

    java_and_flash.rar_flash java_java flash

    Java和Flash是两种在Web开发中广泛使用的技术,它们各自有着独特的优势,但在某些场景下,需要进行跨平台的交互,比如游戏开发、富互联网应用(RIA)等。本资料"java_and_flash.rar"主要探讨的就是Java和Flash之间的...

    AS3.0开发MMORPG游戏概要.pdf

    AS3.0本身不是用于3D图形开发的专门语言,但在Flash环境中,可以结合使用如Away3D这样的3D图形库来创建和操作3D内容。 4. 网络通信:文件提到了HTTP、AMF、JSON、Socket通信以及SocketAPI()。这表明游戏使用了基于...

    flash连接数据库示例

    在IT领域,Flash曾是一种广泛用于创建交互式和动态内容的平台,特别是在网页设计和开发中。本示例主要探讨的是如何使用Flash连接到数据库,从而实现数据的动态展示和交互。这一技术对于构建富互联网应用程序(RIA)...

    Flash11开发帮助文档

    此外,还有全屏模式的改进、多线程支持(通过Worker API)和高级文本引擎(Text Layout Framework),这些都极大地扩展了Flash的开发潜力。 三、图形与动画 Flash以其强大的图形绘制和动画制作能力闻名。文档中...

    amf_socket:Actionscript (Flash) 的双向 RPC 库。 高性能网络通信的简易按钮!

    AMF Socket 试图通过隐藏尽可能多的细节来成为 Flash 网络的“简单按钮”。 此外,如果您更喜欢 JSON、MessagePack 等,您可以使用您想要的任何编码器/解码器功能。例子即将推出。请求 VS 消息AMF Socket 有两种...

    一个可以做AS3的前后端通信脚本

    在Web开发中,前端通常负责用户交互,而后端则处理数据存储和业务逻辑。AS3是Adobe Flash Professional、Flash Builder等工具支持的编程语言,它能够通过XMLSocket、HTTP、AMF等协议与服务器进行通信。 描述中提到...

    Flash与C#交互全集(bs与cs).rar

    在IT领域,尤其是在Web开发中,Flash与C#的交互是一项重要的技术,它允许富互联网应用程序(RIA)和服务器端程序之间进行数据交换,提升用户体验。本资源"Flash与C#交互全集(bs与cs)"提供了全面的指导,涵盖了B/S...

    Flash和java的数据交互

    Flash是一款由Adobe公司开发的多媒体创作平台,常用于创建动态网页元素、游戏和交互式内容。它提供了丰富的视觉体验,但其天然的局限性在于,直接处理服务器数据的能力较弱。为了弥补这一不足,开发者通常会借助于与...

Global site tag (gtag.js) - Google Analytics