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

HTML 5開發RPG游戲之四(游戲腳本化)

開發 前端
先來考慮以什么形式來制作游戲的腳本,我們有多種選擇,可以選擇xml,可以選擇json,也可以選擇純自定義語法,這次,我為了省事,選用比較方便處理的json,因為javascript可以很輕松的處理json數據。

首先,本篇文章是零基礎開發RPG游戲-開源講座系列文章的第四篇,來實現游戲的腳本化,和利用游戲腳本實現地圖場景的切換,離上次更新貌似很長時間了,你在看下面的文字之前,需要先了解前三篇在下啰嗦了些什么東東。

一,什么是游戲腳本

簡單說,游戲腳本就是依據一定的格式編寫的可執行文件,游戲可以通過腳本中自定義的語句來執行相應的邏輯。

二,為什么要將游戲腳本化

游戲腳本,可以令我們的游戲動態化,比如當我們開發了一款rpg游戲,里面的劇情,事件以及地圖等,我們如果將這些全部寫進程序里,當然是可以的,但是一旦出現問題,哪怕幾個錯別字,我們需要先將這幾個錯別字改正,并且將整個程序重新編譯發布一遍,這個過程是相當令人反感的,因為如果游戲的程序跟著游戲的內容不斷進行修改的話,那只會使你的程序越來越復雜。但是如果我們將這些可重復的數據,都定義到游戲程序之外的文件里面,當游戲引擎開發完畢,我們的游戲通過讀取這些外部文件,來執行相應的劇情和事件,那么,像上述當我們的游戲出現了問題,我們只需要改動這些外部文件就可以了,并不需要重新編譯整個程序,這樣便使得我們的游戲開發,變得便利簡潔。

當然,對于html5來說,不需要重新編譯程序,但是對于rpg的游戲來說,腳本還是必不可少的,因為游戲的劇本不可能全都寫到程序里...

三,如何來實現游戲的腳本化

好了,接下來,先來考慮以什么形式來制作游戲的腳本,我們有多種選擇,可以選擇xml,可以選擇json,也可以選擇純自定義語法,

這次,我為了省事,選用比較方便處理的json,因為javascript可以很輕松的處理json數據。

目前游戲中實現的內容有,地圖場景添加,游戲人物添加,以及人物對話的實現。那么,我在設計游戲腳本的時候,必須包含這些數據,然后才能將這三項功能用腳本來控制。

首先看下面的json

  1. var script = {  
  2.     stage01:{  
  3.         map:[  
  4.             [18,18,18,18,18,18,18,18,18,18,18,18,55,55,18,18,18],  
  5.             [18,18,18,17,17,17,17,17,17,17,17,17,55,55,17,17,18],  
  6.             [18,18,17,17,17,17,18,18,17,17,17,17,55,55,17,17,18],  
  7.             [18,17,17,17,18,18,18,18,18,17,17,55,55,17,17,17,18],  
  8.             [18,17,17,18,22,23,23,23,24,18,17,55,55,17,17,17,18],  
  9.             [18,17,17,18,25,28,26,79,27,18,55,55,17,17,17,17,18],  
  10.             [18,17,17,17,17,10,11,12,18,18,55,55,17,17,17,17,18],  
  11.             [18,18,17,17,10,16,16,16,11,55,55,17,17,17,17,17,18],  
  12.             [18,18,17,17,77,16,16,16,16,21,21,17,17,17,17,17,18],  
  13.             [18,18,17,17,77,16,16,16,16,55,55,17,17,17,17,17,18],  
  14.             [18,18,18,18,18,18,18,18,18,55,55,18,18,18,18,18,18]],  
  15.         mapdata:[  
  16.             [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],  
  17.             [1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1],  
  18.             [1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1],  
  19.             [1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1],  
  20.             [1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1],  
  21.             [1,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1],  
  22.             [1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1],  
  23.             [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1],  
  24.             [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],  
  25.             [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1],  
  26.             [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],  
  27.         add:[  
  28.              {chara:"player",img:"mingren",x:5,y:6},  
  29.              {chara:"npc",img:"npc1",x:7,y:6},  
  30.              {chara:"npc",img:"npc1",x:3,y:3}],  
  31.         talk:{  
  32.             talk1:[  
  33.                       {img:"m",name:"鳴人",msg:"我是木葉村的鳴人,你是誰?"},  
  34.                       {img:"n",name:"黑衣忍者甲",msg:"你就是鳴人?九尾還在你身體里嗎?"}  
  35.                   ],  
  36.             talk2:[  
  37.                       {img:"n",name:"黑衣忍者乙",msg:"鳴人,聽說忍者大戰就要開始了。"},  
  38.                       {img:"m",name:"鳴人",msg:"真的嗎?一定要想想辦法啊。"}  
  39.                   ]  
  40.         }  
  41.     }  
  42.  
  43.  
  44. }; 

我將腳本定義成了變量,實際游戲制作的時候,腳本應該儲存到一個外部文檔當中,在這里我只是講解一下理論,如何完善那是后話了,哈。

可以看到,json中,包含了地圖相關的map數組和mapdata數組,添加人物的相關數據,以及對話的數組。這樣,我在游戲顯示的時候,只需要讀入json數據,然后根據這些內容來顯示游戲畫面就可以了,定義一個initScript函數來進行這些操作。

  1. function initScript(){  
  2.     //地圖位置初始化  
  3.     mapLayer.x = 0;  
  4.     mapLayer.y = 0;  
  5.  
  6.  
  7.     //地圖層初始化  
  8.     mapLayer.removeAllChild();  
  9.     //人物層初始化  
  10.     charaLayer.removeAllChild();  
  11.     //效果層初始化  
  12.     effectLayer.removeAllChild();  
  13.     //對話層初始化  
  14.     talkLayer.removeAllChild();  
  15.       
  16.     //地圖數據獲取  
  17.     map = stage.map;  
  18.     mapdata = stage.mapdata;  
  19.     //對話數據獲取  
  20.     talkScriptList = stage.talk;  
  21.       
  22.     //添加地圖  
  23.     addMap(0,0);  
  24.     delMap();  
  25.     //添加人物  
  26.     addChara();  

removeAllChild方法是legendForHtml5Programming引擎獨有的方法,可以用來移出LScript顯示層上的所有子對象,從而實現本游戲中各個顯示層的初始化工作。

修改一下addChara方法,如下

  1. //添加人物  
  2. function addChara(){  
  3.     var charaList = stage.add;  
  4.     var chara,charaObj;  
  5.     for(var i=0;i<charaList.length;i++){  
  6.         charaObj = charaList[i];  
  7.         if(charaObj.chara == "player"){  
  8.             //加入英雄  
  9.             bitmapdata = new LBitmapData(imglist[charaObj.img]);  
  10.             chara = new Character(true,i,bitmapdata,4,4);  
  11.             player = chara;  
  12.         }else{  
  13.             //加入npc  
  14.             bitmapdata = new LBitmapData(imglist[charaObj.img]);  
  15.             chara = new Character(false,i,bitmapdata,4,4);  
  16.         }  
  17.         chara.x = charaObj.x * 32;  
  18.         chara.y = charaObj.y * 32;  
  19.         charaLayer.addChild(chara);  
  20.     }  

即,根據json腳本中的add數組,來添加游戲中的人物。

好了,運行一下游戲,可以看到,游戲正常顯示了,和之前一模一樣,實現了同樣的功能.



 

 

#p#

四,利用游戲腳本實現地圖的切換

為了讓大家看到游戲腳本的便利性,現在利用腳本實現游戲中的場景切換。

將json腳本修改如下

  1. var script = {  
  2.     stage01:{  
  3.         map:[  
  4.             [18,18,18,18,18,18,18,18,18,18,18,18,55,55,18,18,18],  
  5.             [18,18,18,17,17,17,17,17,17,17,17,17,55,55,17,17,18],  
  6.             [18,18,17,17,17,17,18,18,17,17,17,17,55,55,17,17,18],  
  7.             [18,17,17,17,18,18,18,18,18,17,17,55,55,17,17,17,18],  
  8.             [18,17,17,18,22,23,23,23,24,18,17,55,55,17,17,17,18],  
  9.             [18,17,17,18,25,28,26,79,27,18,55,55,17,17,17,17,18],  
  10.             [18,17,17,17,17,10,11,12,18,18,55,55,17,17,17,17,18],  
  11.             [18,18,17,17,10,16,16,16,11,55,55,17,17,17,17,17,18],  
  12.             [18,18,17,17,77,16,16,16,16,21,21,17,17,17,17,17,18],  
  13.             [18,18,17,17,77,16,16,16,16,55,55,17,17,17,17,17,18],  
  14.             [18,18,18,18,18,18,18,18,18,55,55,18,18,18,18,18,18]],  
  15.         mapdata:[  
  16.             [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],  
  17.             [1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1],  
  18.             [1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1],  
  19.             [1,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,1],  
  20.             [1,0,0,1,1,1,1,1,1,1,0,1,1,0,0,0,1],  
  21.             [1,0,0,1,1,1,0,1,1,1,1,1,0,0,0,0,1],  
  22.             [1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1],  
  23.             [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1],  
  24.             [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],  
  25.             [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1],  
  26.             [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],  
  27.         add:[  
  28.              {chara:"player",img:"mingren",x:5,y:6},  
  29.              {chara:"npc",img:"npc1",x:7,y:6},  
  30.              {chara:"npc",img:"npc1",x:3,y:3}],  
  31.         talk:{  
  32.             talk1:[  
  33.                       {img:"m",name:"鳴人",msg:"我是木葉村的鳴人,你是誰?"},  
  34.                       {img:"n",name:"黑衣忍者甲",msg:"你就是鳴人?九尾還在你身體里嗎?"}  
  35.                   ],  
  36.             talk2:[  
  37.                       {img:"n",name:"黑衣忍者乙",msg:"鳴人,聽說忍者大戰就要開始了。"},  
  38.                       {img:"m",name:"鳴人",msg:"真的嗎?一定要想想辦法啊。"}  
  39.                   ]  
  40.         },  
  41.         jump:[  
  42.               {at:{x:6,y:5},to:"stage02"}  
  43.         ]  
  44.     },  
  45.     stage02:{  
  46.         map:[  
  47.             [0,0,1,2,2,2,2,2,2,2,2,1,0,0,0],  
  48.             [0,0,1,3,5,5,1,5,5,5,5,1,0,0,0],  
  49.             [0,0,1,80,4,4,1,80,4,4,4,1,0,0,0],  
  50.             [0,0,1,80,4,4,1,80,8,7,8,1,0,0,0],  
  51.             [0,0,1,80,4,4,5,81,4,4,4,1,0,0,0],  
  52.             [0,0,1,2,2,2,6,4,4,4,4,1,0,0,0],  
  53.             [0,0,1,3,5,5,81,4,4,4,4,1,0,0,0],  
  54.             [0,0,1,80,4,4,4,4,4,4,9,1,0,0,0],  
  55.             [0,0,1,2,2,2,2,6,2,2,2,1,0,0,0]],  
  56.         mapdata:[  
  57.             [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],  
  58.             [1,1,1,0,0,0,1,0,0,0,0,1,1,1,1],  
  59.             [1,1,1,0,0,0,1,0,0,0,0,1,1,1,1],  
  60.             [1,1,1,0,0,0,1,0,0,1,0,1,1,1,1],  
  61.             [1,1,1,0,0,0,0,0,0,0,0,1,1,1,1],  
  62.             [1,1,1,1,1,1,0,0,0,0,0,1,1,1,1],  
  63.             [1,1,1,0,0,0,0,0,0,0,0,1,1,1,1],  
  64.             [1,1,1,0,0,0,0,0,0,0,1,1,1,1,1],  
  65.             [1,1,1,1,1,1,1,0,1,1,1,1,1,1,1]],  
  66.         add:[  
  67.              {chara:"player",img:"mingren",x:7,y:8},  
  68.              {chara:"npc",img:"npc1",x:8,y:3},  
  69.              {chara:"npc",img:"npc1",x:10,y:3}],  
  70.         talk:{  
  71.               talk1:[  
  72.                         {img:"m",name:"鳴人",msg:"你們在干什么啊?"},  
  73.                         {img:"n",name:"黑衣忍者甲",msg:"我們在喝茶。"}  
  74.                   ],  
  75.               talk2:[  
  76.                         {img:"n",name:"黑衣忍者乙",msg:"我們在喝茶,你不要打擾我們。"},  
  77.                         {img:"m",name:"鳴人",msg:"....."}  
  78.                   ]  
  79.         },  
  80.         jump:[  
  81.               {at:{x:7,y:8},to:"stage01"}  
  82.         ]  
  83.     }  
  84.  
  85.  
  86. }; 

可以看到,我添加了stage02,即第二個場景,并且在腳本里引入了jump節點來控制游戲場景的切換,其中jump中的at表示游戲主人公移動到達的坐標,to表示到達這個坐標后跳轉到的畫面名稱。這里的jump之所以是數組,是因為一個場景也可以跳轉到其他多個場景。

上面的腳本實現了stage01和stage02兩個場景的互相跳轉。

為了讀取這個jump,以及實現跳轉,我們需要在游戲主人公移動一個步長之后,判斷一下是否應該跳轉了,修改Character類的onmove方法

  1. /**  
  2.  * 開始移動   
  3.  **/ 
  4. Character.prototype.onmove = function (){  
  5.     var self = this;  
  6.     //設定一個移動步長中的移動次數  
  7.     var ml_cnt = 4;  
  8.     //計算一次移動的長度  
  9.     var ml = STEP/ml_cnt;  
  10.     //根據移動方向,開始移動  
  11.     switch (self.direction){  
  12.         case UP:  
  13.             if(mapmove){  
  14.                 mapLayer.y += ml;  
  15.                 charaLayer.y += ml;  
  16.             }  
  17.             self.y -= ml;  
  18.             break;  
  19.         case LEFT:  
  20.             if(mapmove){  
  21.                 mapLayer.x += ml;  
  22.                 charaLayer.x += ml;  
  23.             }  
  24.             self.x -= ml;  
  25.             break;  
  26.         case RIGHT:  
  27.             if(mapmove){  
  28.                 mapLayer.x -= ml;  
  29.                 charaLayer.x -= ml;  
  30.             }  
  31.             self.x += ml;  
  32.             break;  
  33.         case DOWN:  
  34.             if(mapmove){  
  35.                 mapLayer.y -= ml;  
  36.                 charaLayer.y -= ml;  
  37.             }  
  38.             self.y += ml;  
  39.             break;  
  40.     }  
  41.     self.moveIndex++;  
  42.     //當移動次數等于設定的次數,開始判斷是否繼續移動  
  43.     if(self.moveIndex >= ml_cnt){  
  44.         //一個地圖步長移動完成后,判斷地圖是否跳轉  
  45.         if(self.isHero && self.moveIndex > 0)checkJump();  
  46.         self.moveIndex = 0;  
  47.         //一個地圖步長移動完成后,如果地圖處于滾動狀態,則移除多余地圖塊  
  48.         if(mapmove)delMap();  
  49.         //如果已經松開移動鍵,或者前方為障礙物,則停止移動,否則繼續移動  
  50.         if(!isKeyDown || !self.checkRoad()){  
  51.             self.move = false;  
  52.             return;  
  53.         }else if(self.direction != self.direction_next){  
  54.             self.direction = self.direction_next;  
  55.             self.anime.setAction(self.direction);  
  56.         }  
  57.         //地圖是否滾動  
  58.         self.checkMap(self.direction);  
  59.     }  
  60. }; 

我添加了一行

  1. if(self.isHero && self.moveIndex > 0)checkJump(); 

表示,移動完后如果該人物是游戲主人公則進行跳轉判斷

所以,我們需要添加一個checkJump方法

  1. //游戲場景跳轉測試  
  2. function checkJump(){  
  3.     var jump = stage.jump;  
  4.     var jumpstage;  
  5.     for(var i=0;i<jump.length;i++){  
  6.         jumpjumpstage = jump[0];  
  7.         if(player.x == jumpstage.at.x * 32 && player.y == jumpstage.at.y * 32){  
  8.             //獲取該場景腳本數據  
  9.             stage = script[jumpstage.to];  
  10.             //開始跳轉  
  11.             initScript(stage);  
  12.             return;  
  13.         }  
  14.     }  

好了,一切都很簡單吧,運行游戲看看效果吧,小鳴人走到地圖的小房門的部分是,場景發生跳轉

游戲測試URL:http://fsanguo.comoj.com/html5/rpg5/index.html

本次更新源代碼下載:http://fsanguo.comoj.com/html5/rpg5/rpg5.rar

原文鏈接:http://www.cnblogs.com/html5cn/articles/2337054.html

【編輯推薦】

  1. HTML 5開發RPG游戲之一(地圖人物實現)
  2. HTML 5開發RPG游戲之二(跑起來吧英雄)
  3. HTML 5開發RPG游戲之三(卷軸和對話)
  4. 開發HTML5跨平臺游戲相關經驗
  5. HTML 5開發的優秀網頁游戲
責任編輯:張偉 來源: HTML5中國的博客
相關推薦

2012-05-15 13:44:00

HTML5中國

2012-05-15 13:10:57

HTML5

2012-05-15 13:29:20

HTML5

2015-07-08 16:38:10

Cocos游戲引擎

2012-01-06 14:10:13

HTML 5

2012-05-15 10:35:35

HTML5

2012-05-09 09:41:58

HTML5

2012-03-06 10:56:32

HTML 5

2012-05-10 09:45:14

HTML5

2013-06-21 13:33:46

HTML 5游戲

2014-11-12 16:00:12

火舞游戲

2012-01-06 09:45:23

HTML5游戲開發貨幣化

2011-12-21 09:38:31

HTML 5

2012-06-06 14:46:52

HTML5

2013-06-26 10:14:40

2011-07-18 11:39:58

iPhone 游戲 引擎

2013-10-21 15:24:49

html5游戲

2015-07-10 10:27:21

Cocos游戲開發引擎

2014-12-30 17:13:51

HTML5

2015-10-23 13:44:14

巴巴獵
點贊
收藏

51CTO技術棧公眾號

亚洲乱亚洲高清| 嗯用力啊快一点好舒服小柔久久| 国产精品色噜噜| 国产女同一区二区| 超碰手机在线观看| 激情小说亚洲色图| 欧美写真视频网站| 久久这里只有精品8| 欧美精品a∨在线观看不卡| 美腿丝袜亚洲三区| 久久久亚洲影院| 欧美一区二区三区粗大| 动漫av一区| 欧美精品第1页| 日韩a在线播放| 2020国产在线视频| 国产丝袜美腿一区二区三区| 999在线观看免费大全电视剧| 免费黄色网址在线| 伊人久久大香线蕉av超碰演员| 亚洲欧美综合精品久久成人| 能看毛片的网站| 91九色综合| 午夜不卡在线视频| 青青视频免费在线观看| 懂色av中文在线| av亚洲精华国产精华精| 成人黄色在线观看| 波多野结衣视频观看| 亚洲区欧美区| 久久99视频精品| 永久免费观看片现看| 蜜乳av综合| 日韩电影第一页| 欧美日韩一区二区三区四区五区六区| 成人国产精品| 在线观看中文字幕不卡| 日批视频在线免费看| 91在线超碰| 亚洲一区av在线| 日本男女交配视频| gogogogo高清视频在线| 国产精品久久久久永久免费观看 | 国产亚洲精品一区二区| www男人天堂| 澳门久久精品| 精品国产一区二区三区av性色| 思思久久精品视频| 四虎成人精品一区二区免费网站| 欧洲在线/亚洲| 国产wwwxx| 国产精品诱惑| 欧美日韩久久久一区| 欧美精品aaaa| 国产精品亲子伦av一区二区三区| 欧洲国内综合视频| 国产又粗又长又大的视频| 精品123区| 欧美亚洲尤物久久| 亚洲a级黄色片| 9999精品视频| 精品久久国产97色综合| 韩国三级视频在线观看| 激情小说亚洲图片| 亚洲欧美在线免费| 91视频免费在观看| 91视频综合| 欧美成人免费全部| 国产一级aa大片毛片| 在线日韩视频| 青青久久av北条麻妃黑人 | 欧美日韩在线播| aaa一级黄色片| aiai久久| 亚洲日本中文字幕免费在线不卡| 婷婷色一区二区三区| 成人精品电影| 欧美成人一二三| 日韩av女优在线观看| 久久国产日韩| 国产欧美一区二区| 亚洲欧美另类视频| 久久亚洲一区二区三区四区| 亚洲午夜精品久久久中文影院av| www.在线视频| 日韩欧美国产成人| 日本中文字幕二区| 国内自拍欧美| 色悠悠久久久久| 国产亚洲精品码| 日本欧美一区二区三区| 亚洲最大福利视频网| 四虎影院在线播放| 国产精品久久久久毛片软件| 国产视频在线观看网站| 色成人免费网站| 欧美成人女星排名| 天天躁夜夜躁狠狠是什么心态| 五月精品视频| 日韩美女视频中文字幕| av资源免费看| 国产视频视频一区| 成人午夜免费在线视频| 欧美aaa视频| 欧美岛国在线观看| 黄色三级生活片| 伊人久久成人| 亚洲字幕一区二区| 精品欧美不卡一区二区在线观看 | 加勒比在线一区| 国产美女精品在线| 欧美日韩国产免费一区二区三区| 老司机精品影院| 97超视频在线观看| 亚洲资源av| 99九九视频| 在线视频二区| 色综合 综合色| 国产大学生视频| 亚洲成人精品| 国产精品爱啪在线线免费观看| 成人毛片在线精品国产| 亚洲欧美综合另类在线卡通| 可以免费观看av毛片| 成人影院中文字幕| 久久天天躁狠狠躁夜夜av| 国产主播第一页| 91在线观看免费视频| 日韩在线视频在线| 婷婷激情成人| 中文字幕亚洲综合久久| 亚洲成人第一网站| 91在线视频免费91| 久久这里只有精品23| 欧美经典影片视频网站| www.99久久热国产日韩欧美.com| 亚洲大片免费观看| 99久久久精品| 99热在线这里只有精品| 好吊妞国产欧美日韩免费观看网站| 久久99热这里只有精品国产| 国产肥老妇视频| 亚洲欧美日韩人成在线播放| 性欧美在线视频| 欧美高清视频手机在在线| 国产裸体写真av一区二区 | eeuss鲁片一区二区三区在线观看| www.黄色网址.com| 国产一区二区三区亚洲综合 | 欧美激情国产日韩| 国产一二在线播放| 日韩精品小视频| 五月婷婷亚洲综合| 久久综合久久99| 黄色a级片免费| 国产影视精品一区二区三区| 国产a∨精品一区二区三区不卡| 肉丝一区二区| 欧洲在线/亚洲| 91香蕉国产视频| 国产一区亚洲一区| 亚洲精品国产suv一区88| 6080亚洲理论片在线观看| 久久免费视频在线观看| 天天操天天干天天爽| 大桥未久av一区二区三区| 欧美色图亚洲激情| 日韩高清一级片| 亚洲综合欧美日韩| 国产一区二区三区免费在线| 久久久久久久久久国产| 男人天堂网在线| 欧美日本在线看| 欧美人与禽zozzo禽性配| 成人高清免费观看| 国产精品涩涩涩视频网站| 91综合久久一区二区| 亚洲伊人久久大香线蕉av| 华人av在线| 色偷偷88888欧美精品久久久| 国产三级在线观看视频| 亚洲mv大片欧洲mv大片精品| 无码人妻精品一区二区中文| 极品少妇xxxx精品少妇| 欧美国产日韩激情| 青青草国产成人a∨下载安卓| 91丨九色丨国产在线| 超碰91在线观看| 色噜噜狠狠狠综合曰曰曰| 亚洲精品第五页| 色又黄又爽网站www久久| 91香蕉一区二区三区在线观看| 大桥未久av一区二区三区中文| 日本中文字幕片| 亚洲最新色图| 日韩精彩视频| www.豆豆成人网.com| 国产精品毛片a∨一区二区三区|国 | 国产成a人亚洲精| av免费播放网址| 婷婷久久国产对白刺激五月99| 国产精品一区二区三区四区五区| 国产亚洲人成a在线v网站 | 亚州一区二区三区| 欧美精品激情在线| 9色在线视频网站| 亚洲国产日韩欧美在线图片| 一道本无吗一区| 日韩欧美在线网址 | 一本色道久久综合精品竹菊| tube国产麻豆| 中文字幕第一区第二区| 国产成人精品无码片区在线| 黄色日韩网站视频| 欧美三级理论片| av不卡免费看| 欧美a级免费视频| 国产精品传媒精东影业在线| 日本在线成人一区二区| 国语一区二区三区| 91精品国产91久久久久青草| 久久er热在这里只有精品66| 欧美一二三视频| hd国产人妖ts另类视频| 欧美成人精品激情在线观看 | 热re91久久精品国99热蜜臀| 欧美极品少妇videossex| 日韩一区二区精品视频| 国产三级电影在线观看| 日韩av在线免费观看一区| 亚洲经典一区二区三区| 欧美一区二区精品在线| 91成人在线免费| 精品视频123区在线观看| 中文字幕永久在线| 日本精品免费观看高清观看| 四虎精品永久在线| 婷婷开心激情综合| 久久久久久天堂| 亚洲综合色区另类av| 久久久精品视频免费观看| 亚洲欧洲精品一区二区精品久久久 | 九九九九九九九九| 久久99热这里只有精品| 一道本视频在线观看| 日韩不卡一二三区| 手机在线成人免费视频| 美女任你摸久久| 玖玖爱视频在线| 老司机精品视频在线| 男人的天堂最新网址| 久久se这里有精品| 99九九99九九九99九他书对| 韩国一区二区视频| wwwxxx色| 99精品欧美一区二区三区小说| 亚洲调教欧美在线| 久久亚洲捆绑美女| 亚洲av无码国产精品麻豆天美| 国产农村妇女毛片精品久久麻豆 | 强迫凌虐淫辱の牝奴在线观看| www.亚洲激情.com| 亚洲午夜久久久久久久久红桃| 久久久久久久久蜜桃| 99久久久无码国产精品不卡| 亚洲三级理论片| 国产一级片视频| 高潮白浆女日韩av免费看| 性色av免费观看| 欧美丰满高潮xxxx喷水动漫| www.成人免费视频| 日韩国产精品一区| 国产玉足榨精视频在线观看| 色一区av在线| 国内高清免费在线视频| 欧美怡春院一区二区三区| 日本在线中文字幕一区二区三区| 国产免费一区二区三区在线观看| 国内精品视频| 精品国产一区二区三| 欧美中文一区二区| 91大学生片黄在线观看| 亚洲一区不卡| 特级西西444www| 97精品国产露脸对白| 成人一级片免费看| 亚洲午夜私人影院| 国产成人av免费| 精品国产三级a在线观看| 欧美精品少妇| 欧美黑人极品猛少妇色xxxxx| 亚洲淫成人影院| 91在线免费观看网站| 啪啪激情综合网| 99re99热| 老司机久久99久久精品播放免费| 日韩欧美中文视频| 国产午夜精品理论片a级大结局| 国产黄在线免费观看| 欧美色欧美亚洲高清在线视频| 国产精品久久久久久无人区| 亚洲精品国产免费| av网站大全在线| 国产成+人+综合+亚洲欧洲| 久久免费福利| 亚洲欧洲日韩综合二区| 日韩一区二区久久| 先锋资源在线视频| 欧美国产日韩a欧美在线观看| 一级aaa毛片| 日韩专区中文字幕一区二区| 欧美裸体xxxx极品少妇| 白白色在线观看| 91久久精品日日躁夜夜躁国产| 美女少妇全过程你懂的久久| 免费拍拍拍网站| 国产在线精品视频| 中文字幕成人动漫| 欧美日韩国内自拍| www.黄色片| 精品国产拍在线观看| 草莓视频成人appios| 欧美专区一二三| 国产精品永久| 亚洲精品乱码久久久久久不卡| 亚洲乱码日产精品bd| 91精品国产综合久| 中文字幕日韩高清| 日本一区二区三区视频在线| 欧美性天天影院| 亚洲尤物在线| 久久人人爽人人爽人人片 | 久久久久久少妇| 亚洲第一精品自拍| 欧美野外wwwxxx| 亚洲一区二区中文字幕| 99久久激情| 九九久久久久久| 亚洲欧洲日韩在线| 亚洲专区第一页| 日韩在线资源网| 亚洲伦理网站| 精品一区二区成人免费视频 | 国产青春久久久国产毛片| 欧美日韩一区二区三区四区在线观看| 中文字幕亚洲影院| 亚洲免费资源在线播放| va视频在线观看| 欧美激情免费视频| 9l视频自拍蝌蚪9l视频成人 | 在线免费三级电影网站| 欧美高清视频一区二区三区在线观看| 国产婷婷精品| 性猛交娇小69hd| 欧美日韩国产一区| 国产精品剧情| 国产福利久久| 国产精品婷婷| 天天操天天舔天天射| 欧美日韩不卡在线| 羞羞网站在线看| 国产精华一区| 久久久人人人| 国产视频123区| 欧美一区二区日韩| 不卡一本毛片| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产精品私人影院| av免费观看在线| 久久人人97超碰精品888 | 中文字幕第一页亚洲| 成人在线视频一区| 欧美精品韩国精品| 日韩在线观看免费av| a级日韩大片| 成人羞羞国产免费网站| 中文一区二区完整视频在线观看| 国产特级aaaaaa大片| 午夜精品蜜臀一区二区三区免费| 九色精品国产蝌蚪| 爱豆国产剧免费观看大全剧苏畅| 一个色综合网站| 女人偷人在线视频| 91热福利电影| 国产精品五区| avove在线播放| 亚洲欧美综合v| 视频二区欧美| 日本久久精品一区二区| 一区二区免费在线播放| 欧美挠脚心网站| 高清视频一区二区三区| 日本亚洲天堂网| 日韩精品一区三区| 久久精品小视频| 视频一区中文| 一级少妇精品久久久久久久| 欧美日韩中文字幕一区二区| 蜜桃av.网站在线观看| 国产精品h视频|