亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

html5 迷宮游戲(碰撞檢測)實例一
來源:易賢網 閱讀:1649 次 日期:2016-07-13 13:58:39
溫馨提示:易賢網小編為您整理了“html5 迷宮游戲(碰撞檢測)實例一”,方便廣大網友查閱!

通過鼠標拖拽在畫布上添加墻壁,通過方向鍵控制多邊形上下左右移動,遇到墻壁則無法前進,下面為大家介紹下需要解決的問題及具體的實現代碼,感興趣的朋友可以學習下

需要解決的問題

鼠標按下,鼠標拖動,鼠標釋放事件的檢測

多邊形的繪制

墻壁的繪制

多邊形和墻壁的碰撞檢測(實質上是圓和線段的相交判斷)

MYCode:

代碼如下:

<html>

<head>

<title>迷宮</title>

<script>

var canvas_width = 900;

var canvas_height = 350;

var ctx;

var canvas;

var everything = [];

var cur_wall;

var wall_width;

var wall_style = "rgb(200,0,200)";

var walls = [];

var in_motion = false;

var unit = 10;

function Token(sx, sy, rad, style_string, n)

{

this.sx = sx;

this.sy = sy;

this.rad = rad;

this.draw = draw_token;

this.n = n;

this.angle = (2 * Math.PI) / n;

this.move = move_token;

this.fill_style = style_string;

}

function draw_token()//繪制正n邊形

{

ctx.fill_style = this.fill_style;

ctx.beginPath();

var i;

var rad = this.rad;

ctx.moveTo(this.sx + rad * Math.cos(-0.5 * this.angle), this.sy + rad * Math.sin(-0.5 * this.angle));

for (i = 1; i < this.n; i++)

ctx.lineTo(this.sx + rad * Math.cos((i - 0.5) * this.angle), this.sy + rad * Math.sin((i - 0.5) * this.angle));

ctx.fill();

}

function move_token(dx, dy)

{

this.sx += dx;

this.sy += dy;

var i;

var wall;

for (i = 0; i < walls.length; i++)

{

wall = walls[i];

if (intersect(wall.sx, wall.sy, wall.fx, wall.fy, this.sx, this.sy, this.rad))

{

this.sx -= dx;

this.sy -= dy;

break;

}

}

}

function Wall(sx, sy, fx, fy, width, styleString)

{

this.sx = sx;

this.sy = sy;

this.fx = fx;

this.fy = fy;

this.width = width;

this.draw = draw_line;

this.strokeStyle = styleString;

}

function draw_line()

{

ctx.lineWidth = this.width;

ctx.strokeStye = this.strokeStyle;

ctx.beginPath();

ctx.moveTo(this.sx, this.sy);

ctx.lineTo(this.fx, this.fy);

ctx.stroke();

}

//note

var mypent = new Token(100, 100, 20, "rgb(0,0,250)", 5);

everything.push(mypent);

function init()

{

canvas = document.getElementById("canvas");

ctx = canvas.getContext('2d');

//note

canvas.addEventListener('mousedown', start_wall, false);

canvas.addEventListener('mousemove', stretch_wall, false);

canvas.addEventListener('mouseup', finish_wall, false);

window.addEventListener('keydown', getkey_and_move, false);

draw_all();

}

function start_wall(ev)

{

var mx;

var my;

if (ev.layerX || ev.layerx == 0)

{

mx = ev.layerX;

my = ev.layerY;

}

else if (ev.offsetX || ev.offsetX == 0)

{

mx = ev.offsetX;

my = ev.offsetY;

}

cur_wall = new Wall(mx, my, mx + 1, my + 1, wall_width, wall_style);

in_motion = true;

everything.push(cur_wall);

draw_all();

}

function stretch_wall(ev)

{

if (in_motion)

{

var mx;

var my;

if (ev.layerX || ev.layerX == 0)

{

mx = ev.layerX;

my = ev.layerY;

}

else if (ev.offsetX || ev.offsetX == 0)

{

mx = ev.offsetX;

my = ev.offsetY;

}

cur_wall.fx = mx;

cur_wall.fy = my;

draw_all();

}

}

function finish_wall(ev)

{

in_motion = false;

walls.push(cur_wall);

}

function draw_all()

{

ctx.clearRect(0, 0, canvas_width, canvas_height);

var i;

for (i = 0; i < everything.length; i++)

{

everything[i].draw();

}

}

function getkey_and_move(event)

{

var keyCode;

if (event == null)

{

keyCode = window.event.keyCode;

window.event.preventDefault();

}

else

{

keyCode = event.keyCode;

event.preventDefault();

}

switch (keyCode)

{

case 37://left arrow

mypent.move(-unit, 0);

break;

case 38://up arrow

mypent.move(0, -unit);

break;

case 39://right arrow

mypent.move(unit, 0);

break;

case 40:

mypent.move(0, unit);

break;

default:

//window.removeEventListener('keydown', getkey_and_move, false);

}

draw_all();

}

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;

}

</script>

<body onLoad="init();">

<canvas id="canvas" width="900" height="350"></canvas>

</body>

</html>

難點

多邊形和線段碰撞檢測的方法

函數intersect()負責檢測多邊形和線段是否相交

記線段上一點p(x,y)

線段2個端點是(sx,sy)和(fx,fy)

dx=fx-sx

dy=fy-sy

x和y可以表示如下

x=sx+t*dx

y=sy+t*dy

要判斷線段和多邊形是否相交,轉化為判斷線段和多邊形的外接圓是否相交

為此需要找到線段上離圓心o最近的一點p

如果|op|<圓的半徑,則可以判斷線段和圓相交。

否則不相交。

怎么找到線段上離圓心距離最近的點呢?

p點到o點的距離可以表示為

distance=sqrt((x-cx)*(x-cx)+(y-cy)*(y-cy));

代入

x=sx+t*dx和y=sy+t*dy

可以得到distance是一個關于t的函數

對此函數求導

求出函數值為0時對應的t值就可以得到距離圓心最近的點

更多信息請查看網頁制作
易賢網手機網站地址:html5 迷宮游戲(碰撞檢測)實例一
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
国产日韩欧美一区二区三区四区 | 久热这里只精品99re8久| 午夜久久美女| 欧美在线视频二区| 久久久精品日韩| 久久视频一区| 欧美日韩视频| 在线观看视频免费一区二区三区| 激情视频一区二区| 亚洲精品一区二区三| 亚洲第一在线| 中文有码久久| 久久久久一区二区三区| 欧美三级在线| 尹人成人综合网| 一区二区三区成人精品| 久久av一区二区| 欧美黄色aaaa| 99这里有精品| 午夜精品影院| 一本色道久久精品| 久久精品五月| 伊人久久综合| 久久久夜精品| 亚洲精品影院在线观看| 久久aⅴ国产紧身牛仔裤| 欧美1级日本1级| 亚洲欧洲三级| 久久香蕉精品| 激情综合自拍| 午夜在线a亚洲v天堂网2018| 欧美午夜不卡影院在线观看完整版免费| 精品99视频| 免费视频久久| 亚洲国产精品www| 久久激情一区| 一二三区精品| 欧美午夜精品| 久久精品二区三区| 亚洲国产影院| 欧美黄色aaaa| 香蕉成人久久| 亚洲看片免费| 国产在线不卡| 欧美在线高清| 免费永久网站黄欧美| 亚洲国产精品久久久久婷婷老年| 亚洲一区二区在| 亚洲欧洲在线一区| 欧美一区亚洲| 国产麻豆日韩| 中国成人在线视频| 亚洲国产婷婷| 国内精品99| 欧美日韩高清在线一区| 噜噜噜久久亚洲精品国产品小说| 亚洲区第一页| 亚洲精品裸体| 亚洲精美视频| 亚洲黄色av| 激情婷婷欧美| 精品成人久久| 亚洲大片在线| 亚洲国产欧美不卡在线观看| 国产一区日韩一区| 欧美日一区二区三区在线观看国产免| 久久国产精品久久w女人spa| 国产精品一区在线播放| 国产人成精品一区二区三| 亚洲激情黄色| 99人久久精品视频最新地址| 99精品国产高清一区二区| 精品动漫av| 日韩亚洲视频在线| 国产日韩欧美综合精品| 国产精品腿扒开做爽爽爽挤奶网站| 日韩天堂av| 国产精品外国| 玖玖国产精品视频| 欧美日韩p片| 在线不卡亚洲| 国产亚洲一区在线| 久久一区中文字幕| 欧美激情无毛| 亚洲激情另类| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲免费婷婷| 欧美日韩精品不卡| 亚洲精品激情| 久久久久久网| 在线看片一区| 性色av一区二区怡红| 久久综合狠狠| 亚洲欧洲午夜| 久久久蜜桃一区二区人| 激情欧美丁香| 美女尤物久久精品| 亚洲国产精品一区二区第一页| 国产嫩草一区二区三区在线观看 | 久久精品麻豆| 雨宫琴音一区二区在线| 国产精品入口| 日韩亚洲不卡在线| 先锋亚洲精品| 伊甸园精品99久久久久久| 国产色综合网| 欧美三级小说| 免费在线成人av| 伊人久久大香线蕉av超碰演员| 一级日韩一区在线观看| 欧美精品一区二区三区在线看午夜 | 国产精品久久7| 一区二区精品在线| 欧美福利网址| 国产精品一二| 最新亚洲激情| 国产一区二区三区自拍| 亚洲欧美日韩一区在线观看| 亚洲第一伊人| 欧美精品99| 久久综合九色| 免费视频一区二区三区在线观看| 亚洲精品护士| 一区三区视频| 黄色工厂这里只有精品| 欧美国产高清| 久久午夜影视| 香蕉久久国产| 国产欧美一区二区视频| 精品99视频| 欧美日韩精品免费观看视频完整| 亚洲尤物在线| 亚洲一区二区动漫| 99pao成人国产永久免费视频| 午夜精品久久99蜜桃的功能介绍| 亚洲一级在线| 亚洲一区二区在| 国产精品久久久久9999高清| 99精品欧美| 亚洲国产日韩欧美一区二区三区| 激情久久久久久| 亚洲高清资源| 亚洲深夜av| 国产精品夜夜夜一区二区三区尤| 中文精品视频| 国产麻豆日韩| 久久久久在线| 鲁大师成人一区二区三区| 亚洲欧美日韩精品在线| 久久国产直播| 欧美日本国产| 亚洲欧洲在线一区| 国产精品裸体一区二区三区| 中文亚洲字幕| 美女久久网站| 欧美日韩99| 在线成人欧美| 国产伦精品一区二区三区视频孕妇| 国产精品久久久久久久久婷婷| 亚洲一区二区三区涩| 欧美亚洲专区| 午夜久久福利| 亚洲小说区图片区| 亚洲视频高清| 国产亚洲综合精品| 亚洲午夜视频| 中国成人在线视频| 女女同性女同一区二区三区91 | 亚洲成人在线视频网站| 亚洲精品一区二区三区蜜桃久| 国产亚洲精品自拍| 欧美激情aⅴ一区二区三区| 欧美视频四区| 中国女人久久久| 欧美成人首页| 国产精品美女久久久| 久久综合九色99| 欧美黄免费看| 国产精品夜夜夜一区二区三区尤| 午夜国产一区| 亚洲一区二区三区精品在线观看| 午夜国产欧美理论在线播放| 亚洲精品美女| 欧美日韩亚洲一区二区三区在线观看| 亚洲高清电影| 国产人成精品一区二区三| 日韩天天综合| 午夜激情一区| 亚洲一区二区三区免费观看 | 亚洲精品在线二区| 日韩一区二区久久| 欧美人与禽猛交乱配视频| 99国产精品99久久久久久粉嫩| 久久高清免费观看| 激情成人亚洲| 欧美 日韩 国产在线| 欧美三级小说| 久久深夜福利| 性伦欧美刺激片在线观看| 极品av少妇一区二区| 久久国产一二区| 亚洲精选成人| 亚洲高清不卡一区| 国产在线日韩| 欧美日韩1区| 看欧美日韩国产| 免费在线亚洲| 性高湖久久久久久久久| 国产精品久久久亚洲一区| 亚洲欧洲日本国产| 在线精品亚洲一区二区| 国产欧美综合一区二区三区| 1024精品一区二区三区| 亚洲私人影院| 伊人久久大香线蕉综合热线| 亚洲一区欧美激情| 亚洲一区日韩在线| 国产嫩草一区二区三区在线观看| 国产欧美日韩综合一区在线观看| 亚洲精品欧美| 夜夜爽av福利精品导航| 一区二区三区精品国产| 一本综合精品| 亚洲女人av| 久久久水蜜桃| 香蕉久久国产| 欧美另类亚洲| 亚洲黑丝一区二区| 99成人精品| 亚洲在线成人| 久久一本综合频道| 国产精品sm| 亚洲欧洲日本国产| 99精品视频免费全部在线| 亚洲图色在线| 国产欧美一区二区三区国产幕精品| 国产欧美日本在线| 久久国产精品免费一区| 久久久天天操| 欧美激情成人在线| 亚洲激情另类| 久久成人免费| 亚洲无吗在线| 免费在线一区二区| 亚洲夜间福利| 免费在线一区二区| 国产一区二区无遮挡| 99国产成+人+综合+亚洲欧美| 亚洲视频免费| 欧美亚洲免费高清在线观看| 欧美日韩精品免费观看| 一本色道久久综合| 欧美69wwwcom| aa成人免费视频| 欧美一区二区三区在线免费观看| 欧美特黄a级高清免费大片a级| 日韩亚洲国产欧美| 欧美在线影院| 国产日韩精品久久| 欧美日本精品| 久久av在线| 在线亚洲成人| 激情成人亚洲| 久久亚洲欧洲| 国产精品夜夜夜| 欧美精品不卡| 免费日韩精品中文字幕视频在线| 国产精品a级| 久久青草久久| 性色一区二区三区| 伊人久久婷婷色综合98网| 久久国产日韩欧美| 国产亚洲毛片在线| 亚洲国产精品123| 国产伦精品一区二区三区高清版| 亚洲视频一二| 国产精品v亚洲精品v日韩精品| 久久激情网站| 91久久国产综合久久蜜月精品| 欧美极品一区| 你懂的亚洲视频| 久久精品免费| 日韩视频在线观看国产| 黄色精品网站| 好看的日韩av电影| 国产一在线精品一区在线观看| 先锋a资源在线看亚洲| 久久久xxx| 久久亚洲欧美| 午夜精品久久| 国产一区二区中文字幕免费看| 欧美精品一区在线| 欧美日韩综合另类| 欧美人成网站| 狠狠入ady亚洲精品经典电影| 亚洲国产第一| 国产一区二区三区久久| 国产精品久久777777毛茸茸| 欧美日韩1080p| 激情视频一区| 国产欧美午夜| 蜜桃av综合| 欧美日韩在线高清| 亚洲天堂久久| 99国产精品自拍| 国产精品一区二区你懂得| 亚洲女同同性videoxma| 亚洲国产免费看| 亚洲精品男同| 午夜宅男久久久| 欧美激情麻豆| 最近看过的日韩成人| 国产三区精品| 欧美成人综合| 欧美另类一区| 中文欧美日韩| 欧美阿v一级看视频| 国产精品v欧美精品v日韩| 欧美在线观看天堂一区二区三区| 午夜日韩在线| 日韩视频在线播放| 免费亚洲一区二区| 久久人人精品| 亚洲欧洲日夜超级视频| 免费日韩av| 亚洲丰满在线| 久久精品电影| 91久久黄色| 老色鬼久久亚洲一区二区| 欧美88av| 在线一区视频| 欧美激情精品久久久六区热门| 亚洲国产午夜| 亚洲一区二区三区免费观看| 欧美午夜不卡| 亚洲欧美日本日韩| 亚洲午夜激情在线| 狠狠入ady亚洲精品经典电影| 99av国产精品欲麻豆| 久久综合狠狠综合久久综青草| 一区二区视频欧美| 国产午夜精品在线| 狠狠爱综合网| 久久综合福利| 午夜在线一区| 欧美日韩精品免费观看视频完整| 亚洲精品孕妇| 影音先锋亚洲精品| 欧美日韩爆操| 蜜桃伊人久久| 国产精品久久九九| 狠狠综合久久av一区二区老牛| 亚洲免费黄色| 激情综合自拍| 欧美日韩在线精品一区二区三区| 亚洲综合二区| 日韩视频免费| 在线视频国内自拍亚洲视频| 妖精视频成人观看www| 国产一区二区三区自拍| 你懂的视频一区二区| 久久狠狠婷婷| 久久福利一区| 国产欧美丝祙| 中文精品视频一区二区在线观看| 亚洲一级特黄| 激情综合视频| 最新日韩欧美| 亚洲精一区二区三区| 精品成人免费| 亚洲国产高清视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲亚洲精品三区日韩精品在线视频| 国产精品v欧美精品v日韩精品| 亚洲欧洲一区二区天堂久久| 亚洲欧洲日本国产| 在线亚洲自拍| 欧美色123| 伊人精品在线| 一本一道久久综合狠狠老精东影业 | 国产精品久久久久久久久婷婷 | 久久亚洲影院| 国产欧美日韩亚洲| 国产日韩欧美一区| 国产精品乱码一区二区三区| 亚洲在线黄色| 一区二区毛片| 国产美女一区| 好看不卡的中文字幕| 尤物精品在线| 国产精品免费在线| 国产欧美午夜| 欧美一区二区三区四区夜夜大片 | 久久一区亚洲| 狠狠噜噜久久| 在线天堂一区av电影| 鲁鲁狠狠狠7777一区二区| 欧美va亚洲va日韩∨a综合色| 激情久久久久| 一区二区av|