精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用HTML5開發(fā)體感游戲:VeloMaze的開發(fā)案例

移動(dòng)開發(fā)
HTML5現(xiàn)在越來越像一個(gè)游戲開發(fā)平臺。但有時(shí)候,游戲領(lǐng)域?qū)τ谌绾螒?yīng)用HTML5的特性設(shè)置了相當(dāng)多的限制條件,尤其是對那些訪問硬件設(shè)備的接口更是如此。在2012年11月初,我加入了copypastel小組,并決定分享我在第三屆年度NodeKO競賽中開發(fā)游戲的經(jīng)歷。盡管由于時(shí)間限制無法詳解全項(xiàng)目,我相信結(jié)果仍舊值得與愛好游戲相關(guān)技術(shù)的讀者們分享。

我打算公開該游戲的技術(shù)背景,及其如何在多種網(wǎng)絡(luò)技術(shù)基礎(chǔ)之上構(gòu)建整個(gè)項(xiàng)目。應(yīng)用在該游戲中的技術(shù)有:Node.jsexpress(靜態(tài)內(nèi)容服務(wù)),Socket.io(處理客戶端和服務(wù)器端關(guān)于小球往復(fù)運(yùn)動(dòng)的通訊),Sylvester.js(物理引擎的矢量庫)和jQuery

那什么是VeloMaze呢?VeloMaze是被許多點(diǎn)狀恐龍(迅猛龍)占據(jù)的迷宮。迅猛龍希望小球能一直在迷宮中移動(dòng)。由于迷宮的連續(xù)性,它可 以說是沒有終點(diǎn)的。但是每當(dāng)你通過一級關(guān)卡,就會(huì)給你之后的玩家造成更多麻煩,因?yàn)樗ㄋ?huì)獲得另一個(gè)小球!是不是很有趣?這就是迷宮中的生活。

這個(gè)游戲非常適合那些在同一個(gè)地方,而且每個(gè)人都有手機(jī)的團(tuán)隊(duì)。這在當(dāng)今是很常見的。這里還有一段解說游戲系統(tǒng)要求的視頻

系統(tǒng)運(yùn)行最重要的條件就是加速計(jì)。加速計(jì)是測量加速度的設(shè)備。帶有加速計(jì)的設(shè)備通常返回重力的角度或者重力的矢量數(shù)據(jù)。這在某些瀏覽器中有可能做到,比如在下列網(wǎng)貼中所提及的:

從描述系統(tǒng)要求的視頻中可以注意到,某些筆記本電腦中也配有加速計(jì)。相當(dāng)多新式的MacBook Pro筆記本為防止跌落時(shí)造成硬件損傷也安裝了加速度計(jì)(我那臺2009年買的筆記本中就安裝著一個(gè))。我覺得以筆記本旋轉(zhuǎn)為基礎(chǔ)的游戲開發(fā)領(lǐng)域目前還是 少有人涉足的地帶!下面的圖表演示了應(yīng)用程序架構(gòu)在上層是如何搭建的。

 

游戲本身的開發(fā)相當(dāng)容易,但全面支持所有的瀏覽器和加速度計(jì)組合需要做更多的工作,而我們的小組只擁有48小時(shí)的時(shí)間。因此,有些測試我們是沒有做的,比如對最新版Android系統(tǒng)的測試;但是我驚喜的發(fā)現(xiàn),我們的游戲在其中卻運(yùn)行的非常好!然而運(yùn)氣只是成功的一部分。在下面的篇幅中,我打算解析游戲玩法的編寫,并解釋究竟怎樣使該游戲具有可玩性。

讀取加速度計(jì)數(shù)據(jù)非常簡單,不過標(biāo)準(zhǔn)的缺失使得該過程比預(yù)想的更加難以實(shí)現(xiàn)。首先,我們快速調(diào)查了小組內(nèi)現(xiàn)有的各種不同的平臺和瀏覽器組合,為適應(yīng)各種組合方式,編寫了如下代碼:

  1. /* 這里檢查游覽器是否支持DeviceOrientationEvent事件(鏈接到W3C)。*/ 
  2. if (window.DeviceOrientationEvent) { 
  3.     window.addEventListener('deviceorientation'function(e) { 
  4.       // 我們從事件“e”中獲取角度值并轉(zhuǎn)化成弧度值。 
  5.       leftRightAngle = e.gamma /90.0*Math.PI/2; 
  6.       frontBackAngle = e.beta /90.0*Math.PI/2; 
  7.     }, false); 
  8. else if (window.OrientationEvent) { //另一個(gè)選項(xiàng)是Mozilla版本同樣的東西 
  9.     window.addEventListener('MozOrientation'function(e) { 
  10.       //在這里將長度值當(dāng)做一個(gè)單位,并轉(zhuǎn)換成角度值,看起來運(yùn)行的不錯(cuò)。 
  11.       leftRightAngle = e.x * Math.PI/2; 
  12.       frontBackAngle = e.y * Math.PI/2; 
  13.     }, false); 
  14. else { 
  15.     // 自然地,沒有瀏覽器支持的大多數(shù)人會(huì)獲取這個(gè)。 
  16.     setStatus('Your device does not support orientation reading. Please use Android 4.0 or later, iOS (MBP laptop  
  17. is fine) or similar platform.'); 

結(jié)果是,代碼可以在版本較新的Chrome中正常運(yùn)行,也有人反饋說說它也可以運(yùn)行在較新版本的iOS上的Safari瀏覽器當(dāng)中(但是我手頭上的 Safari并不支持)。我決定不再試圖尋找那種能讀取所有可能用的瀏覽器中加速度計(jì)數(shù)據(jù)的普適性解決方案,因?yàn)楝F(xiàn)實(shí)是我們在Node淘汰賽的編碼環(huán)節(jié)中 個(gè)只有48小時(shí)的時(shí)間,而當(dāng)時(shí)游戲的架構(gòu)還沒有完成。

我決定使用Sylvester,它是一個(gè)碰撞檢測的向量和矩陣數(shù)學(xué)庫。其實(shí)我也可以使用Box2D JS來節(jié)省時(shí)間,但是由于有過Sylvester的使用經(jīng)驗(yàn),并且所需的碰撞檢測比較簡單,我還是決定使用Sylvester。檢查小球是否落到洞里去的代碼如下所示:

  1. function checkBallHole(ball, hole, dropped) { 
  2.     // 用Sylvester定義洞和求的位置為矢量對象 
  3.     var holeVector = $V([hole.x, hole.y]); 
  4.     var ballVector = $V([ball.x, ball.y]); 
  5.     // 在Sylvester中用向量簡單的計(jì)算距離 
  6.     if (ballVector.distanceFrom(holeVector) < hole.r) { 
  7.       // 用球的位置作為變量執(zhí)行回調(diào)函數(shù) 
  8.       dropped(ballVector); 
  9.     } 

所以事實(shí)上這里沒有什么復(fù)雜的:如果你的小球的中心位于洞內(nèi),那么就會(huì)觸發(fā)“dropped”的函數(shù)。這段代碼在每幀運(yùn)行一次,那么以前開發(fā)過游戲 的朋友都知道,這種實(shí)現(xiàn)方式可能會(huì)造成小球在這一幀內(nèi)飛躍洞穴而沒有掉進(jìn)去。然而,在日常生活中我們知道,如果你用足夠快的速度將小球推向洞穴,它是可以 滑過而不掉落的,所以這不是個(gè)問題。

這個(gè)游戲中也有墻體,所以碰撞檢測也是必須要做的。Sylvester提供了一種目標(biāo)與計(jì)算線狀對象的放發(fā),我用的就是這個(gè)。簡單的代碼如下:

  1. // 計(jì)算球和墻壁碰撞時(shí)的沖擊矢量數(shù)據(jù) 
  2. function impactBallByWall(ball, wall) { 
  3.     var ballVector = $V([ball.x, ball.y]); 
  4.     // 定義墻體為線段(x1,y1) (x2,y2) 
  5.     var wallSegment = Line.Segment.create( 
  6.                   $V([wall.sx, wall.sy]), 
  7.                   $V([wall.dx, wall.dy])); 
  8.      
  9.     // 計(jì)算墻與球的最近點(diǎn)(幾乎就要撞上的那個(gè)位置) 
  10.     var collisionPoint = wallSegment.pointClosestTo(ballVector) 
  11.                   .to2D(); // needed by sylvester to convert 3D to 2D vector 
  12.      
  13.     //sylvester將矢量數(shù)據(jù)從3D轉(zhuǎn)化成2D所需的變量,然后看這個(gè)距離在當(dāng)前框架內(nèi)為多少(并不是在兩個(gè)框架之間差距多少) 
  14.     var dist = collisionPoint.distanceFrom(ballVector); 
  15.      
  16.     //天真的假設(shè)碰撞只發(fā)生在球和墻的距離小于球的半徑的情況下 
  17.     if (dist < ball.r) { 
  18.         //調(diào)整到一個(gè)合適的值。較大的逆質(zhì)量值意味著更大的影響(和較小的質(zhì)量) 
  19.     var inverseMassSum = 1/100.0; 
  20.     //從球心到碰撞點(diǎn)的向量 
  21.     var differenceVector = collisionPoint.subtract(ballVector); 
  22.     var collisionNormal = differenceVector.multiply(1.0/dist); 
  23.     // 球陷下去的部分相當(dāng)于在墻內(nèi) 
  24.     var penetrationDistance = ball.r-dist; 
  25.     //碰撞時(shí)球的速率 
  26.     var collisionVelocity = $V([ball.vx, ball.vy]); 
  27.         // 從點(diǎn)屬性中我們獲得沖擊速度 
  28.     var impactSpeed = collisionVelocity.dot(collisionNormal); 
  29.      
  30.     if (impactSpeed >= 0) { 
  31.         // 計(jì)算沖擊量。運(yùn)動(dòng)能量在每次碰撞是以2-1-0.4=0.6的倍率遞減 
  32.         var impulse = collisionNormal.multiply( 
  33.                    (-1.4)*impactSpeed/(inverseMassSum)); 
  34.         //沖擊只會(huì)作用在球上,因?yàn)閴Ρ辉O(shè)計(jì)為固定的 
  35.         var newBallVelocity = $V([ball.vx, ball.vy]).add( 
  36.                    impulse.multiply(inverseMassSum)); 
  37.         //把值傳回原來的對象 
  38.         ball.vx = newBallVelocity.e(1); 
  39.         ball.vy = newBallVelocity.e(2); 
  40.        } 
  41.     } 

在實(shí)現(xiàn)小球和墻體的碰撞過程時(shí)我做了許多并非真實(shí)的假設(shè)(但是跟現(xiàn)實(shí)足夠接近)。首先,墻體的厚度為零(而不是實(shí)際上的5像素),而且,我沒有計(jì)算兩幀之 間發(fā)生了什么。很明顯,這會(huì)導(dǎo)致游戲中球體有能力穿越墻體。通過創(chuàng)建球體在不同幀之間的運(yùn)動(dòng)線段并找出球體三角與墻體之間是否有交叉,就很可以容易的測試 到是否會(huì)發(fā)生碰撞。那么我們就必須要計(jì)算小球和墻體發(fā)生碰撞的位置。在上文的代碼段中,這個(gè)位置數(shù)據(jù)就存在變量“collisionPoint”內(nèi)(見下圖)。

我很喜歡Ganvas和WebGL,但是我們計(jì)劃使用DOM和jQuery來做渲染,因?yàn)槲覀兂酥谱髑蝮w滾動(dòng)之外,不需要任何Ganvas和WebGL 的特效(如果這樣實(shí)現(xiàn),其實(shí)是很優(yōu)雅的,真可惜)。使用DOM渲染的場景在縮放時(shí)有點(diǎn)生硬,但它很容易實(shí)現(xiàn)。我寫了下面的函數(shù)用于繪制游戲中的子畫面。

  1.    //設(shè)置DOM元素屬性以反映sprite對象 
  2.    setElementPosition: function(element, sprite) { 
  3.        // 同步sprite維數(shù) 
  4. sprite.width = (maze.getSquareWidth() * sprite.r * 2); 
  5. sprite.height = (maze.getSquareHeigth() * sprite.r * 2); 
  6. var x = sprite.x; 
  7. var y = sprite.y; 
  8. /* 在絕對定位中計(jì)算樣式屬性left和top的值 
  9. * 從而確保點(diǎn)(x,y)在sprire的中心位置(使距離計(jì)算更加簡單) 
  10. */ 
  11. var newLeft = (x * maze.getSquareWidth()  - element.width() / 2.0); 
  12. var newTop = (y * maze.getSquareHeigth()  - element.height() / 2.0); 
  13. // 避免sprite因?yàn)槭艿絺鞲衅鞒掷m(xù)輸入的影響而產(chǎn)生的顫抖 
  14. // 通過一個(gè)閾值判斷是否顯示球在屏幕上的移動(dòng)。 
  15. // 這是一個(gè)相當(dāng)大的閾值,對于某些設(shè)備來說應(yīng)該選擇較小的值。 
  16. if (thresholded(element.css('left') - newLeft, 5) !== 0) { 
  17.     //設(shè)置DOM元素的x坐標(biāo)位置 
  18.     element.css('left', parseInt(newLeft) + 'px'); 
  19. if (thresholded(element.css('top') - newTop, 5) !== 0) { 
  20.     //設(shè)置DOM元素的y坐標(biāo)位置 
  21.     element.css('top', parseInt(newTop) + 'px'); 
  22. //設(shè)置DOM元素的大小。 
  23. element.css('width', sprite.width + 'px'); 
  24. element.css('height', sprite.height + 'px'); 
  25. // 球狀 DOM元素包含許多層(所有的div),所以重置所有層。 
  26. element.find('div').each(function () { 
  27. $(this).css('width', sprite.width + 'px'); 
  28. $(this).css('height', sprite.height + 'px'); 
  29. }); 
  30. // sprite位置的調(diào)試信息。通過點(diǎn)擊‘enter’顯示調(diào)試信息。 
  31. element.find('.location').html('('+parseInt(sprite.x*10)/10.0+','+parseInt(sprite.y*10)/10.0+')'); 
  32.    }, 

我做了一個(gè)根據(jù)視角實(shí)時(shí)縮放的功能,因此在每個(gè)框架中的寬度和高度都是計(jì)算得到的。很不幸在游戲中沒有體現(xiàn)出這點(diǎn),因?yàn)槲覀儑L試編程控制瀏覽器旋轉(zhuǎn)失敗了(沒有用于此項(xiàng)功能的接口,所以這還需要破解)。所以我們最后決定,通知用戶關(guān)閉手機(jī)瀏覽器的旋轉(zhuǎn)功能,如下圖所示:

所有的加速度計(jì)數(shù)據(jù)的讀取,物理引擎的運(yùn)行和DOM渲染都被歸攏到一個(gè)主循環(huán)中了。我將所有的主循環(huán)的代碼放置到函數(shù)“update”中并且每100毫秒運(yùn)行一次(我知道這不夠頻繁,但是它在我的設(shè)備上運(yùn)行的很好,所以就暫時(shí)忽略這個(gè)設(shè)定值吧),像這樣:

  1. window.setInterval(function() { update(); }, 100); 

客戶端的所有源代碼可以點(diǎn)擊這里獲取。

順便提一句,我對于新式的視網(wǎng)膜MacBook Pros非常失望,它沒有加速計(jì)(就像我們某位玩家提到的),因?yàn)樗鼈兊腟SD驅(qū)動(dòng)器沒有可以移動(dòng)的部件!所以也許以筆記本旋轉(zhuǎn)為基礎(chǔ)的游戲看起來要到此為止了。

責(zé)任編輯:徐川 來源: InfoQ
相關(guān)推薦

2015-07-08 16:38:10

Cocos游戲引擎

2015-09-06 09:51:02

html5開發(fā)經(jīng)驗(yàn)開發(fā)工具

2013-03-27 09:50:53

HTML5游戲Android開發(fā)

2015-09-06 13:26:41

HTML5游戲開發(fā)工具手游開發(fā)

2015-09-07 14:17:44

HTML5游戲開發(fā)工具

2012-03-29 09:18:47

HTML5WEB

2015-10-23 13:44:14

巴巴獵

2015-07-10 10:27:21

Cocos游戲開發(fā)引擎

2013-01-08 11:00:20

IBMdW

2012-05-03 14:29:53

HTML5

2016-01-05 09:39:32

HTML5游戲開發(fā)工具

2014-11-12 16:00:12

火舞游戲

2012-04-12 11:11:15

HTML5APIWEB

2012-05-09 09:41:58

HTML5

2012-02-14 13:50:21

ibmdw

2012-05-10 09:45:14

HTML5

2012-11-07 09:43:58

IBMdw

2015-07-24 17:08:24

2012-01-06 14:10:13

HTML 5

2012-05-15 10:35:35

HTML5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区二区在线视频| 国产在线观看免费一区| 亚洲乱亚洲乱妇无码| 日韩精品一区二区三区久久| 国产午夜在线视频| 国内一区二区在线| 97在线视频一区| 波多野结衣家庭教师在线观看| 国产精品美女久久久久人| 亚洲综合色噜噜狠狠| 久久99精品久久久久久水蜜桃 | 深夜视频在线免费| 美国十次了思思久久精品导航| 色综合久综合久久综合久鬼88| brazzers精品成人一区| 精品成人18| 色哟哟亚洲精品| 国产一区二区三区播放| 极品白浆推特女神在线观看 | 国内精品久久99人妻无码| 国产亚洲人成a在线v网站| 亚洲国产综合在线| 亚洲欧美精品在线观看| 黄色成人一级片| 久久精品国产成人一区二区三区| 国内成人精品视频| 国内毛片毛片毛片毛片毛片| 爽爽窝窝午夜精品一区二区| 日韩一级免费观看| 超碰在线公开97| 中文不卡1区2区3区| 一区二区三区在线高清| 四虎影院一区二区三区 | 巨大黑人极品videos精品| 亚洲国产精品久久久久婷婷884| 亚洲精品在线免费| 精华区一区二区三区| 不卡大黄网站免费看| 亚洲自拍偷拍福利| 国产又黄又大又爽| 青青草国产精品97视觉盛宴| 日本亚洲精品在线观看| 免费看日韩毛片| 国产一区日韩一区| 久久国产精品久久久久久久久久| 精品日韩在线视频| 欧洲乱码伦视频免费| 亚洲免费视频一区二区| 素人fc2av清纯18岁| 日韩一级淫片| 日韩欧美久久一区| 免费看三级黄色片| 日韩影片在线观看| 制服.丝袜.亚洲.另类.中文| 一个色综合久久| 九七电影院97理论片久久tvb| 色婷婷狠狠综合| 黄www在线观看| 欧洲亚洲两性| 欧洲国产伦久久久久久久| 99草草国产熟女视频在线| 激情都市亚洲| 欧美视频日韩视频在线观看| av无码精品一区二区三区| 日产精品一区| 欧美日韩另类国产亚洲欧美一级| 精品亚洲一区二区三区四区| 欧美性生活一级| 欧美一区中文字幕| 国产精品偷伦视频免费观看了| 91蜜桃臀久久一区二区| 精品精品欲导航| 亚洲黄色免费在线观看| 欧美男男gaytwinkfreevideos| 亚洲香蕉成人av网站在线观看| 成人激情五月天| 图片区亚洲欧美小说区| 欧美福利小视频| 国产超碰人人爽人人做人人爱| 性色av一区二区怡红| 国产激情视频一区| 中文字幕在线一| 福利一区二区在线| 欧美日韩高清在线一区| 欧美激情免费| 亚洲国产精品久久一线不卡| 一级黄色香蕉视频| 国产一区二区三区| 亚洲加勒比久久88色综合| 一区二区三区伦理片| 天堂美国久久| 88xx成人精品| 一级爱爱免费视频| 成人黄色国产精品网站大全在线免费观看| 好吊色欧美一区二区三区| 懂色一区二区三区| 亚洲综合成人在线视频| 黄色一级一级片| 国产麻豆一区二区三区| 亚洲精品一区二区在线| 国产高潮国产高潮久久久91| 国产农村妇女精品一二区| 国产精品视频最多的网站| 性一交一乱一色一视频麻豆| 国产日产欧美一区二区视频| 欧美中文字幕在线观看视频| 快播电影网址老女人久久| 欧美一区午夜视频在线观看 | 国产精品午夜电影| 日韩精品视频在线观看视频| 成人黄色视屏网站| 欧美精品一区二区三| 亚洲色图27p| 免费亚洲网站| 成人动漫视频在线观看免费| 幼a在线观看| 日韩欧美在线视频观看| 欧美日韩一区二区区别是什么| 国产一区日韩| 高清一区二区三区日本久| 在线观看日批视频| 久久久精品欧美丰满| 国产在线无码精品| 福利一区二区三区视频在线观看| 日韩av有码在线| av成人免费网站| 日韩精品三区四区| 久久国产一区| 91在线超碰| 欧美成人一级视频| 很污很黄的网站| 日韩成人免费在线| 欧美午夜精品理论片a级大开眼界| 男女免费观看在线爽爽爽视频| 欧美日本在线播放| 免费看的黄色网| 视频一区视频二区中文字幕| 久久国产精品一区二区三区四区 | 99久久亚洲精品蜜臀| 国产精品1区2区在线观看| 瑟瑟在线观看| 欧美午夜精品久久久久久浪潮| 成人做爰www看视频软件| 欧美在线免费| 3d动漫精品啪啪一区二区三区免费 | 国产成人在线观看网站| 成人aa视频在线观看| 国产免费裸体视频| 一区二区三区国产好| 欧美精品日韩三级| 午夜免费福利视频| 一区二区三区在线视频免费观看 | 91性感美女视频| 久久99中文字幕| 国产欧美自拍一区| 26uuu国产精品视频| 熟妇人妻av无码一区二区三区| 亚洲一区电影777| 国产视频精品视频| 亚洲欧美日韩专区| 欧美日韩在线高清| 欧美综合影院| 欧美大片网站在线观看| 欧美性受xxxx狂喷水| 精品福利樱桃av导航| www.自拍偷拍| 久久国产精品99久久久久久老狼| 亚洲精品在线免费| 日韩免费高清视频网站| 国内精品一区二区三区四区| 四虎影视在线播放| 色狠狠综合天天综合综合| 大吊一区二区三区| 国产精选一区二区三区| 妺妺窝人体色777777| 亚洲专区视频| 国产美女精品视频| 麻豆av在线播放| 亚洲乱码国产乱码精品精| 中文字幕人成人乱码亚洲电影| 综合久久久久综合| 欧美无人区码suv| 丝袜美腿亚洲综合| 韩国黄色一级大片| 任我爽精品视频在线播放| 国产精品美女久久久久久免费| 国产网站在线免费观看| 精品国产凹凸成av人导航| 久久永久免费视频| **欧美大码日韩| av网站免费在线播放| 极品销魂美女一区二区三区| 被灌满精子的波多野结衣| 亚洲最好看的视频| 91香蕉亚洲精品| 天堂av中文在线观看| 日韩在线精品视频| 神马午夜一区二区| 7777精品伊人久久久大香线蕉经典版下载 | av免费在线一区二区三区| 日韩欧美一区电影| 波多野结衣视频在线观看| 亚洲精品国产视频| 白白色免费视频| 成人性色生活片| 手机看片一级片| 国产精品日本| 日本a级片在线观看| 国产精品一线天粉嫩av| 福利视频一区二区三区| 日韩大片欧美大片| 高清欧美性猛交xxxx黑人猛交| 秋霞午夜在线观看| 亚洲片av在线| 天堂av资源网| 精品久久久久久久久久久久久久久久久| 在线视频精品免费| 激情成人中文字幕| 久久久精品91| 亚洲免费观看高清在线观看| 级毛片内射视频| 91蜜桃免费观看视频| 激情综合激情五月| 国产麻豆精品95视频| 日本 片 成人 在线| 久久先锋影音| 一本久道高清无码视频| 牛夜精品久久久久久久99黑人| 亚洲看片网站| 国产影视精品一区二区三区| 久久久久久艹| 另类图片第一页| 国产伦精品一区二区| 精品国产一区二区三区2021| 国产日韩欧美在线| 成人18视频在线观看| 国产精品极品在线| 日韩高清中文字幕一区二区| 38少妇精品导航| 中文字幕色婷婷在线视频| 91精品国产精品| а√天堂中文在线资源8| 久久男人的天堂| av蜜臀在线| 97精品国产97久久久久久免费| 成年人视频免费在线播放| 欧美风情在线观看| 激情av在线| 国内偷自视频区视频综合| 好看的中文字幕在线播放| 国内精品久久久久伊人av| 多野结衣av一区| 欧美一级淫片播放口| 亚洲私拍视频| 国产成人91久久精品| 国产精品扒开腿做爽爽爽视频软件| 日本久久久久久久久久久| 美女福利一区二区三区| 国产精品av电影| 国产资源一区| 亚洲在线观看视频网站| 亚洲精品18| 精品国产综合久久| 九九热爱视频精品视频| 日本一区二区三区视频在线播放| 日本电影一区二区| 国产精品亚洲天堂| 欧美天天视频| 欧美激情国产精品日韩| 青青草国产成人99久久| 91亚洲一区二区| www.66久久| 精品无码在线观看| 亚洲日本乱码在线观看| 久久视频免费在线观看| 一本大道久久a久久精二百| 最近中文字幕免费观看| 91精品久久久久久蜜臀| 国产成人无码www免费视频播放| 日韩久久午夜影院| 欧美激情免费| 69久久夜色精品国产69| 激情中国色综合| 国产一区二区三区奇米久涩| 日韩黄色大片| 精品少妇人欧美激情在线观看| 美女久久一区| 亚洲女人在线观看| 久久影视一区二区| 欧美日韩一级在线观看| 色欧美乱欧美15图片| 国产视频aaa| 亚洲美女av网站| 国产激情视频在线观看| 91高清免费在线观看| 九七电影院97理论片久久tvb| 国产精品免费一区二区三区在线观看| 欧美一二区在线观看| 精品无码一区二区三区爱欲| 日本亚洲视频在线| 高清中文字幕mv的电影| 国产精品久久久久aaaa樱花 | 日本综合在线观看| 午夜久久久久久久久| 国产精品久久久久久69| 精品亚洲男同gayvideo网站| 50度灰在线| 国产精品黄页免费高清在线观看| 国产精品久av福利在线观看| 一本久久a久久精品vr综合 | 91蜜臀精品国产自偷在线| 奇米精品一区二区三区| 国产毛片精品国产一区二区三区| 国产三级av在线播放 | 中文字幕人妻精品一区| 亚洲黄页网在线观看| 国产传媒在线播放| 国产精品va在线播放| 日韩av午夜| 亚洲爆乳无码精品aaa片蜜桃| 久久精品国内一区二区三区| 中文字幕免费高清| 天天影视涩香欲综合网| 亚洲成人第一区| 久久国产精品久久久久久久久久| 岛国精品在线| 亚洲春色在线| 日韩不卡在线观看日韩不卡视频| 添女人荫蒂视频| 亚洲777理论| 人妻91麻豆一区二区三区| 欧美久久精品一级黑人c片| 日本a人精品| 在线观看福利一区| 免费在线一区观看| 中文字幕在线观看免费高清| 日韩欧美一区二区在线| 欧洲视频在线免费观看| 欧洲亚洲在线视频| 亚洲电影一级片| 久久精品.com| 久久免费视频色| 99re这里只有精品在线| 亚洲午夜精品久久久久久久久久久久| 免费成人动漫| 亚洲7777| 久久99精品国产麻豆婷婷洗澡| 国产精品综合激情| 欧美精品在线观看播放| 黄色大片在线播放| 91超碰rencao97精品| 欧美大片一区| 男女性杂交内射妇女bbwxz| 婷婷综合在线观看| 日本视频在线观看一区二区三区| 欧日韩在线观看| 欧美最新另类人妖| 中文字幕在线视频一区二区三区 | 亚洲欧洲偷拍精品| 播放一区二区| 一区二区三区在线视频111| 国模少妇一区二区三区| 久久久久久久久毛片| 欧美精品一区二区三区四区| 欧美激情20| 亚洲一区二区三区精品视频 | 91福利视频导航| 一区二区自拍| 色一情一交一乱一区二区三区| 欧美色图天堂网| 成人影院在线看| 好看的日韩精品| 免费成人在线网站| 久久香蕉精品视频| 亚洲精品一区中文字幕乱码| 日韩伦理一区二区| 免费的av在线| 久久综合成人精品亚洲另类欧美| 亚洲网站在线免费观看| 国模精品视频一区二区三区| 国产欧美一区| 日本黄色大片在线观看| 色悠悠久久综合| 国产原创视频在线观看| 久久久久久久久久久久久久久久av| 另类综合日韩欧美亚洲| 精品在线视频观看| 这里只有精品久久| 国产精品xxx在线观看| 污污动漫在线观看| 亚洲国产美国国产综合一区二区 | 欧美二区乱c黑人| 欧美日韩爱爱| 91人妻一区二区三区| 色综合天天综合狠狠| 超碰免费在线播放| 欧美久久在线| 成人精品小蝌蚪| 夜夜爽8888| 日本中文字幕成人|