html5 乒乓球(碰撞检测)实例二

2016-02-19 10:39 55 1 收藏

下面这个html5 乒乓球(碰撞检测)实例二教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - Web开发 】

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

演示地址

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

http://koking.8u.hanmandarin.com/html5/1.html

简单介绍

小球可以在方框内部自由运动
可以通过方向键控制黑色砖块上下左右移动去与小球发生碰撞

代码实现

代码如下:

!--
To change this template, choose Tools | Templates
and open the template in the editor.
--
!DOCTYPE html
html
head
title乒乓球游戏/title
meta http-equiv="Content-Type" content="text/html; charset=utf-8"
script
var ctx;
var canvas;
var ball_x=10;
var ball_y=10;
var ball_radius=10;
var ball_vx=10;
var ball_vy=8;
var wall_x=30;
var wall_y=40;
var wall_width=30;
var wall_height=60;
var box_x=0;
var box_y=0;
var box_width=300;
var box_height=300;
var bound_left=box_x+ball_radius;
var bound_right=box_x+box_width-ball_radius;
var bound_top=box_y+ball_radius;
var bound_bottom=box_y+box_height-ball_radius;
var unit=10;
function intersect(sx, sy, fx, fy, cx, cy, rad)
{
var dx;
var dy;
var t;
var rt;
dx = fx - sx;
dy = fy - sy;
t = 0.0 - (((sx - cx) * dx + (sy - cy) * dy) / (dx * dx + dy * dy));
if (t  0.0)
{
t = 0.0;
}
else if (t  1.0)
t = 1.0;
var dx1 = (sx + t * dx) - cx;
var dy1 = (sy + t * dy) - cy;
var rt = dx1 * dx1 + dy1 * dy1;
if (rt  rad * rad)
return true;
else
return false;
}
function move_ball()
{
ball_x=ball_x+ball_vx;
ball_y=ball_y+ball_vy;
if(ball_xbound_left)
{
ball_x=bound_left;
ball_vx=-ball_vx;
}
if(ball_xbound_right)
{
ball_x=bound_right;
ball_vx=-ball_vx;
}
if(ball_ybound_top)
{
ball_y=bound_top;
ball_vy=-ball_vy;
}
if(ball_ybound_bottom)
{
ball_y=bound_bottom;
ball_vy=-ball_vy;
}
//撞到上边
if(intersect(wall_x,wall_y,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius))
{
ball_y=wall_y-ball_radius;
ball_vy=-ball_vy;
}
//撞到左边
if(intersect(wall_x,wall_y,wall_x,wall_y+wall_height,ball_x,ball_y,ball_radius))
{
ball_x=wall_x-ball_radius;
ball_vx=-ball_vx;
}
//撞到右边
if(intersect(wall_x+wall_width,wall_y,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius))
{
ball_x=wall_x+wall_width+ball_radius;
ball_vx=-ball_vx;
}
//撞到下边
if(intersect(wall_x,wall_y+wall_height,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius))
{
ball_y=wall_y+wall_height+ball_radius;
ball_vy=-ball_vy;
}
}
function move_wall(ev)
{
var keyCode;
if(event==null)
{
keyCode=window.event.keyCode;
window.event.preventDefault();
}
else
{
keyCode=event.keyCode;
event.preventDefault();
}
switch(keyCode)
{
case 37://left;
wall_x-=unit;
if(wall_xbound_left)
wall_x=bound_left;
break;
case 38://up
wall_y-=unit;
if(wall_ybound_top)
wall_y=bound_top;
break;
case 39://right
wall_x+=unit;
if(wall_x+wall_widthbound_right)
wall_x=bound_right-wall_width;
break;
case 40://down
wall_y+=unit;
if(wall_y+wall_heightbound_bottom)
wall_y=bound_bottom-wall_height;
break;
default:
break;
}
}
function draw_all()
{
ctx.beginPath();
ctx.clearRect(box_x,box_y,box_width,box_height);
ctx.fillStyle="rgb(255,0,0)";
//ctx.lineWidth=ball_radius;
ctx.arc(ball_x,ball_y,ball_radius,0,Math.PI*2,true);
ctx.fill();//note
ctx.fillStyle="rgb(0,0,0)";
ctx.fillRect(wall_x,wall_y,wall_width,wall_height);
ctx.strokeRect(box_x,box_y,box_width,box_height);
}
function init()
{
canvas=document.getElementById('canvas');
ctx=canvas.getContext('2d');
draw_all();
setInterval(draw_all,100);
setInterval(move_ball,50);
window.addEventListener('keydown',move_wall,false);//note
}
/script
/head
body onLoad="init();"
canvas id="canvas" width="300" height="300"/canvas
/body
/html

难点

小球和砖块的碰撞检测以及碰撞处理
将砖块分解为4条线段
分别对小球和每条线段进行碰撞检测。


来源:https://www.tulaoshi.com/n/20160219/1595355.html

延伸阅读
标签: 乒乓球 减肥 瘦身
打乒乓球能减肥吗 1 结论:打乒乓球能减肥,但是减肥效果一般。 乒乓球虽然需要左右前后快速跑动,但并不是持续高强度的运动,每次击球几次后都会捡球,相当于做了短暂的休息,因此属于低强度的有氧运动,燃脂减肥效果不是很好。有数据显示,不间断打乒乓球一小时消耗的热量是270卡,大概相当于跑步半小时消耗的热量。 打乒乓球多久开...
标签: 养生 健康
乒乓球运动因其运动方式较简便,设施简单而广受欢迎。乒乓球是中华人民共和国国球,是一种世界流行的球类体育项目。乒乓球运动集健身、竞技、娱乐于一体,具有良好的健身价值,值得大力推广。那么,打乒乓球的好处都有哪些呢?  打乒乓球有哪些好处  1Tulaoshi.com.培养良好的心理素质  乒乓球运动中,在全面提高身体素...
标签: 锻炼
打乒乓球前的热身活动 1、头部 头部尽量向前后左右四个方向伸展到最大限度后慢慢收回,然后分别转向左右肩部至最大限度,慢慢收回。 2、上肢和肩部 胳膊一支背到头后面,弯曲小臂,用另外一只手拉住肘部往后拉。一支胳膊伸直,另一支成弯曲向上,把伸直的胳膊放到弯曲胳膊里用力往里夹,肩部得到伸展。胳膊还可以背到背后双手手指交叉,往...
标签: Web开发
因为标题写的是实例,所以本次就不做讲解了,因为这个实例我也算是东拼西凑整出来的,参考了大概5、6款拖拽上传的插件和demo,然后把其中好的地方挑出来,最后就成了这么一个实例,一起来看下吧(地址不能保证长久有效,如果失效请在文章最后点击demo下载):   界面样式我是参考了一个国外的相册网站,改动不大,只是把鸟语转换成中文,...
标签: Web开发
jQuery 介绍 用jQuery操作游戏元素 我们已经用jQuery初始化了球拍。现在我们做一个如何使用jQuery安置游戏元素的实验。 动起来-使用jQuery修改元素的位置 让我们用网格背景来检查我们游戏的元素位置 : 1、我们继续使用PingPong示例。 2、从这里下载我们需要的网格背景图片。 3、在练习目录下创建一个名字叫images的文件夹。 4、...

经验教程

87

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部