用Html5制作 汤姆猫 小游戏
2016-09-13 17:17
621 查看
以下汤姆猫是用html5制作的小游戏;
建议火狐测试,然后把火狐调成 响应式设计模式(以便模拟手机屏幕),设置--->开发者--->响应式设计模式; 如下图
以下是html文件:
以下是js文件:tom.js;
/**
* 为body添加点击事件,以便用于确定用户点击的位置
* @param event
*/
function action(event) {
//获取屏幕宽度
var w = document.documentElement.clientWidth;
//获取屏幕高度
var h = document.documentElement.clientHeight;
//相对坐标位置;因为我是在320*480分辨率的情况下确定坐标的,为了在其他分辨率下位置正确,
var x = event.pageX / w * 320; var y = event.pageY / h * 480;
//在控制台显示当前点击的坐标
console.log('点击的坐标为x:'+ x + ',y:' + y);
if (x>132 && x<187 && y>371 && y<411) { //肚子
play('stomach',33,0);
}
if (x>102 && x<201 && y>87 && y<162) { //头
play('knockout',80,20);
}
if (x>163 && x<195 && y>435 && y<455) { //左脚
play('foot_left',29,0);
}
if (x>117 && x<148 && y>439 && y<456) { //右脚
play('foot_right',29,0);
}
if (x>215 && x<242 && y>380 && y<420) { //尾巴
play('angry',25,0);
}
if (x>83 && x<107 && y>282 && y<300) { //右手
play('scratch',55,21);
}
if (x>120 && x<200 && y>192 && y<207) { //嘴巴
play('eat',39,0);
}
if (x>10 && x<60 && y>353 && y<430) { //左下角
play('drink',80,35);
}
if (x>206 && x<225 && y>262 && y<295) { //左手
play('cymbal',12,0);
}
if (x>206 && x<250 && y>72 && y<149) { //左耳朵
play('fart',27,0);
}
}
/**确定当前动作的声音是否播放完,如果没有播放完不执行下一个动作*/
var playing = false;
/**获取页面的图片标签*/
var img = document.getElementById('tom');
/**获取页面的声音标签*/
var player = document.getElementById('player');
/**
*
* @param name 图片和声音的文件名字
* @param totle 该动作图片数量
* @param startAt 从第几张图片开始播放
*/
function play(name,totle,startAt)
{
/**确定当前动作是否播放完,如果没有播放完不执行下一个动作*/
if (playing == false)
{
playing = true;
var i = 0;
animate();
//动画
function animate()
{
//因为图片名称是angry_01.jpg 、 angry_13.jpg 这种格式,所以小于10要在前面加个0
var src = './img/'+name + '/' + name + '_' + (i < 10 ? + '0' : '') + i + '.jpg'; //获取图片地址
img.src = src; //替换图片,(图片快速替换形成动作)
console.log(name+':第'+i+'张图片');
if (i < totle)
{
//延时图片替换速度,否则动画瞬间完成(setTimeout是异步的,所以不影响声音不放)
setTimeout(animate,65);
if(i == startAt){
//播放声音
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'drink' && i == 35)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'scratch' && i == 21)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'knockout' && i == 20)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
//i递加,以便更换下一张动作图片
i++;
}else{
playing = false; //图片播放完成,结束
}
}
}
else
{
return; //重复play()方法,形成连贯动作,因为setTimeout是异步处理的,所以要用递归,否则图片无法延时
}
}
为了适应不同分辨率的屏幕,所以要使用相对坐标(本测试是在320*480上测试的)
资源下载地址: http://download.csdn.net/detail/qq_22078107/9629834
建议火狐测试,然后把火狐调成 响应式设计模式(以便模拟手机屏幕),设置--->开发者--->响应式设计模式; 如下图
以下是html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>汤姆猫</title> <style> *{ margin: 0px; /**去掉边距*/ padding: 0px; } html{ height: 100%; } body{ height: 100%; } img{ width: 100%; /**使图片长宽适应屏幕的大小*/ height: 100%; } </style> </head> <!--为body添加点击事件,以便用于确定用户点击的位置--> <body onclick="action(event)"> <!--用于图片--> <img src="./img/angry/angry_00.jpg" alt="" id="tom"> <!--用于播放声音--> <audio id="player"></audio> <script src="tom.js"></script> </body> </html>
以下是js文件:tom.js;
/**
* 为body添加点击事件,以便用于确定用户点击的位置
* @param event
*/
function action(event) {
//获取屏幕宽度
var w = document.documentElement.clientWidth;
//获取屏幕高度
var h = document.documentElement.clientHeight;
//相对坐标位置;因为我是在320*480分辨率的情况下确定坐标的,为了在其他分辨率下位置正确,
var x = event.pageX / w * 320; var y = event.pageY / h * 480;
//在控制台显示当前点击的坐标
console.log('点击的坐标为x:'+ x + ',y:' + y);
if (x>132 && x<187 && y>371 && y<411) { //肚子
play('stomach',33,0);
}
if (x>102 && x<201 && y>87 && y<162) { //头
play('knockout',80,20);
}
if (x>163 && x<195 && y>435 && y<455) { //左脚
play('foot_left',29,0);
}
if (x>117 && x<148 && y>439 && y<456) { //右脚
play('foot_right',29,0);
}
if (x>215 && x<242 && y>380 && y<420) { //尾巴
play('angry',25,0);
}
if (x>83 && x<107 && y>282 && y<300) { //右手
play('scratch',55,21);
}
if (x>120 && x<200 && y>192 && y<207) { //嘴巴
play('eat',39,0);
}
if (x>10 && x<60 && y>353 && y<430) { //左下角
play('drink',80,35);
}
if (x>206 && x<225 && y>262 && y<295) { //左手
play('cymbal',12,0);
}
if (x>206 && x<250 && y>72 && y<149) { //左耳朵
play('fart',27,0);
}
}
/**确定当前动作的声音是否播放完,如果没有播放完不执行下一个动作*/
var playing = false;
/**获取页面的图片标签*/
var img = document.getElementById('tom');
/**获取页面的声音标签*/
var player = document.getElementById('player');
/**
*
* @param name 图片和声音的文件名字
* @param totle 该动作图片数量
* @param startAt 从第几张图片开始播放
*/
function play(name,totle,startAt)
{
/**确定当前动作是否播放完,如果没有播放完不执行下一个动作*/
if (playing == false)
{
playing = true;
var i = 0;
animate();
//动画
function animate()
{
//因为图片名称是angry_01.jpg 、 angry_13.jpg 这种格式,所以小于10要在前面加个0
var src = './img/'+name + '/' + name + '_' + (i < 10 ? + '0' : '') + i + '.jpg'; //获取图片地址
img.src = src; //替换图片,(图片快速替换形成动作)
console.log(name+':第'+i+'张图片');
if (i < totle)
{
//延时图片替换速度,否则动画瞬间完成(setTimeout是异步的,所以不影响声音不放)
setTimeout(animate,65);
if(i == startAt){
//播放声音
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'drink' && i == 35)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'scratch' && i == 21)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
if(name == 'knockout' && i == 20)
{
player.src = 'sounds/' + name + '.m4a';
player.play();
}
//i递加,以便更换下一张动作图片
i++;
}else{
playing = false; //图片播放完成,结束
}
}
}
else
{
return; //重复play()方法,形成连贯动作,因为setTimeout是异步处理的,所以要用递归,否则图片无法延时
}
}
为了适应不同分辨率的屏幕,所以要使用相对坐标(本测试是在320*480上测试的)
var x = event.pageX / w * 320; var y = event.pageY / h * 480; 有童鞋会问怎么知道图片的坐标范围是多少。 ps:可以借助火狐的控制台查看; 即用 console.log('点击的坐标为x:'+ x + ',y:' + y); 显示; 如下图,点击图片的某位置就会在控制台输出xy坐标; (右键---->查看元素----->控制台) 然后鼠标点击某个范围就执行什么动作,范围确定左上角和右下角的坐标就行;如下图所示,是确定嘴巴的范围
然后用if判断点击的坐标范围,再执行什么动作;
为了适应在不同分辨率上的位置显示,所以要有 相对位置 确定图片的点击范围;我是在320*480分辨率下确定的;
var x = event.pageX / w * 320; var y = event.pageY / h * 480;
资源下载地址: http://download.csdn.net/detail/qq_22078107/9629834
相关文章推荐
- HTML5中在客户端验证文件上传的大小
- html5 web数据存储
- 页面元素查找之Selectors API
- 使用ajax实现用户登录验证(升级版)
- Canvas 在高清屏下绘制图片变模糊的解决方法
- 关于前端的思考与感悟
- 新时代编辑神器:Atom
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 又被事件冒泡坑了一把,这次要彻底弄懂浏览器的事件流
- 移动端点击事件全攻略,这里的坑你知多少?
- $q 实例分析 Angular 中的 Promise
- 浏览器中唤起native app || 跳转到应用商城下载
- Angular directive 实例详解
- 关于浮动与清除浮动,你应该知道的
- 数组reduce方法的高级技巧
- HTML5 语音波形显示,编辑,上传,下载
- 原生js结合html5制作小飞龙的简易跳球