热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

第三篇,鼠标事件与游戏人物移动用仿ActionScript的语法来编写html5——第一篇,用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEve...

 

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

用仿ActionScript的语法来编写html5——第一篇,

用仿ActionScript的语法来编写html5——第二篇,利用Sprite来实现动画

 

一,假设

假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用。

这样的话,添加鼠标事件,其实只需要给canvas添加一个鼠标事件,然后循环LGlobal类里的childList,即循环所有的可视对象,如果被添加了鼠标事件,那么就调用它相应的方法。

二,实现

1,给LGlobal类追加mouseEvent方法,然后修改LGlobal类的setCanvas,实现canvas的鼠标事件的添加与调用

 

LGlobal.setCanvas = function (id,width,height){ 

    LGlobal.canvasObj = document.getElementById(id); 

    if(width)LGlobal.canvasObj.width = width; 

    if(height)LGlobal.canvasObj.height = height; 

    LGlobal.width = LGlobal.canvasObj.width; 

    LGlobal.height = LGlobal.canvasObj.height; 

    LGlobal.canvas = LGlobal.canvasObj.getContext("2d"); 

     

    LEvent.addEventListener(LGlobal.canvasObj,LMouseEvent.MOUSE_DOWN,function(event){ 

        LGlobal.mouseEvent(event,LMouseEvent.MOUSE_DOWN); 

    }); 

}  

LGlobal.mouseEvent = function(event,type){ 

    var key; 

    for(key in LGlobal.childList){ 

        if(LGlobal.childList[key].mouseEvent){ 

            LGlobal.childList[key].mouseEvent(event,type); 

        } 

    } 

 

2,给LSprite类添加mouseList数组,用来保存所添加的鼠标事件,然后添加mouseEvent方法

mouseEvent方法中,我们需要做2个处理,

1),判断自己是否添加了鼠标事件,如果没有添加,则循环它的childList

2),如果添加了鼠标事件,判断自己是否被点击,LSprite虽说意义上是可视类,但是其实目前它本身是不可见的,可见的是它上面的Bitmap,准确点说,是这个Bitmap类中的BitmapData,更准确点说,是这个BitmapData中的Image,所以判断自己是否被点击,需要判断的是LSprite中的childList中的可视对象是否被点击,如果被点击,则调用相应的方法

 

mouseEvent:function (event,type,cood){ 

        if(cood==null)cood={x:0,y:0}; 

        var self = this; 

        if(self.mouseList.length == 0){ 

            for(key in self.childList){ 

                if(self.childList[key].mouseEvent){ 

                    self.childList[key].mouseEvent(event,type,{x:self.x+cood.x,y:self.y+cood.y}); 

                } 

            } 

            return; 

        } 

        if(self.childList.length == 0)return; 

        var key; 

        var isclick = false; 

        for(key in self.childList){ 

            isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y}); 

            if(isclick)break; 

        } 

        if(isclick){ 

            for(key in self.mouseList){ 

                var obj = self.mouseList[key]; 

                if(obj.type == type){ 

                    event.selfX = event.offsetX - (self.x+cood.x); 

                    event.selfY = event.offsetY - (self.y+cood.y); 

                    event.currentTarget = self; 

                    obj.listener(event); 

                } 

            } 

            return; 

        } 

         

    }, 

    ismouseon:function(event,cood){ 

        var self = this; 

        var key; 

        var isclick = false; 

        for(key in self.childList){ 

            isclick = self.childList[key].ismouseon(event,{x:self.x+cood.x,y:self.y+cood.y}); 

            if(isclick)break; 

        } 

        return isclick; 

    } 

 

 

ismouseon方法,用来判断自己是否被点击

LBitmap类中也需要判断是否自己被点击,所以添加ismouseon

 

ismouseon:function(event,cood){ 

        var self = this; 

        if(event.offsetX >= self.x + cood.x && event.offsetX <= self.x + cood.x + self.width &&  

            event.offsetY >= self.y + cood.y && event.offsetY <= self.y + cood.y + self.height){ 

            return true; 

        }else{ 

            return false; 

        } 

    } 

 

 

添加鼠标事件的时候,模仿ActionScript的语法

 

backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown); 

 

 

 

 

下面,准备一张地图,一个人物行走图,用鼠标事件来控制人物的走动,

 

init(80,"back",800,480,main); 

 

 

var list = new Array(); 

var index = 0; 

var backLayer; 

//地图 

var mapimg; 

//人物 

var playerimg; 

var loader 

var imageArray; 

var animeIndex = 0; 

var dirindex = 0; 

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}); 

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}; 

 

 

//移动目标 

var toX = 0; 

var toY = 0; 

function main(){ 

     

    loader = new LLoader(); 

    loader.addEventListener(LEvent.COMPLETE,loadBitmapdata); 

    loader.load("back.jpg","bitmapData"); 

function loadBitmapdata(event){ 

    var bitmapdata = new LBitmapData(loader.content); 

    mapimg = new LBitmap(bitmapdata); 

    loader = new LLoader(); 

    loader.addEventListener(LEvent.COMPLETE,loadOver); 

    loader.load("1.png","bitmapData"); 

function loadOver(event){ 

    var bitmapdata = new LBitmapData(loader.content,0,0,70,92); 

    imageArray = LGlobal.divideCoordinate(bitmapdata.image.width,bitmapdata.image.height,8,8); 

    document.getElementById("inittxt").innerHTML=""; 

    playerimg = new LBitmap(bitmapdata); 

    playerimg.bitmapData.setCoordinate(0,0); 

    index = 0; 

    backLayer = new LSprite(); 

    addChild(backLayer); 

    backLayer.addChild(mapimg); 

    backLayer.addChild(playerimg); 

    backLayer.addEventListener(LEvent.ENTER_FRAME, onframe) 

    backLayer.addEventListener(LMouseEvent.MOUSE_DOWN, onmousedown); 

 

 

function onframe(){ 

    index++; 

    if(index >= imageArray[0].length){ 

        index = 0; 

    } 

    var markx = 0,marky = 0; 

    var l = 3; 

    if(playerimg.x > toX){ 

        playerimg.x -= l; 

        markx = -1; 

    }else if(playerimg.x

        playerimg.x += l; 

        markx = 1; 

    } 

    if(playerimg.y > toY){ 

        playerimg.y -= l; 

        marky = -1; 

    }else if(playerimg.y

        playerimg.y += l; 

        marky = 1; 

    } 

    if(markx !=0 || marky != 0){ 

        var mark = markx+","+marky; 

        dirindex = dirmark[mark]; 

    } 

    playerimg.bitmapData.setCoordinate(imageArray[dirindex][index].x,imageArray[dirindex][index].y); 

function onmousedown(event){ 

    toX = parseInt(event.selfX/3)*3; 

    toY = parseInt(event.selfY/3)*3; 

 

 

 

 

看一下成果吧

http://fsanguo.comoj.com/html5/jstoas02/index.html

 


摘自 lufy小屋

推荐阅读
  • Flash CS4/5与Flex/Flash Builder的配合编码
    FlashCS45与FlexFlashBuilder的配合编码注:为方便起见文中把FlashCS45简称为Flash,把FlexFlashBuilder ... [详细]
  • 导读:很多朋友问到关于php前端脚本语言有哪些的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 查看书籍详细信息:PHPforFlashFMS动态网站开发手札(附光……编辑推荐本书采用最新FlashRemoting技术,搭配开放原码,包括最新流行的Adobe官方支援Zend_ ... [详细]
  • setInterval()函数publicfunctionsetInterval(closure:Function,delay:Number,arguments):uint语 ... [详细]
  • 游戏开发_Html5+Lufylegend.js游戏开发引擎介绍及原理
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Html5+Lufylegend.js游戏开发引擎介绍及原理相关的知识,希望对你有一定的参考价值。  ... [详细]
  • Flash 宝典2001-07-24星河整理yeskyalignrightmarginwidth0marginheight0srchttp:www.chinabyte ... [详细]
  • 总目录:http:blog.csdn.netiloveas2014articledetails383044774.5.7 卷积矩阵的高级技巧及其原理     很多图形学教程 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
author-avatar
被抛弃的微博名
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有