html5中文学习网

您的位置: 首页 > html5教程 > 入门教程 » 正文

html5 乒乓球(碰撞检测)实例二_html5教程技巧

[ ] 已经帮助:人解决问题
点评:小球可以在方框内部自由运动,可以通过方向键控制黑色砖块上下左右移动去与小球发生碰撞,具体的实现思路及代码如下,感兴趣的朋友可以参考下,希望对大家学习html5有所帮助

SApHTML5中文学习网 - HTML5先行者学习网

演示地址SApHTML5中文学习网 - HTML5先行者学习网

http://koking.8u.hanmandarin.com/html5/1.html SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
简单介绍 SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
小球可以在方框内部自由运动 SApHTML5中文学习网 - HTML5先行者学习网
可以通过方向键控制黑色砖块上下左右移动去与小球发生碰撞 SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
代码实现 SApHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
SApHTML5中文学习网 - HTML5先行者学习网
<!-- SApHTML5中文学习网 - HTML5先行者学习网
To change this template, choose Tools | Templates SApHTML5中文学习网 - HTML5先行者学习网
and open the template in the editor. SApHTML5中文学习网 - HTML5先行者学习网
--> SApHTML5中文学习网 - HTML5先行者学习网
<!DOCTYPE html> SApHTML5中文学习网 - HTML5先行者学习网
<html> SApHTML5中文学习网 - HTML5先行者学习网
<head> SApHTML5中文学习网 - HTML5先行者学习网
<title>乒乓球游戏</title> SApHTML5中文学习网 - HTML5先行者学习网
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> SApHTML5中文学习网 - HTML5先行者学习网
<script> SApHTML5中文学习网 - HTML5先行者学习网
var ctx; SApHTML5中文学习网 - HTML5先行者学习网
var canvas; SApHTML5中文学习网 - HTML5先行者学习网
var ball_x=10; SApHTML5中文学习网 - HTML5先行者学习网
var ball_y=10; SApHTML5中文学习网 - HTML5先行者学习网
var ball_radius=10; SApHTML5中文学习网 - HTML5先行者学习网
var ball_vx=10; SApHTML5中文学习网 - HTML5先行者学习网
var ball_vy=8; SApHTML5中文学习网 - HTML5先行者学习网
var wall_x=30; SApHTML5中文学习网 - HTML5先行者学习网
var wall_y=40; SApHTML5中文学习网 - HTML5先行者学习网
var wall_width=30; SApHTML5中文学习网 - HTML5先行者学习网
var wall_height=60; SApHTML5中文学习网 - HTML5先行者学习网
var box_x=0; SApHTML5中文学习网 - HTML5先行者学习网
var box_y=0; SApHTML5中文学习网 - HTML5先行者学习网
var box_width=300; SApHTML5中文学习网 - HTML5先行者学习网
var box_height=300; SApHTML5中文学习网 - HTML5先行者学习网
var bound_left=box_x+ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
var bound_right=box_x+box_width-ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
var bound_top=box_y+ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
var bound_bottom=box_y+box_height-ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
var unit=10; SApHTML5中文学习网 - HTML5先行者学习网
function intersect(sx, sy, fx, fy, cx, cy, rad) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
var dx; SApHTML5中文学习网 - HTML5先行者学习网
var dy; SApHTML5中文学习网 - HTML5先行者学习网
var t; SApHTML5中文学习网 - HTML5先行者学习网
var rt; SApHTML5中文学习网 - HTML5先行者学习网
dx = fx - sx; SApHTML5中文学习网 - HTML5先行者学习网
dy = fy - sy; SApHTML5中文学习网 - HTML5先行者学习网
t = 0.0 - (((sx - cx) * dx + (sy - cy) * dy) / (dx * dx + dy * dy)); SApHTML5中文学习网 - HTML5先行者学习网
if (t < 0.0) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
t = 0.0; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
else if (t > 1.0) SApHTML5中文学习网 - HTML5先行者学习网
t = 1.0; SApHTML5中文学习网 - HTML5先行者学习网
var dx1 = (sx + t * dx) - cx; SApHTML5中文学习网 - HTML5先行者学习网
var dy1 = (sy + t * dy) - cy; SApHTML5中文学习网 - HTML5先行者学习网
var rt = dx1 * dx1 + dy1 * dy1; SApHTML5中文学习网 - HTML5先行者学习网
if (rt < rad * rad) SApHTML5中文学习网 - HTML5先行者学习网
return true; SApHTML5中文学习网 - HTML5先行者学习网
else SApHTML5中文学习网 - HTML5先行者学习网
return false; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
function move_ball() SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_x=ball_x+ball_vx; SApHTML5中文学习网 - HTML5先行者学习网
ball_y=ball_y+ball_vy; SApHTML5中文学习网 - HTML5先行者学习网
if(ball_x<bound_left) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_x=bound_left; SApHTML5中文学习网 - HTML5先行者学习网
ball_vx=-ball_vx; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
if(ball_x>bound_right) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_x=bound_right; SApHTML5中文学习网 - HTML5先行者学习网
ball_vx=-ball_vx; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
if(ball_y<bound_top) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_y=bound_top; SApHTML5中文学习网 - HTML5先行者学习网
ball_vy=-ball_vy; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
if(ball_y>bound_bottom) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_y=bound_bottom; SApHTML5中文学习网 - HTML5先行者学习网
ball_vy=-ball_vy; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
//撞到上边 SApHTML5中文学习网 - HTML5先行者学习网
if(intersect(wall_x,wall_y,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius)) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_y=wall_y-ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
ball_vy=-ball_vy; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
//撞到左边 SApHTML5中文学习网 - HTML5先行者学习网
if(intersect(wall_x,wall_y,wall_x,wall_y+wall_height,ball_x,ball_y,ball_radius)) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_x=wall_x-ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
ball_vx=-ball_vx; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
//撞到右边 SApHTML5中文学习网 - HTML5先行者学习网
if(intersect(wall_x+wall_width,wall_y,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius)) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_x=wall_x+wall_width+ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
ball_vx=-ball_vx; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
//撞到下边 SApHTML5中文学习网 - HTML5先行者学习网
if(intersect(wall_x,wall_y+wall_height,wall_x+wall_width,wall_y+wall_height,ball_x,ball_y,ball_radius)) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ball_y=wall_y+wall_height+ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
ball_vy=-ball_vy; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
function move_wall(ev) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
var keyCode; SApHTML5中文学习网 - HTML5先行者学习网
if(event==null) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
keyCode=window.event.keyCode; SApHTML5中文学习网 - HTML5先行者学习网
window.event.preventDefault(); SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
else SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
keyCode=event.keyCode; SApHTML5中文学习网 - HTML5先行者学习网
event.preventDefault(); SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
switch(keyCode) SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
case 37://left; SApHTML5中文学习网 - HTML5先行者学习网
wall_x-=unit; SApHTML5中文学习网 - HTML5先行者学习网
if(wall_x<bound_left) SApHTML5中文学习网 - HTML5先行者学习网
wall_x=bound_left; SApHTML5中文学习网 - HTML5先行者学习网
break; SApHTML5中文学习网 - HTML5先行者学习网
case 38://up SApHTML5中文学习网 - HTML5先行者学习网
wall_y-=unit; SApHTML5中文学习网 - HTML5先行者学习网
if(wall_y<bound_top) SApHTML5中文学习网 - HTML5先行者学习网
wall_y=bound_top; SApHTML5中文学习网 - HTML5先行者学习网
break; SApHTML5中文学习网 - HTML5先行者学习网
case 39://right SApHTML5中文学习网 - HTML5先行者学习网
wall_x+=unit; SApHTML5中文学习网 - HTML5先行者学习网
if(wall_x+wall_width>bound_right) SApHTML5中文学习网 - HTML5先行者学习网
wall_x=bound_right-wall_width; SApHTML5中文学习网 - HTML5先行者学习网
break; SApHTML5中文学习网 - HTML5先行者学习网
case 40://down SApHTML5中文学习网 - HTML5先行者学习网
wall_y+=unit; SApHTML5中文学习网 - HTML5先行者学习网
if(wall_y+wall_height>bound_bottom) SApHTML5中文学习网 - HTML5先行者学习网
wall_y=bound_bottom-wall_height; SApHTML5中文学习网 - HTML5先行者学习网
break; SApHTML5中文学习网 - HTML5先行者学习网
default: SApHTML5中文学习网 - HTML5先行者学习网
break; SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
function draw_all() SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
ctx.beginPath(); SApHTML5中文学习网 - HTML5先行者学习网
ctx.clearRect(box_x,box_y,box_width,box_height); SApHTML5中文学习网 - HTML5先行者学习网
ctx.fillStyle="rgb(255,0,0)"; SApHTML5中文学习网 - HTML5先行者学习网
//ctx.lineWidth=ball_radius; SApHTML5中文学习网 - HTML5先行者学习网
ctx.arc(ball_x,ball_y,ball_radius,0,Math.PI*2,true); SApHTML5中文学习网 - HTML5先行者学习网
ctx.fill();//note SApHTML5中文学习网 - HTML5先行者学习网
ctx.fillStyle="rgb(0,0,0)"; SApHTML5中文学习网 - HTML5先行者学习网
ctx.fillRect(wall_x,wall_y,wall_width,wall_height); SApHTML5中文学习网 - HTML5先行者学习网
ctx.strokeRect(box_x,box_y,box_width,box_height); SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
function init() SApHTML5中文学习网 - HTML5先行者学习网
{ SApHTML5中文学习网 - HTML5先行者学习网
canvas=document.getElementById('canvas'); SApHTML5中文学习网 - HTML5先行者学习网
ctx=canvas.getContext('2d'); SApHTML5中文学习网 - HTML5先行者学习网
draw_all(); SApHTML5中文学习网 - HTML5先行者学习网
setInterval(draw_all,100); SApHTML5中文学习网 - HTML5先行者学习网
setInterval(move_ball,50); SApHTML5中文学习网 - HTML5先行者学习网
window.addEventListener('keydown',move_wall,false);//note SApHTML5中文学习网 - HTML5先行者学习网
} SApHTML5中文学习网 - HTML5先行者学习网
</script> SApHTML5中文学习网 - HTML5先行者学习网
</head> SApHTML5中文学习网 - HTML5先行者学习网
<body onLoad="init();"> SApHTML5中文学习网 - HTML5先行者学习网
<canvas id="canvas" width="300" height="300"></canvas> SApHTML5中文学习网 - HTML5先行者学习网
</body> SApHTML5中文学习网 - HTML5先行者学习网
</html> SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
难点 SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
小球和砖块的碰撞检测以及碰撞处理 SApHTML5中文学习网 - HTML5先行者学习网
将砖块分解为4条线段 SApHTML5中文学习网 - HTML5先行者学习网
分别对小球和每条线段进行碰撞检测。 SApHTML5中文学习网 - HTML5先行者学习网
SApHTML5中文学习网 - HTML5先行者学习网
小球和线段的碰撞检测在另一篇文章http://www.jb51.net/html5/93997.html中有介绍。SApHTML5中文学习网 - HTML5先行者学习网

SApHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助