`
aijuans9
  • 浏览: 12897 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动

阅读更多

第三篇,鼠标事件与游戏人物移动


用仿ActionScript的语法来编写html5——第一篇,显示一张图片
http://blog.csdn.net/lufy_legend/article/details/6753032

用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画
http://blog.csdn.net/lufy_legend/article/details/6760812


一,假设
假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用。
这样的话,添加鼠标事件,其实只需要给canvas添加一个鼠标事件,然后循环LGlobal类里的childList,即循环所有的可视对象,如果被添加了鼠标事件,那么就调用它相应的方法。
二,实现
1,给LGlobal类追加mouseEvent方法,然后修改LGlobal类的setCanvas,实现canvas的鼠标事件的添加与调用

 

[javascript] view plaincopy
  1. LGlobal.setCanvas = function (id,width,height){  
  2.     LGlobal.canvasObj = document.getElementById(id);  
  3.     if(width)LGlobal.canvasObj.width = width;  
  4.     if(height)LGlobal.canvasObj.height = height;  
  5.     LGlobal.width = LGlobal.canvasObj.width;  
  6.     LGlobal.height = LGlobal.canvasObj.height;  
  7.     LGlobal.canvas = LGlobal.canvasObj.getContext("2d");  
  8.       
  9.     LEvent.addEventListener(LGlobal.canvasObj,LMouseEvent.MOUSE_DOWN,function(event){  
  10.         LGlobal.mouseEvent(event,LMouseEvent.MOUSE_DOWN);  
  11.     });  
  12. }   
  13. LGlobal.mouseEvent = function(event,type){  
  14.     var key;  
  15.     for(key in LGlobal.childList){  
  16.         if(LGlobal.childList[key].mouseEvent){  
  17.             LGlobal.childList[key].mouseEvent(event,type);  
  18.         }  
  19.     }  
  20. }  

 

2,给LSprite类添加mouseList数组,用来保存所添加的鼠标事件,然后添加mouseEvent方法
mouseEvent方法中,我们需要做2个处理,
1),判断自己是否添加了鼠标事件,如果没有添加,则循环它的childList
2),如果添加了鼠标事件,判断自己是否被点击,LSprite虽说意义上是可视类,但是其实目前它本身是不可见的,可见的是它上面的Bitmap,准确点说,是这个Bitmap类中的BitmapData,更准确点说,是这个BitmapData中的Image,所以判断自己是否被点击,需要判断的是LSprite中的childList中的可视对象是否被点击,如果被点击,则调用相应的方法
[javascript] view plaincopy
  1. mouseEvent:function (event,type,cood){  
  2.         if(cood==null)cood={x:0,y:0};  
  3.         var self = this;  
  4.         if(self.mouseList.length == 0){  
  5.             for(key in self.childList){  
  6.                 if(self.childList[key].mouseEvent){  
  7.                     self.childList[key].mouseEvent(event,type,{x:self.x+cood.x,y:self.y+cood.y});  
  8.                 }  
  9.             }  
  10.             return;  
  11.         }  
  12.         if(self.childList.length == 0)return;  
  13.         var key;  
  14.         var isclick = false;  
  15.         for(key in self.childList){  
  16.             isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y});  
  17.             if(isclick)break;  
  18.         }  
  19.         if(isclick){  
  20.             for(key in self.mouseList){  
  21.                 var obj = self.mouseList[key];  
  22.                 if(obj.type == type){  
  23.                     event.selfX = event.offsetX - (self.x+cood.x);  
  24.                     event.selfY = event.offsetY - (self.y+cood.y);  
  25.                     event.currentTarget = self;  
  26.                     obj.listener(event);  
  27.                 }  
  28.             }  
  29.             return;  
  30.         }  
  31.           
  32.     },  
  33.     ismouseon:function(event,cood){  
  34.         var self = this;  
  35.         var key;  
  36.         var isclick = false;  
  37.         for(key in self.childList){  
  38.             isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y});  
  39.             if(isclick)break;  
  40.         }  
  41.         return isclick;  
  42.     }  


ismouseon方法,用来判断自己是否被点击
LBitmap类中也需要判断是否自己被点击,所以添加ismouseon
[javascript] view plaincopy
  1. ismouseon:function(event,cood){  
  2.         var self = this;  
  3.         if(event.offsetX >= self.x + cood.x && event.offsetX <= self.x + cood.x + self.width &&   
  4.             event.offsetY >= self.y + cood.y && event.offsetY <= self.y + cood.y + self.height){  
  5.             return true;  
  6.         }else{  
  7.             return false;  
  8.         }  
  9.     }  


添加鼠标事件的时候,模仿ActionScript的语法
[javascript] view plaincopy
  1. backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);  




下面,准备一张地图,一个人物行走图,用鼠标事件来控制人物的走动,
[javascript] view plaincopy
  1. init(80,"back",800,480,main);  
  2.   
  3.   
  4. var list = new Array();  
  5. var index = 0;  
  6. var backLayer;  
  7. //地图  
  8. var mapimg;  
  9. //人物  
  10. var playerimg;  
  11. var loader  
  12. var imageArray;  
  13. var animeIndex = 0;  
  14. var dirindex = 0;  
  15. var dirarr = new Array({x:0,y:1},{x:-1,y:0},{x:1,y:0},{x:0,y:-1},{x:-1,y:1},{x:1,y:1},{x:-1,y:-1},{x:1,y:-1});  
  16. var dirmark = {"0,1":0,"-1,0":1,"1,0":2,"0,-1":3,"-1,1":4,"1,1":5,"-1,-1":6,"1,-1":7};  
  17.   
  18.   
  19. //移动目标  
  20. var toX = 0;  
  21. var toY = 0;  
  22. function main(){  
  23.       
  24.     loader = new LLoader();  
  25.     loader.addEventListener(LEvent.COMPLETE,loadBitmapdata);  
  26.     loader.load("back.jpg","bitmapData");  
  27. }  
  28. function loadBitmapdata(event){  
  29.     var bitmapdata = new LBitmapData(loader.content);  
  30.     mapimg = new LBitmap(bitmapdata);  
  31.     loader = new LLoader();  
  32.     loader.addEventListener(LEvent.COMPLETE,loadOver);  
  33.     loader.load("1.png","bitmapData");  
  34. }  
  35. function loadOver(event){  
  36.     var bitmapdata = new LBitmapData(loader.content,0,0,70,92);  
  37.     imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8);  
  38.     document.getElementById("inittxt").innerHTML="";  
  39.     playerimg = new LBitmap(bitmapdata);  
  40.     playerimg.bitmapData.setCoordinate(0,0);  
  41.     index = 0;  
  42.     backLayer = new LSprite();  
  43.     addChild(backLayer);  
  44.     backLayer.addChild(mapimg);  
  45.     backLayer.addChild(playerimg);  
  46.     backLayer.addEventListener(LEvent.ENTER_FRAME, onframe)  
  47.     backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown);  
  48. }  
  49.   
  50.   
  51. function onframe(){  
  52.     index++;  
  53.     if(index >= imageArray[0].length){  
  54.         index = 0;  
  55.     }  
  56.     var markx = 0,marky = 0;  
  57.     var l = 3;  
  58.     if(playerimg.x > toX){  
  59.         playerimg.x -= l;  
  60.         markx = -1;  
  61.     }else if(playerimg.x < toX){  
  62.         playerimg.x += l;  
  63.         markx = 1;  
  64.     }  
  65.     if(playerimg.y > toY){  
  66.         playerimg.y -= l;  
  67.         marky = -1;  
  68.     }else if(playerimg.y < toY){  
  69.         playerimg.y += l;  
  70.         marky = 1;  
  71.     }  
  72.     if(markx !=0 || marky != 0){  
  73.         var mark = markx+","+marky;  
  74.         dirindex = dirmark[mark];  
  75.     }  
  76.     playerimg.bitmapData.setCoordinate(imageArray[dirindex][index].x,imageArray[dirindex][index].y);  
  77. }  
  78. function onmousedown(event){  
  79.     toX = parseInt(event.selfX/3)*3;  
  80.     toY = parseInt(event.selfY/3)*3;  
  81. }  




看一下成果吧
http://fsanguo.comoj.com/html5/jstoas02/index.html
分享到:
评论

相关推荐

    Flex第一步——基于ActionScript 3

    本篇内容将深入探讨“Flex第一步——基于ActionScript 3”,这对于初学者来说是一份极具价值的学习资料。 首先,我们需要了解ActionScript 3。ActionScript是Flash平台的核心语言,而ActionScript 3是其最新版本,...

    as3鼠标控制人物移动

    在本文中,我们将深入探讨如何在AS3(ActionScript 3)中实现鼠标控制人物移动的功能,虽然题目提及的是AS2,但AS3是更现代、更高效的版本,因此我们以此为焦点。AS3是Adobe Flash Professional和Flash Player中使用...

    基于actionscript的flash游戏设计

    本文将通过一个具体的案例——“抓气球”游戏的设计与实现,详细介绍如何利用ActionScript 3.0来开发Flash游戏。 #### 二、游戏设计 在开始制作游戏之前,明确游戏的目标和规划是非常重要的。这一步骤不仅能够帮助...

    Actionscript3.0基础语法

    ActionScript 3.0 是Adobe Flash Platform中的编程语言,它被广泛用于开发富互联网应用程序(RIA)、游戏和动画。ActionScript 3.0 的基础语法是理解Flash和Flex开发的关键。 首先,我们要了解ActionScript 3.0中的...

    ActionScript3编程游戏教程

    - **事件处理**:理解事件驱动编程模式,并学习如何响应用户输入(如键盘和鼠标事件)以及其他类型的事件(如加载完成事件)对于制作游戏来说非常重要。 - **动画与运动**:掌握如何使用Tween库或自己编写算法来实现...

    flex 游戏人物移动和多人同步简单实例

    在实际开发中,我们需要编写代码来处理人物移动逻辑、鼠标的交互以及SharedObject的读写操作。在`src`目录下,应该包含我们的源代码文件,例如定义人物类、游戏逻辑类和网络同步类等。通过合理的对象设计和事件驱动...

    FLASH actionscript3游戏编程 处理右击事件 拦截鼠标右击实现自定义鼠标右击功能比如右击寻路移动

    在Flash ActionScript 3.0游戏编程中,处理鼠标右击事件是提升用户体验和增加游戏交互性的重要一环。ActionScript 3.0是Flash开发的主要脚本语言,它提供了强大的功能来控制动画、交互以及游戏逻辑。在这个场景中,...

    (flash源码)鼠标的移动而图片跟着不停的转动

    1. 鼠标事件监听:在Flash中,我们可以使用`MouseEvent`类来监听鼠标的移动。`MOUSE_MOVE`事件会在鼠标在舞台上移动时触发,我们可以在事件处理函数中获取鼠标的新位置。 ```actionscript stage.addEventListener...

    flash actionscript3 as3编写的 仿雷电 战机游戏.zip

    本文将深入探讨一款用AS3编写的“仿雷电”战机游戏,通过分析游戏的各个组成部分,揭示AS3在游戏开发中的应用。 一、ActionScript3概述 ActionScript3是Flash Professional和Flex Builder等Adobe开发工具中的编程...

    使用Visual Studio Code调试基于ActionScript的LayaAir HTML5游戏的例子.zip

    在本文中,我们将深入探讨如何使用Visual Studio Code(VSCode)进行HTML5游戏的开发,特别是针对基于ActionScript的LayaAir框架。LayaAir是一款强大的跨平台开发工具,它支持ActionScript 3.0,使得开发者能够创建...

    Actionscript3.0开发的射击小游戏

    《ActionScript3.0开发的射击小游戏:深入解析与学习》 ActionScript3.0是Adobe Flash Professional和Flex SDK中的编程语言,它以其强大的性能和丰富的功能为网页和游戏开发提供了无限可能。本项目——“三角也疯狂...

    java netty编写的socket tcp服务器+flash actionscript3编写的游戏客户端 C/S程序游戏源代码

    这个项目展示了如何在服务器端使用Java Netty框架来处理网络通信,以及在客户端利用ActionScript3来实现游戏逻辑和用户交互。下面将详细阐述Netty、TCP协议、ActionScript3以及实时对战游戏设计的相关知识点。 1. *...

    Flash_ActionScript语法综合

    11. **事件处理**:ActionScript 使用事件监听器处理各种用户或系统事件,如`onRelease`(鼠标释放)、`onKeyDown`(键盘按键)、`onLoad`(电影加载完成)、`onEnterFrame`(每一帧执行)等。 12. **表达式**:在...

    ActionScript 3.0 官网实例(键盘鼠标操作)

    鼠标操作则涉及MouseEvent 类,包括MOUSE_DOWN(鼠标按键被按下)、MOUSE_UP(鼠标按键被释放)、MOUSE_MOVE(鼠标移动)等事件。以下是一个基本的鼠标点击事件的例子: ```actionscript myDisplayObject....

    ActionScript 3.0开发技术大全(第一部分)

     第3章 ActionScript3.0语法 第2篇 ActionScript3.0面向对象特性  第4章 ActionScript3.0面向对象编程  第5章 ActionScript3.0中的String对象  第6章 ActionScript3.0中的Array类型  第7章 ActionScript3.0...

    actionscript 3.0 射击游戏

    1. 基本碰撞:简单的矩形碰撞检测可以使用`hitTestObject`方法实现,但更复杂的形状需要自定义算法或使用第三方库。 2. 弹幕碰撞:对于大量子弹和敌人的碰撞检测,优化是非常重要的,例如使用空间划分数据结构(如...

    flash cs3 actionscript游戏开发基础与范例光盘

    虽然AS3.0本身没有内置物理引擎,但开发者可以通过编写自己的算法或使用第三方库来实现。碰撞检测是物理模拟的一部分,用于识别游戏元素间的接触,从而触发相应的行为。 七、音频处理 音频在游戏中的应用广泛,包括...

    Flash ActionScript 3.0 编程技术教程(附书光盘)

    第1~5章介绍了ActionScript 3.0的基础知识,包括程序编写界面、数据结构、基本语法以及事件机制;第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript...

    精通Flex 3.0——基于ActionScript 3.0实现_源代码

    《精通Flex 3.0——基于ActionScript 3.0实现》一书源代码。 Flex 3.0 ActionScript 3.0源代码 Flex 3.0源代码。 --------------------------- 第1篇 Flex技术概述 第1章 Flex概述 3 1.1 Flex简介 3 1.2 Flex...

Global site tag (gtag.js) - Google Analytics