• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > html5游戏开发-零基础开发RPG游戏-开源讲座(二)-跑起来吧英雄

html5游戏开发-零基础开发RPG游戏-开源讲座(二)-跑起来吧英雄

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5教程,HTML5中国,html5游戏开发-零基础开发RPG游戏-开源讲座(二)-跑起来吧英雄,admin,ht等相关知识,匿名希望在学习及工作中可以帮助到您
上一篇中,已经详细讲解了,如何添加地图,以及添加了一个游戏人物,现在我们来添加控制事件,让这个小英雄走动起来

了解上一篇内容请看这里

html5游戏开发-零基础开发RPG游戏-开源讲座(一)

http://www.html5cn.org/article-1737-1.html

0_1323875534sUfb (1).gif



我们已经给游戏人物建立了一个Character类,

现在先来在类里加入
  • };
  • /**
  • * 设定人物坐标
  • * @param x方向坐标,y方向坐标
  • **/
  • Character.prototype.setCoordinate = function (sx,sy){
  • };
  • /**
  • * 获取人物坐标
  • **/
  • Character.prototype.getCoordinate = function (){
  • };
  • 复制代码
    changeDir 这个方法用来从外部控制人物方向和移动

    要控制游戏的人物,首先,我们要由控制事件,当触发这个事件的时候,就来调用相应的方法,做我们想要的做的处理setCoordinate和getCoordinate是设定和得到人物当前的坐标

    首先,为了适应智能手机,我们暂时不用键盘事件,而是用点击事件,所以我们先来添加两个控制按钮,在Main.js的gameInit方法的最下方,添加如下代码
  • bitmapdata = new LBitmapData(imglist["e1"]);
  • bitmap = new LBitmap(bitmapdata);
  • bitmap.x = 0;
  • bitmap.y = 0;
  • ctrlLayer.addChild(bitmap);
  • bitmapdata = new LBitmapData(imglist["e2"]);
  • bitmap = new LBitmap(bitmapdata);
  • bitmap.x = 280;
  • bitmap.y = 30;
  • ctrlLayer.addChild(bitmap);
  • ctrlLayer.x = 40;
  • ctrlLayer.y = 180;
  • 复制代码
    运行代码,得到预览如下

    0_1323996441iWWB.gif



    在添加控制事件之前,为了实现控制方便,我们先来添加几个变量
  • var DOWN = 0;
  • var LEFT = 1;
  • var RIGHT = 2;
  • var UP = 3;
  • var STEP = 32;
  • //点击状态
  • var isKeyDown = false;
  • 复制代码
    STEP代表移动步长,因为地图是有32*32的小图片来组成的,所以我们设定人物移动的步长为32
    方向变量的0,1,2,3分别对应下面图片中的第1,2,3,4行的方向

    0_1323998361U1vb.gif



    之所以添加点击状态,是因为,当我们按下移动按钮没有抬起的时候,人物应该始终处于移动状态,所以用这个变量来区分,我们是否按下或者抬起好了,做好了准备工作,现在就开始添加移动事件
  • backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,ondown);
  • backLayer.addEventListener(LMouseEvent.MOUSE_UP,onup);

  • function ondown(event){
  • //根据点击位置,判断移动方向
  • if(event.offsetX >= ctrlLayer.x + 40 && event.offsetX <= ctrlLayer.x+80){
  • if(event.offsetY >= ctrlLayer.y && event.offsetY <= ctrlLayer.y+40){
  • player.changeDir(UP);
  • }else if(event.offsetY >= ctrlLayer.y+80 && event.offsetY <= ctrlLayer.y+120){
  • player.changeDir(DOWN);
  • }
  • }else if(event.offsetX >= ctrlLayer.x && event.offsetX <= ctrlLayer.x+40){
  • if(event.offsetY >= ctrlLayer.y +40 && event.offsetY <= ctrlLayer.y+80){
  • player.changeDir(LEFT);
  • }
  • }else if(event.offsetX >= ctrlLayer.x+80 && event.offsetX <= ctrlLayer.x+120){
  • if(event.offsetY >= ctrlLayer.y +40 && event.offsetY <= ctrlLayer.y+80){
  • player.changeDir(RIGHT);
  • }
  • }
  • isKeyDown = true;
  • }
  • function onup(event){
  • isKeyDown = false;
  • }
  • 复制代码
    这里需要知道的是,在智能手机里,其实点击事件是TOUCH_START,TOUCH_MOVE,TOUCH_END事件

    使用legendForHtml5Programming库件的时候,只需要添加MOUSE_DOWN,MOUSE_MOVE,MOUSE_UP事件,然后库件会自动判断是加载TOUCH事件还是MOUSE事件

    在ondown方法中,我们将isKeyDown的状态变为true,表示我们正处于按下状态

    然后,根据我们点击的位置,来调用Character类的changeDir方法,并且传入点击的方向

    有了控制事件,现在的关键就在于changeDir方法,只要根据传进来的值,来实现移动就可以了

    我们试想,如果每次移动一个步长的话,那么人物就会由一个小方格跳到令一个方格,而我们需要的是,让它缓慢的移动到下一个方格,有一个移动的过程

    为了实现这个过程,我们在移动的时候不是让人物的坐标马上就改变,而是改变人物的状态,由静止到移动,然后处于移动状态的时候,再让人物一小步一小步的移动到目标点

    修改Character类的构造器,如下
  • base(this,LSprite,[]);
  • var self = this;
  • //设定人物动作速度
  • self.speed = speed==null?3:speed;
  • self.speedIndex = 0;
  • //设定人物大小
  • data.setProperties(0,0,data.image.width/col,data.image.height/row);
  • //得到人物图片拆分数组
  • var list = LGlobal.divideCoordinate(data.image.width,data.image.height,row,col);
  • //设定人物动画
  • self.anime = new LAnimation(this,data,list);
  • //调整人物位置
  • self.anime.y -= 16;
  • //设定不移动
  • self.move = false;
  • //在一个移动步长中的移动次数设定
  • self.moveIndex = 0;
  • };
  • 复制代码
    调整人物位置是因为,人物的图片分割后,每个动作的大小为32*48,而地图每个小格的大小是32*32,然后设定人物状态为不移动,然后修改changeDir 方法
  • * 改变人物方向
  • **/
  • Character.prototype.changeDir = function (dir){
  • var self = this;
  • //如果正在移动,则无效
  • if(!self.move){
  • //设定人物方向
  • self.direction = dir;
  • //设定图片动画
  • self.anime.setAction(dir);
  • //开始移动
  • self.move = true;
  • self.moveIndex = 0;
  • }
  • };
  • 复制代码
    这里要简单说明一下LAnimation类的setAction方法,setAction(rowindex,colindex)方法有两个参数,LAnimation里传进来的图片数组是一个二维数组,这两个参数分别可以改变目前显示的图片的动作,当然,也可以只传其中一个参数

    我这次是将4*4的人物动作图片分割为4*4的二维数组传给了LAnimation类,所以现在每一行图片代表一个方向

    人物状态设置为移动后,就应该在循环事件里开始一步步的移动了
  • * 循环事件
  • **/
  • C
  • 您可能想查找下面的文章:

    • 一款利用html5和css3动画排列人物头像的实例演示
    • html5教程调用绘图api画简单的圆形代码分享
    • html5教程画矩形代码分享
    • html5教程制作简单画板代码分享
    • html5基础教程常用技巧整理
    • html5教程-Canvas入门
    • html5教程画矩形代码分享
    • HTML5晃动DeviceMotionEvent事件
    • HTML5教程之html 5 本地数据库(Web Sql Database)
    • HTML5中对contenteditable属性的解释与规定

    相关文章

    • 2018-12-03关于 HTML5 被简称做 H5 ,你怎么看?
    • 2017-08-06基于html5 DeviceOrientation 实现微信摇一摇功能
    • 2018-12-03详解HTML5预测取代本地App将成为可能
    • 2018-12-03vue的本地静态图片路径
    • 2017-08-06HTML5语音识别标签写法附图
    • 2018-12-03HTML5 Canvas组件绘制太极图案的图文代码详情
    • 2018-12-03html5 navigator.geolocation基于浏览器获取地理位置代码案例
    • 2018-12-03基于HTML5 Canvas 实现地铁站监控
    • 2017-08-06HTML5 File API改善网页上传功能
    • 2018-12-03canvas实现动态小球重叠的效果代码

    文章分类

    • html/xhtml
    • html5
    • CSS
    • XML/XSLT
    • Dreamweaver教程
    • Frontpage教程
    • 心得技巧
    • bootstrap
    • vue
    • AngularJS
    • HBuilder教程
    • css3
    • 浏览器兼容
    • div/css
    • 网页编辑器
    • axure

    最近更新的内容

      • Html5 Canvas初探学习笔记(13) -图片变换
      • 使用javascript中canvas实现拼图小游戏
      • 详解HTML5通讯录获取指定多个人的信息
      • 在html5的Canvas上绘制椭圆的几种方法总结_html5教程技巧
      • HTML5 为什么不直接省略标准类型声明 !Doctype ?
      • vue项目中如何使用ueditor
      • 如何使用jQuery和HTML5实现手机摇一摇的换衣特效
      • SVG基础|绘制SVG连接标记MARKERS
      • html5画布旋转效果示例
      • 让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)

    关于我们 - 联系我们 - 免责声明 - 网站地图

    ©2020-2025 All Rights Reserved. linkedu.com 版权所有