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

JS游戲開發(四)用地圖塊拼成大地圖

開發 前端 游戲開發
小時候我們玩過拼圖游戲,是用自己的手去拼的。今天我們來研究研究用javascript來拼圖。同樣是拼圖,但用js拼圖要比用手拼圖麻煩多了,因此以后我要把它優化成引擎。

小時候我們玩過拼圖游戲,是用自己的手去拼的。今天我們來研究研究用javascript來拼圖。同樣是拼圖,但用js拼圖要比用手拼圖麻煩多了,因此以后我要把它優化成引擎。

一、前言

以上是一段導語,話不扯遠,對《三國志曹操傳》熟悉的玩家知道,《三國志曹操傳》的地圖是由小地圖塊拼成的,那要實現它就和導語說得一樣:很麻煩。不過即使麻煩也是一門技術,因此在此分享給大家,希望大家喜歡。

二、代碼講解

今天我要換換講解方式,先不給代碼,我們先來想想原理。現在,假如你有一幅圖片,把它裁開成若干份,并打亂。現在如果讓你用js把他們組織起來,如何做呢?先不說圖的順序,首先來看把它們弄在一起就很難了。這時我減少難度,給你幾個選擇:

A.用margin慢慢調        B.用數組把它們排列好        C.放棄

在這道題中,選A是很不明智的,選C就代表你也拿不定主意。看來選B是***的。既然都告訴大家用數組,那就先上代碼吧。免得消磨大家興致。

js代碼:

  1. /*  
  2.   *Prompt:  
  3.   *If you want to add hurdle, find string: "{{Add hurdle above." and "{{After add hurdle, add the hurdle to the vector above." please.  
  4.   *If you want to add or change type of grid, find string: "{{Add new grid above.".  
  5.   *If you want to change position of map, please find string: "{{Change map margin above.".  
  6.   *If the icon of crid is changed, you have to change the size of icon. Find "{{Change icon size above." to change size.  
  7.  */ 
  8.    
  9.  //Map of hurdle or military or resource.  
  10.  var vView = [];  
  11.    
  12.  /*Remarks:  
  13.   *L: land *S: sea *R: river *W: swamp *A: lawn *B: bridge *H: house *h: hospital *w: warehouse *b: bourse *M: military academy *m: military factories  
  14.   *r: research Center *P: port *D: dock *s: Shipyard  
  15.  */ 
  16.  var mScene = {  
  17.                  'L': ['./land.png''陸地']  
  18.                  , 'S': ['./sea.png''河流']  
  19.                  , 'T': ['./tree.png''樹木']  
  20.                  , 'B': ['./bridge.png''橋']  
  21.                  , 'C': ['./beach.png''沙灘']  
  22.              };  
  23.  //{{Add new grid above.  
  24.    
  25.  var mCurrent = {  
  26.                      Margin: {  
  27.                          left: -1  
  28.                          , top: -1  
  29.                          , right: -1  
  30.                          , bottom: -1  
  31.                      }  
  32.                      , Position: {  
  33.                          X: -1  
  34.                          , Y: -1  
  35.                      }  
  36.                      , Type: 'NONE' 
  37.    
  38.                  };  
  39.  var mTitle = {};     
  40.  var sHurdleONE =   
  41.          'S,S,S,S,S,S,S,S,S,S,S' 
  42.          + ';T,L,T,T,T,T,S,S,S,S,T' 
  43.          + ';T,L,L,T,S,S,S,S,S,L,T' 
  44.          + ';T,L,L,L,C,C,C,S,S,T,S' 
  45.          + ';T,L,L,L,C,C,C,B,B,L,T' 
  46.          + ';T,L,L,C,C,C,C,S,S,L,T' 
  47.          + ';T,L,L,C,C,T,S,S,L,L,T' 
  48.          ;  
  49.  //{{Add hurdle above.  
  50.  var vHurdles = [sHurdleONE];  
  51.  //{{After add hurdle, add the hurdle to the vector above.   
  52.  function _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin)  
  53.  {  
  54.      var mCoordMember = {  
  55.                              left: nWidthBasic  
  56.                              , top: nHeightBasic  
  57.                              , right: nWidthBasic + nPicWidth  
  58.                              , bottom: nHeightBasic + nPicHeight  
  59.                          };  
  60.      var mPositionMember = {  
  61.                              X: (mCoordMember.left - mMargin.x) / nPicWidth  
  62.                              , Y: (mCoordMember.top - mMargin.y) / nPicHeight  
  63.                          };  
  64.      var mItem = {  
  65.                      Coord: mCoordMember  
  66.                      , Position: mPositionMember  
  67.                      , Type: cType  
  68.                  };  
  69.    
  70.      return mItem;  
  71.  }   
  72.  function _loadHurdle(sHurdle)  
  73.  {  
  74.      var nBasic = 0;  
  75.      var nWidthBasic = nBasic;            //margin-left.  
  76.      var nHeightBasic = 0;                //margin-top.  
  77.        
  78.      //{{Change map margin above.  
  79.    
  80.      var nPicWidth = 45;        //Picture width is nBasic.  
  81.      var nPicHeight = 45;        //Picturn height is nHeightBasic.  
  82.      //{{Change icon size above.     
  83.      var nSub;  
  84.      var nRow;  
  85.      var nCol;  
  86.      var v = sHurdle.split(';');  
  87.      var vRec = [];  
  88.      for(nSub = 0; nSub < v.length; nSub++){  
  89.          var vCrid = v[nSub].split(',');  
  90.          vRec[vRec.length] = vCrid;  
  91.      }  
  92.      for(nRow = 0; nRow < vRec.length; nRow++){  
  93.          var vCol = vRec[nRow];  
  94.    
  95.          for(nCol = 0; nCol < vCol.length; nCol++){  
  96.              var cType = vCol[nCol];  
  97.              var mMargin = {x: nBasic, y: nBasic};  
  98.    
  99.              vView[vView.length] = _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin);  
  100.    
  101.              nWidthBasic += nPicWidth;  
  102.          }  
  103.          nHeightBasic += nPicHeight;  
  104.          nWidthBasic = nBasic;  
  105.      }  
  106.  }  
  107.  //Show map with vector 'vView'.  
  108.  function _showMap(sID)  
  109.  {  
  110.      var xDiv=document.getElementById(sID);  
  111.      var xGrid;  
  112.      var xImg;  
  113.      var nTop = 0;  
  114.      var nSub;  
  115.      var sIdPrefix = 'ID_IMG_NUM_';  
  116.      var sIdGrid = 'ID_A_NUM_';  
  117.      for(nSub = 0; nSub < vView.length; nSub++){  
  118.          var mGrid = vView[nSub];  
  119.          if(mGrid){  
  120.              var xMargin = mGrid.Coord;  
  121.              var cType = mGrid.Type;  
  122.              var xProper = mScene[cType];  
  123.              if(xProper){  
  124.                  xGrid = document.createElement('a');  
  125.                  xImg = document.createElement('img');  
  126.                  xImg.style.position = 'absolute';  
  127.                  xImg.style.marginLeft = xMargin.left;  
  128.                  xImg.style.marginTop = xMargin.top;  
  129.                  xImg.src = xProper[0];  
  130.                  xImg.style.border = '0px solid #000000';  
  131.                  xImg.id = sIdPrefix + nSub;  
  132.                  xImg.style.width = 45;  
  133.                  xImg.style.height = 45;  
  134.                  xImg.style.display = 'block';  
  135.                  xGrid.onclick = function(e){  
  136.                      var xCurrentGrid = e.target;  
  137.                      var sId = xCurrentGrid.id;  
  138.                      var nIdAsSub = parseInt(sId.substring(sIdPrefix.length, sId.length));  
  139.                      mCurrent = vView[nIdAsSub];  
  140.                      if(!mCurrent){  
  141.                          alert("Error 0004.");  
  142.                      }  
  143.                  };  
  144.                  xGrid.title = xProper[1] + '(' + parseInt(mGrid.Position.X) + ', ' + parseInt(mGrid.Position.Y+2) + ')';  
  145.                  xGrid.id = sIdGrid + nSub;  
  146.                  xGrid.appendChild(xImg);  
  147.                  xDiv.appendChild(xGrid);  
  148.              }else{  
  149.                  alert("Error: 0003.");  
  150.              }  
  151.          }else{  
  152.              alert("Error: 0002.");  
  153.          }  
  154.      }  
  155.  }  
  156.  //Show map of hurdle.  
  157.  function _showHurdle(nHurdle)  
  158.  {  
  159.      if(vHurdles[nHurdle - 1]){  
  160.          _loadHurdle(vHurdles[nHurdle - 1]);  
  161.          _showMap('ID_DIV_BATTLEFIELD');  
  162.      }else{  
  163.          alert("Error: 0001.");  
  164.      }  
  165.  } 

看看,這點程序就用了195行,而且這還是一張地圖,看來還很有點麻煩哦。沒關系,慢慢解釋。

首先還是把素材放在這里.

素材不是來自《三國志曹操傳》,因為沒整理好《三國志曹操傳》的地圖素材,所以就隨便找了些。不過也照樣可以用。希望大家不要介意。

麻煩的代碼最容易弄得亂七八糟,因此在此時要良好的區分開樣式設置和拼圖核心。

拼圖核心在哪里呢???在這里:

  1. var mScene = {  
  2.                  'L': ['./land.png''陸地']  
  3.                  , 'S': ['./sea.png''河流']  
  4.                  , 'T': ['./tree.png''樹木']  
  5.                  , 'B': ['./bridge.png''橋']  
  6.                  , 'C': ['./beach.png''沙灘']  
  7.              };  
  8.  //{{Add new grid above.  
  9.  var mCurrent = {  
  10.                      Margin: {  
  11.                          left: -1  
  12.                          , top: -1  
  13.                          , right: -1  
  14.                          , bottom: -1  
  15.                      }  
  16.                      , Position: {  
  17.                          X: -1  
  18.                          , Y: -1  
  19.                      }  
  20.                      , Type: 'NONE' 
  21.    
  22.                  };  
  23.  var mTitle = {};  
  24.  var sHurdleONE =   
  25.          'S,S,S,S,S,S,S,S,S,S,S' 
  26.          + ';T,L,T,T,T,T,S,S,S,S,T' 
  27.          + ';T,L,L,T,S,S,S,S,S,L,T' 
  28.          + ';T,L,L,L,C,C,C,S,S,T,S' 
  29.          + ';T,L,L,L,C,C,C,B,B,L,T' 
  30.          + ';T,L,L,C,C,C,C,S,S,L,T' 
  31.          + ';T,L,L,C,C,T,S,S,L,L,T' 
  32.          ;  
  33.  //{{Add hurdle above.  
  34.  var vHurdles = [sHurdleONE];  
  35.  //{{After add hurdle, add the hurdle to the vector above. 

首先我把S,T,B,C,L定義好,使S代表河流,T代表樹木,B代表橋,C代表沙灘,L代表陸地。var mCurrent后面有用,暫不解釋。然后是var mTitle,這個專門是用來顯示title的,所以也不解釋了。關鍵是在下:

  1. var sHurdleONE =   
  2.          'S,S,S,S,S,S,S,S,S,S,S' 
  3.          + ';T,L,T,T,T,T,S,S,S,S,T' 
  4.          + ';T,L,L,T,S,S,S,S,S,L,T' 
  5.          + ';T,L,L,L,C,C,C,S,S,T,S' 
  6.          + ';T,L,L,L,C,C,C,B,B,L,T' 
  7.          + ';T,L,L,C,C,C,C,S,S,L,T' 
  8.          + ';T,L,L,C,C,T,S,S,L,L,T' 
  9.          ; 

這段代碼就是把定義好的S,T,B,C,L連在一起的核心。后面只用定義S,T,B,C,L的寬度高度定義就能把它們連成一塊。并且只要把它們在數組里的位置調一調就能改變樣式。

接下來為了能切換地圖,我們把***張地圖放進了數組:

  1. var vHurdles = [sHurdleONE];  
  2. //{{After add hurdle, add the hurdle to the vector above. 

如果以后加了地圖,只用把地圖所屬的數組名加到vHurdles數組就可以了,調用是就可以直接寫對應下標。

樣式設置在下:

  1. function _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin)  
  2.  {  
  3.      var mCoordMember = {  
  4.                              left: nWidthBasic  
  5.                              , top: nHeightBasic  
  6.                              , right: nWidthBasic + nPicWidth  
  7.                              , bottom: nHeightBasic + nPicHeight  
  8.                          };  
  9.      var mPositionMember = {  
  10.                              X: (mCoordMember.left - mMargin.x) / nPicWidth  
  11.                              , Y: (mCoordMember.top - mMargin.y) / nPicHeight  
  12.                          };  
  13.      var mItem = {  
  14.                      Coord: mCoordMember  
  15.                      , Position: mPositionMember  
  16.                      , Type: cType  
  17.                  };  
  18.    
  19.      return mItem;  
  20.  }  
  21.    
  22.  function _loadHurdle(sHurdle)  
  23.  {  
  24.      var nBasic = 0;  
  25.      var nWidthBasic = nBasic;            //margin-left.  
  26.      var nHeightBasic = 0;                //margin-top.  
  27.        
  28.      //{{Change map margin above.  
  29.    
  30.      var nPicWidth = 45;        //Picture width is nBasic.  
  31.      var nPicHeight = 45;        //Picturn height is nHeightBasic.  
  32.      //{{Change icon size above.     
  33.      var nSub;  
  34.      var nRow;  
  35.      var nCol;  
  36.      var v = sHurdle.split(';');  
  37.      var vRec = [];  
  38.      for(nSub = 0; nSub < v.length; nSub++){  
  39.          var vCrid = v[nSub].split(',');  
  40.          vRec[vRec.length] = vCrid;  
  41.      }  
  42.      for(nRow = 0; nRow < vRec.length; nRow++){  
  43.          var vCol = vRec[nRow];  
  44.          for(nCol = 0; nCol < vCol.length; nCol++){  
  45.              var cType = vCol[nCol];  
  46.              var mMargin = {x: nBasic, y: nBasic};  
  47.              vView[vView.length] = _createGrid(nWidthBasic, nHeightBasic, nPicWidth, nPicHeight, cType, mMargin);  
  48.              nWidthBasic += nPicWidth;  
  49.          }  
  50.          nHeightBasic += nPicHeight;  
  51.          nWidthBasic = nBasic;  
  52.      }  
  53.  }  
  54.    
  55.  //Show map with vector 'vView'.  
  56.  function _showMap(sID)  
  57.  {  
  58.      var xDiv=document.getElementById(sID);  
  59.      var xGrid;  
  60.      var xImg;  
  61.      var nTop = 0;  
  62.      var nSub;  
  63.      var sIdPrefix = 'ID_IMG_NUM_';  
  64.      var sIdGrid = 'ID_A_NUM_';  
  65.      for(nSub = 0; nSub < vView.length; nSub++){  
  66.          var mGrid = vView[nSub];  
  67.    
  68.          if(mGrid){  
  69.              var xMargin = mGrid.Coord;  
  70.              var cType = mGrid.Type;  
  71.              var xProper = mScene[cType];  
  72.                
  73.              if(xProper){  
  74.                  xGrid = document.createElement('a');  
  75.                  xImg = document.createElement('img');  
  76.                  xImg.style.position = 'absolute';  
  77.                  xImg.style.marginLeft = xMargin.left;  
  78.                  xImg.style.marginTop = xMargin.top;  
  79.                  xImg.src = xProper[0];  
  80.                  xImg.style.border = '0px solid #000000';  
  81.                  xImg.id = sIdPrefix + nSub;  
  82.                  xImg.style.width = 45;  
  83.                  xImg.style.height = 45;  
  84.                  xImg.style.display = 'block';  
  85.                  xGrid.onclick = function(e){  
  86.                      var xCurrentGrid = e.target;  
  87.                      var sId = xCurrentGrid.id;  
  88.                      var nIdAsSub = parseInt(sId.substring(sIdPrefix.length, sId.length));  
  89.                      mCurrent = vView[nIdAsSub];  
  90.                      if(!mCurrent){  
  91.                          alert("Error 0004.");  
  92.                      }  
  93.                  };  
  94.                  xGrid.title = xProper[1] + '(' + parseInt(mGrid.Position.X) + ', ' + parseInt(mGrid.Position.Y+2) + ')';  
  95.                  xGrid.id = sIdGrid + nSub;  
  96.                  xGrid.appendChild(xImg);  
  97.                  xDiv.appendChild(xGrid);  
  98.              }else{  
  99.                  alert("Error: 0003.");  
  100.              }  
  101.          }else{  
  102.              alert("Error: 0002.");  
  103.          }  
  104.      }  
  105.  } 

以上的代碼很簡單,自己可以看看,提示一下:當你在自己開發的過程中如果彈出一個Error: 0002, Error: 0003, Error: 0001什么之類的,就代表出了錯,需要馬上去檢查。這是為了在麻煩的程序開發中有一點提醒而設計的。值得注意的是:這里的圖片全是createElement弄出來的,所以請不要猜疑html代碼里有什么蹊蹺。

接著看:

  1. function _showHurdle(nHurdle)  
  2.  {  
  3.      if(vHurdles[nHurdle - 1]){  
  4.          _loadHurdle(vHurdles[nHurdle - 1]);  
  5.          _showMap('ID_DIV_BATTLEFIELD');  
  6.      }else{  
  7.          alert("Error: 0001.");  
  8.      }  
  9.  } 

這是在你要弄出地圖的調用函數,當你在html代碼里寫上:<body onload="_showHurdle(nHurdle)">幾可以把拼的圖一下子畫出來。nHurdle就是地圖在數組vHurdles里的對應下標,***是1,而不是0,也就是說要用***張地圖,那nHurdle就該賦值為1,調用是寫為:<body onload="_showHurdle(1)">。

源代碼下載:http://files.cnblogs.com/ducle/map.rar 

三、演示效果

演示圖在下:

由于是靜態的,所以就不給demo了。這種方法雖然很麻煩,而且地圖塊多了就很慢,但是畢竟是種技術,如果大家有什么好的方法也可以來告訴我。

原文鏈接:http://www.cnblogs.com/ducle/archive/2012/09/23/2699066.html

責任編輯:張偉 來源: Ducle的博客
相關推薦

2011-08-09 13:10:32

iPhone地圖開發

2012-10-08 09:37:14

JSHTML5游戲開發

2022-04-11 17:28:41

戴爾

2021-07-06 12:06:40

React

2012-05-15 13:10:57

HTML5

2013-05-16 14:31:49

GoogleGoogle Maps

2021-06-15 14:33:00

高德百度騰訊

2013-12-03 10:58:50

Cocos2D-X磚塊地圖

2012-07-13 14:36:07

Java

2021-03-18 08:11:18

PythonDash工具

2012-06-25 09:55:53

諾基亞地圖Windows Pho

2012-11-27 10:07:24

eWeek諾基亞Here地圖

2012-09-18 13:13:17

2011-09-29 11:00:54

百度地圖API

2011-10-21 10:16:25

百度地圖API

2017-07-21 11:28:57

前端Threejs3D地圖

2012-12-18 09:51:53

谷歌地圖蘋果地圖

2013-05-31 10:33:51

2011-09-16 10:37:42

地圖API

2011-10-09 11:07:40

百度地圖API
點贊
收藏

51CTO技術棧公眾號

国内精品久久久久伊人av| 欧美一级一级性生活免费录像| 久久riav二区三区| 无码人妻丰满熟妇精品区| 欧洲乱码伦视频免费| 欧美日韩国产影片| 少妇一晚三次一区二区三区| 国产黄色大片网站| 亚洲少妇自拍| 这里只有视频精品| 伊人久久久久久久久| 热三久草你在线| 中文字幕一区二| 古典武侠综合av第一页| 高潮毛片又色又爽免费| 婷婷精品进入| 日韩av中文字幕在线播放| 一区二区xxx| 免费影视亚洲| 国产欧美日韩一区二区三区在线观看| 成人亚洲激情网| 日韩污视频在线观看| 色综合咪咪久久网| 日韩h在线观看| 在线看免费毛片| 午夜影视一区二区三区| 中文字幕一区在线观看视频| 激情久久av| 一区二区精品视频在线观看| 夜夜爽av福利精品导航| 久久视频在线播放| 人人妻人人澡人人爽人人精品 | 国产精品国产三级国产a| 国产精品国产一区二区 | 亚洲欧美成人| 欧美精品做受xxx性少妇| 天天躁夜夜躁狠狠是什么心态| 国产午夜精品一区在线观看 | www.久久网| 亚洲每日更新| 欧美肥婆姓交大片| 国产免费一区二区三区四区| 欧美裸体在线版观看完整版| 日韩电影在线观看中文字幕| 欧美午夜精品一区二区| 台湾天天综合人成在线| 91极品视觉盛宴| 日韩在线一级片| 1区2区3区在线| 一区二区三区四区不卡视频| 中文字幕中文字幕在线中一区高清 | 亚洲 激情 在线| 日韩精品一区二区三区| 精品成人国产在线观看男人呻吟| 一级特黄妇女高潮| 成人免费看片| 亚洲情趣在线观看| 在线观看一区二区三区三州| 91福利在线视频| 欧美激情在线一区二区三区| 欧美一级爽aaaaa大片| 深夜福利在线视频| 91麻豆国产福利在线观看| 精品网站在线看| 无码国产色欲xxxx视频| 波多野结衣视频一区| 国产精品一国产精品最新章节| 99精品在线视频观看| 国产精品一区二区在线观看不卡| 亚洲一区二区三区在线视频| 精品免费久久久| 成人午夜在线视频| 好吊妞www.84com只有这里才有精品| 亚洲h视频在线观看| 成人丝袜视频网| 国产精品theporn88| 五月婷婷深深爱| 久久综合九色综合97婷婷 | 亚洲精品网站在线| 成人精品免费网站| 区一区二区三区中文字幕| 懂色一区二区三区| 日韩一区在线看| 日韩人妻一区二区三区蜜桃视频| 色av手机在线| 欧美性生交大片免网| 成人在线看视频| 欧美jizz18| 日韩一区二区在线观看视频播放| 自拍偷拍激情视频| 少妇久久久久| 自拍偷拍亚洲区| 麻豆影视在线播放| 裸体一区二区| 成人黄色大片在线免费观看| 亚洲精品97久久中文字幕| 26uuu久久综合| 亚洲午夜精品久久| 丁香花在线影院| 色88888久久久久久影院按摩| 天天综合网日韩| 亚洲精品aⅴ| 一区二区三区日韩在线| 免费一级片视频| 亚洲色诱最新| 成人妇女淫片aaaa视频| 神马午夜电影一区二区三区在线观看| 久久免费国产精品| 日本大胆人体视频| 亚洲不卡系列| 精品国产一区二区三区av性色 | 中文字幕一区二区三区精华液| 亚洲熟妇无码一区二区三区导航| 久久久人成影片一区二区三区在哪下载| 欧美精品在线视频| 99久久人妻无码中文字幕系列| 日韩在线中文| 2019亚洲日韩新视频| 国产农村老头老太视频| 久久久国产午夜精品| 九九热只有这里有精品| 欧美日韩破处视频| 日韩成人在线播放| 免费在线观看国产精品| 免费在线看成人av| 美乳视频一区二区| 黄色污污视频在线观看| free性欧美| 日韩美女精品在线| 国产淫片av片久久久久久| 日韩视频一二区| 日韩中文在线观看| 无码人妻一区二区三区免费| 成人aa视频在线观看| 大桥未久一区二区三区| 美女色狠狠久久| 亚洲女人天堂视频| 久久夜色精品亚洲| 成人国产视频在线观看| 草草草视频在线观看| 亚州精品国产| 揄拍成人国产精品视频| 久久久蜜桃一区二区| 99久久99久久精品免费观看 | 91精彩在线视频| 精品久久久久久国产91| 又色又爽又黄18网站| 中文在线日韩| 亚洲一区二区中文字幕| 久久综合之合合综合久久| 欧美综合欧美视频| 免费黄色片网站| 日韩高清一区二区| 日韩一区国产在线观看| 日韩免费小视频| 亚洲人成伊人成综合网久久久| av黄色在线看| 久久只精品国产| 白嫩少妇丰满一区二区| 精品国产乱码久久久久久果冻传媒 | 欧洲精品在线观看| 免费一级特黄3大片视频| 日韩成人精品在线| 亚洲图色在线| 精品一区二区三区中文字幕视频 | mm131美女视频| 久久这里只有| 日韩精品欧美专区| 色噜噜成人av在线| 精品中文字幕在线观看| 成人毛片在线免费观看| 亚洲成在线观看| 97人妻天天摸天天爽天天| 久久婷婷激情| 亚洲图片小说在线| 视频在线一区| 国产91精品久久久| av资源种子在线观看| 91精品国产综合久久精品| 欧美成人精品欧美一级私黄| bt7086福利一区国产| 久久久久免费精品| 久久久久久久久久久9不雅视频| 97久草视频| 三级在线观看视频| 日韩中文在线不卡| 日韩一级片免费在线观看| 色婷婷av一区二区三区软件| 精品伦精品一区二区三区视频密桃| 国产在线播精品第三| 黄色一级在线视频| 999精品色在线播放| 国产激情美女久久久久久吹潮| 中国字幕a在线看韩国电影| 中文字幕av一区中文字幕天堂| 国产情侣自拍小视频| 午夜天堂影视香蕉久久| 亚洲色图第四色| 不卡的av中国片| 国产探花在线看| 亚洲激情另类| 亚洲日本精品| 欧洲亚洲视频| 91免费视频网站| 亚洲美女炮图| 久久在线视频在线| 国内在线精品| 亚洲国产精品国自产拍av秋霞| 国语对白做受69按摩| 亚洲国产综合视频在线观看| 亚洲欧美va天堂人熟伦| 成人天堂资源www在线| 三级av免费观看| 一区二区日韩免费看| 亚洲一区 在线播放| 狠狠综合久久av一区二区蜜桃| 91精品国产99久久久久久红楼 | 国产欧美精品久久久| 国产剧情av在线播放| 久久综合色影院| 国产精品免费播放| 日韩不卡在线观看| 亚洲成人一级片| 欧美精品免费视频| 成人午夜精品视频| 欧美日韩一二三四五区| 欧美成人一区二区三区高清| 国产精品美女久久久久av爽李琼| 亚洲久久久久久| 国产91对白在线观看九色| 手机在线国产视频| 日韩精品电影在线观看| 漂亮人妻被中出中文字幕| 亚洲国产婷婷| 青青在线视频免费观看| 久久久久国产精品| 国产卡一卡二在线| 性欧美欧美巨大69| 在线综合视频网站| 色135综合网| 色女人综合av| 精品一区二区三区在线 | 中文字幕日韩一区| 貂蝉被到爽流白浆在线观看 | 日韩精品一区二区三区老鸭窝| 国产一区二区女内射| 欧美日韩亚洲综合一区 | 黄色成人在线网| 欧美激情手机在线视频| 三级网站视频在在线播放| 欧美二区乱c黑人| 国产99re66在线视频| 欧美激情综合色综合啪啪五月| av免费看在线| 欧美国产第二页| 青春草视频在线观看| 欧美日韩不卡合集视频| 大黄网站在线观看| 欧美亚洲第一区| 自拍偷拍欧美视频| 国产成人综合av| 福利一区二区三区视频在线观看| 国产精品99久久久久久人| 成人va天堂| 国产精品久久久久久久天堂| yy6080久久伦理一区二区| 国产免费亚洲高清| 欧美大片91| 国产伦精品一区二区三区高清| 国产精品自在| 欧美国产综合视频| 日韩大片在线播放| 四虎4hu永久免费入口| 一区在线视频| 欧美激情国产精品日韩| 日韩高清不卡一区| 中文字幕一区久久| 丁香五精品蜜臀久久久久99网站| 久久久老熟女一区二区三区91| 97成人超碰视| 91麻豆精品国产91久久综合| 亚洲欧洲日韩在线| 国产精品1000| 色乱码一区二区三区88| 国产又黄又大又爽| 亚洲国产精品中文| 成年人视频在线免费观看| 欧美不卡视频一区发布| 久久久男人天堂| 国产精品天天狠天天看| 日本免费一区二区三区视频| 久热国产精品视频一区二区三区| 日本久久一二三四| 真人抽搐一进一出视频| 男女精品网站| 精品国产午夜福利在线观看| www精品美女久久久tv| 亚洲天堂精品一区| 亚洲国产精品一区二区久久 | 久久中文欧美| 欧美专区第二页| 久久影院午夜论| 欧美亚洲日本在线| 91成人免费电影| 二区三区在线视频| 深夜成人在线观看| 日本午夜大片a在线观看| 成人在线视频福利| 一区二区导航| 成人午夜免费在线视频| 青青草国产成人av片免费| 手机免费看av片| 国产精品不卡一区二区三区| av大片免费在线观看| 4438x成人网最大色成网站| 欧美孕妇性xxxⅹ精品hd| 色综合老司机第九色激情| 成人开心激情| 国产一区在线观| 欧美午夜国产| 国产aⅴ爽av久久久久| 国产欧美一区二区三区在线看蜜臀| 国产精品不卡av| 日韩欧美高清一区| 成人无遮挡免费网站视频在线观看| 青青草一区二区| 久久精品色综合| 成年人深夜视频| 国产伦精品一区二区三区免费迷| 成人黄色短视频| 欧美中文字幕一二三区视频| 欧美日韩国产综合视频 | 精品无码免费视频| 777久久久精品| 亚洲xxxxxx| 国产精品亚洲片夜色在线| 久久超碰99| www国产精品内射老熟女| 成人a区在线观看| 色在线观看视频| 欧美一级理论片| 国产成人在线视频免费观看| 国产欧美日韩最新| 色综合天天爱| 邪恶网站在线观看| 国产精品入口麻豆原神| 伊人免费在线观看高清版| 中文字幕亚洲激情| 97精品国产99久久久久久免费| 免费久久99精品国产自| 久久综合影音| 国产伦精品一区二区三区视频女| 日本高清无吗v一区| 成全电影播放在线观看国语| 国产精品入口免费视| 98精品久久久久久久| 天天干天天曰天天操| 一区二区激情小说| 婷婷色在线视频| 青草青草久热精品视频在线观看| 国产99久久| 免费涩涩18网站入口| 国产精品久久午夜| 国产老女人乱淫免费| 精品少妇一区二区30p| 精品资源在线| 国产第一页视频| 国产精品女上位| 国产a级免费视频| 久久久久成人网| 小说区图片区色综合区| 北条麻妃在线视频| 亚洲欧洲精品一区二区三区| www.狠狠干| 91av中文字幕| 成人羞羞视频播放网站| 亚洲在线观看网站| 亚欧色一区w666天堂| 精品av中文字幕在线毛片 | 久久精品夜夜夜夜夜久久| 美国十次综合久久| 免费成人在线视频网站| 中文字幕精品—区二区四季| 国产黄色一区二区| 欧美壮男野外gaytube| 久久一本综合| 先锋资源av在线| 欧美亚洲国产一卡| 性xxxxfjsxxxxx欧美| 麻豆精品传媒视频| 国产一区二区在线观看视频| 偷偷操不一样的久久| 日韩一区av在线| 蜜臀av一区| 97超碰成人在线| 午夜天堂影视香蕉久久| 久久综合网导航| 乱一区二区三区在线播放| 国内精品久久久久影院色| 亚洲一区欧美在线|