阿里开源HTML5小游戏开发框架Hilo实战教程

前言

开发基于Html5的小游戏并不困难,基本思路就是使用Html5的canvas进行游戏图像绘制,通过监听Dom元素的touch事件并触发相应的动画,来实现游戏的交互。难在于解决开发后面临的不同设备游戏画面、音效等兼容性问题。

使用Hilo可以帮助我们解决开发过程遇到的一些常见的坑。在Hilo中,所有元素包括舞台、舞台里的人物物品都是一个对象,有着一些相似的属性,如宽度、高度等。一个对象可以包括另一个子对象,如舞台对象可以有人物等子对象。所有元素类对象都是Hilo.View类的子类。

下面通过一个手指触摸抛球动画的例子为大家介绍一下怎么使用Hilo来开发一个H5小游戏。

一、 安装

引入Hilo类库。

<script type="javascript" src="hilo-standalone.js" ></script>
复制代码

二、资源预加载

预先加载各种图片资源,提升用户体验。

//这里可以加开始显示loading动画的逻辑
var queue = new Hilo.LoadQueue();
var resources = [{id:'ball',type:'png',src:_ball,noCache:false,crossOrigin:'anonymous'},{id:'ball2',type:'png',src:_ball2,noCache:false,crossOrigin:'anonymous'},
];
queue.add(resources);
queue.on('complete',function(e) {//资源加载完成后的逻辑,比如隐藏loading
});
queue.start();
复制代码

三、创建舞台

舞台是一个各种图形、精灵动画等的总载体。所有用Hilo创建的可见的对象都必须添加到舞台或其子容器后,才会被渲染和显示出来。 舞台实质上也是一个容器Container,不过它是一个顶级容器。它除开拥有普通容器的功能,它还拥有一些特殊属性和方法。

  • html代码
<div id="game-container"></div>
复制代码
  • js代码
var stage = new Hilo.Stage({renderType:'canvas',container: document.getElementById('game-container'),width: 480,height: 320
});
复制代码

四、启用事件交互

Hilo对象默认不允许触发点击等事件,需要先给舞台对象启用。下面这段代码表示启用对用户手指开始触摸、移动、停止触摸等事件的事件监听。

stage.enableDOMEvent(Hilo.event.POINTER_START, true);
stage.enableDOMEvent(Hilo.event.POINTER_MOVE, true);
stage.enableDOMEvent(Hilo.event.POINTER_END, true);
复制代码

五、创建定时器

用于不断刷新渲染页面动画

var ticker = new Hilo.Ticker(100);
ticker.addTick(stage);
ticker.addTick(Hilo.Tween);
ticker.start();
复制代码

六、添加舞台元素

给舞台添加一个元素“球”。image是资源对象,可以从预加载队列中获取,x是球的起始横坐标,y是球的起始纵坐标,width、height分别是宽度和高度。

var ballImg = queue.getContent('ball');
ball = new Hilo.Bitmap({image:ballImg,x:ballX,y:ballY,width:trueBallWidth,height:trueBallHeight
});
stage.addChild(ball);
复制代码

七、监听触摸事件

用户开始触摸舞台时记录一下触摸点的坐标,触摸结束后再记录一下此时触摸点的坐标,通过这两个坐标计算出手指滑动的方向,从而控制球往哪个方向抛出。

stage.on(Hilo.event.POINTER_START,function(e)e.preventDefault();currentEvent = e.changedTouches[0].identifier;startTouchXList[currentEvent] = e.changedTouches[0].clientX;startTouchYList[currentEvent] = e.changedTouches[0].clientY;endTouchXList[currentEvent] = e.changedTouches[0].clientX;endTouchYList[currentEvent] = e.changedTouches[0].clientY;
});stage.on(Hilo.event.POINTER_MOVE,function(e)e.preventDefault();currentEvent = e.changedTouches[0].identifier;endTouchXList[currentEvent] = e.changedTouches[0].clientX;endTouchYList[currentEvent] = e.changedTouches[0].clientY;
});stage.on(Hilo.event.POINTER_END,function(e)e.preventDefault();endTouchXList[currentEvent] = e.changedTouches[0].clientX;endTouchYList[currentEvent] = e.changedTouches[0].clientY;//抛球throwBall(startTouchXList[currentEvent],startTouchYList[currentEvent],endTouchXList[currentEvent],endTouchYList[currentEvent]);
})
复制代码

八、动画实现

实现球飞出的动画,用Hilo.Tween.to方法来控制tmpBall对象移动。

var tmpBall = new Hilo.Bitmap({image:ballImg,x:ballX,y:ballY-5,width:trueBallWidth,height:trueBallHeight
});
stage.addChild(tmpBall);
//球飞出
Hilo.Tween.to(tmpBall,{x:endPoint.x,y:endPoint.y,width:trueBallWidth/percent,height:trueBallWidth/percent
},{duration:ballSpeed,delay:0,ease:Hilo.Ease.Linear.EaseNone,onComplete:function() {});
复制代码

参考文档

  • 官网:hiloteam.github.io/index.html
  • 官方演示:hiloteam.github.io/examples/in…

  • 关注微信公众号“全栈社区”,可获取更多站长、开发者必备的前端、后端、运维技术干货。

  • 18元美国VPS、建站主机:www.salasolo.com

转载于:https://juejin.im/post/5caf29c5e51d456e3f2fb6dc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

outlook附件大小限制_如何在Outlook中调整大图片附件的大小

outlook附件大小限制When you have to send someone a large image file through email, it’s a good idea to resize the image file to make it smaller before sending it. Outlook makes this easy and allows you to resize the image file as it’s sent. 当您必须通过电…

bzoj2460: [BeiJing2011]元素

怕不是学了个假的线性基。。。一直以为要高位到低位插入&#xff0c;结果那个是高斯消元的线性基。。。 那么直接排序权值就行了。 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<…

西湖论剑WP

先水几句&#xff0c;这次的题确实难啊&#xff0c;动用洪荒之力了&#xff0c;第一名的神仙也没有全部做完。 官方说这次的题目有两道没被做出来&#xff0c;我猜应该是PWN和RE吧 本来我们是45名的&#xff0c;最后5分钟那帮人啊&#xff0c;硬生生给我们挤出前50&#xff0c;…

vm macos 启用3d_如何在macOS中启用夜班以减轻眼睛疲劳

vm macos 启用3dNight Shift is a new feature introduced in macOS Sierra 10.12.4, and you might already be familiar with it if you’re an iOS user. Here’s how to enable it and set it up on your Mac. Night Shift是macOS Sierra 10.12.4中引入的新功能&#xff0c…

hdu3072 Intelligence System (最小树形图?)

题意&#xff1a;给一个有向图&#xff0c;问要从0号点能到达所有点所需要经过路径的最小权值和是多少&#xff0c;然而&#xff0c;若两点强联通&#xff0c;则这两点互相到达不需要花费。保证0号点能到达所有点 tarjan缩点以后直接取每个点入边中花费最小的即可。 1 #include…

如何在Windows 7、8、10,Vista或XP中删除Windows服务

If you are a fan of tweaking your system and disabling services, you might find that over time your Windows Services list becomes large and unwieldy. It’s easy enough to delete a Windows service using the Command Prompt. 如果您喜欢调整系统并禁用服务&#…

缩点(有向图的强连通分量)学习笔记

缩点(有向图的强连通分量)学习笔记 1.什么是强连通分量&#xff1f;&#xff1a; 有向图强连通分量:在有向图G中&#xff0c;如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径&#xff0c;同时还有一条从vj到vi的有向路径&#xff0c;则称两个顶点强连通(strongly conne…

mysql多表联合删除

文件一&#xff1a;01.txt文件二&#xff1a;02.txt登录mysql选择数据库表user结构表user_depart结构导入数据到表user导入数据到表user_depart联合删除查看删除后user表的数据查看删除后user_depart表的数据本文转自 Lee_吉 51CTO博客&#xff0c;原文链接:http://blog.51cto.…

Jenkins 随笔

window是 随笔 修改端口 &#xff1a; <arguments>-Xrs -Xmx256m -Dhudson.lifecyclehudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort8181 --webroot"%BASE%\war"</arguments> 然后重启服务&#xff08;服务…

centos 初学者_初学者:如何在Outlook 2013中创建和管理任务

centos 初学者If you’re one of those people who has a whiteboard or notepad with an ever-evolving to-do list, or your desk and monitors are adorned with Post-its reminding you of important events, then this the article for you. 如果您是拥有不断发展的待办事…

C语言基础(五)

一、字符串相关函数 1.gets()(输入字符串) 格式&#xff1a;gets(字符串)&#xff1b; (1)区别&#xff1a;gets(str)与scanf(“%s”,str) gets(str)允许输入的字符串含有空格 scanf(“%s”,str)不允许含有空格 注意&#xff1a;由于以上无法知道字符串大小&#xff0c;很容易导…

新服务器安装和配置zabbix的playbook

公司的金山区云服务器是由我负责的&#xff0c;每一次新购买了金山区的服务器都要把这些新服务器添加到zabbix监控里&#xff0c;于是我就编写了一个ansible的playbook&#xff0c;这样以后就可以在执行playbook的时候“带薪拉屎”了。 ansible主机准备&#xff1a; 1&#xff…

15个变态的Google面试题以及答案

在当前经济形势不景气的情况下&#xff0c;谷歌招聘新员工是一件令人振奋的事&#xff0c;特别是对那些在当前金融风暴中渴望找到安全港的年轻经理们和软件开发商们来说是个好消息。   不过&#xff0c;也不要高兴太早&#xff0c;谷歌在招聘新员工时&#xff0c;更加青睐名牌…

小程序禁用ios 左右滑动_如何在使用应用程序时禁用iOS控制中心

小程序禁用ios 左右滑动The Control Center has proven to be a thoughtful and welcome addition to iOS, but it can be annoying sometimes if you’re playing a game or using an app, and you accidentally open it. Here’s how you can disable it in such situations.…

repomd.xml错误14 not found

用Centos7最小化安装了系统&#xff0c;想练练手&#xff0c;可以到换了“搜狐”的YUM源&#xff0c;系统总报错更新错误说找不到repomd.xml。 然后就一直搜解决问题&#xff0c;能用到的都用到了&#xff0c;网上提到的都用到了。浪费了好几个小时没解决。正当无语的时候&…

浅谈javascript递归(白话版)

递归 递归是一种解决问题的方法&#xff0c;通常我们可以理解成函数调用自身&#xff1b; 什么递归&#xff1f;递归怎么写&#xff1f; 首先直接调用自身的方法和函数&#xff0c;他是一个递归&#xff0c;我们看代码&#xff1a; 复制代码 var recursiveFun function(params…

超链接禁用_如何在Microsoft Word中禁用超链接

超链接禁用When you type a web or email address in Word, you may notice that the program automatically formats it as a live hyperlink. This is a setting in Word’s AutoFormat feature that is on by default but can be easily turned off. 当您在Word中键入网站或…

ssh面试题总结

题目1&#xff1a;Hibernate工作原理及为什么要用&#xff1f; 原理&#xff1a; hibernate&#xff0c;通过对jdbc进行封装&#xff0c;对 java类和 关系数据库进行mapping&#xff0c;实现了对关系数据库的面向对象方式的操作&#xff0c;改变了传统的jdbc sql操作数据的方式…

SaltStack的salt-ssh使用及LAMP状态设计部署

SaltStack的salt-ssh使用及LAMP状态设计部署 1、salt-ssh的使用 官方文档&#xff1a;https://docs.saltstack.com/en/2016.11/topics/ssh/index.html &#xff08;1&#xff09;安装salt-ssh [rootlinux-node1 ~]# yum install -y salt-ssh&#xff08;2&#xff09;配置salt-…

程序员笔记(知识)管理的一点经验

记笔记这件事&#xff0c;也许在很多人看来&#xff0c;再普通、简单不过了——从小老师就教育我们要这么做。不同的人有不同的方式&#xff0c;我们最终的目的&#xff0c;还是希望不要停留在只是记录这一层面上&#xff0c;而是将它们转变为我们的知识。作为一个程序员&#…