ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 卓球 (衝突検出) の例 two_html5 チュートリアル スキル

HTML5 卓球 (衝突検出) の例 two_html5 チュートリアル スキル

WBOY
リリース: 2016-05-16 15:48:59
オリジナル
1898 人が閲覧しました

デモアドレス

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

簡単な紹介

ボールはボックス内で自由に移動できます
方向キーを使用して黒いレンガを上下左右に動かし、ボールに衝突させることができます

コードの実装

コードをコピーします
コードは次のとおりです:





乒乓球游戏


var ctx;
var キャンバス;
var ball_x=10;
var ball_y=10;
var ball_radius=10;
var ball_vx=10;
var ball_vy=8;
varwall_x=30;
varwall_y=40;
varwall_width=30;
var 壁の高さ=60;
var box_x=0;
var box_y=0;
var box_width=300;
var box_height=300;
varbound_left=box_x ball_radius;
varbound_right=box_x box_width-ball_radius;
varbound_top=box_y ball_radius;
varbound_bottom=box_y box_height-ball_radius;
var ユニット=10;
関数 intersect(sx, sy, fx, fy, cx, cy, rad)
{
var dx;
ヴァルディ;
変数;
var rt;
dx = fx - sx;
dy = fy - sy;
t = 0.0 - (((sx - cx) * dx (sy - cy) * dy) / (dx * dx dy * dy));
if (t {
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)
true を返します。
else
return false;
}
function move_ball()
{
ball_x=ball_x ball_vx;
ball_y=ball_y ball_vy;
if(ball_x{
ball_x=bound_left;
ball_vx=-ball_vx;
}
if(ball_x>bound_right)
{
ball_x=bound_right;
ball_vx=-ball_vx;
}
if(ball_y{
ball_y=bound_top;
ball_vy=-ball_vy;
}
if(ball_y>bound_bottom)
{
ball_y=bound_bottom;
ball_vy=-ball_vy;
}
//撞到上边
if(intersect(wall_x,wall_y,wall_x壁幅,壁y壁高さ,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壁高さ,ball_x,ball_y,ball_radius))
{
ball_x=wall_x-ball_radius;
ball_vx=-ball_vx;
}
//撞到右边
if(intersect(wall_x 壁幅,壁y,壁x 壁幅,壁y 壁高さ,ボールx,ボールy,ボール半径))
{
ボールx=壁x 壁幅ボール半径;
ball_vx=-ball_vx;
}
//撞到下边
if(intersect(wall_x,wall_y 壁の高さ,wall_x 壁の幅,壁 y 壁の高さ,ball_x,ball_y,ball_radius))
{
ball_y=wall_y 壁の高さ 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-=ユニット;
if(wall_xwall_x=bound_left;
休憩;
ケース 38://up
wall_y-=unit;
if(wall_ywall_y=bound_top;
休憩;
case 39://right
wall_x =unit;
if(wall_x Wall_width>bound_right)
wall_x=bound_right-wall_width;
休憩;
case 40://down
wall_y =unit;
if(wall_y 壁の高さ>bound_bottom)
wall_y=bound_bottom-wall_height;
休憩;
デフォルト:
ブレーク;
}
}
関数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();//メモ
ctx.fillStyle="rgb(0,0,0)";
ctx.fillRect(wall_x,wall_y,wall_width,wall_height);
ctx.ストロークRect(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
}







难点

小球と砖块の碰撞检测及び碰撞処理

小球および線セグメントの探査は別の節文章
http://www.jb51.net/html5/93997.html
内にあります。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート