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

Java 多玩家 libgdx 教程

開發 后端
這篇文章中我們看到如何用AppWarp開發多人游戲。 我們在一個現成的libgdx超級跳躍例子基礎上用 AppWarp Cloud 特性進行拓展。

StartScreen java multiplayer libgdx tutorial

我們如何去做?

  • 在 libgdx的主頁修改libgdx樣本“superjumper".

  • 使用 AppWarp Cloud將它轉化為2個玩家的實時游戲.

  • 本游戲將匹配玩家并且用戶需要到達城堡來贏得游戲的勝利.

  •  用戶將獲得其他用戶成績的實時反饋以增加了游戲的刺激性。 

Eclipse 項目設置

 接下來,您需要從這個git repository下載libgdx游戲樣本(superjumper項目。.

在Eclipse中打開下載的superjumper解決方案。你將看到項目如下:

SetUp java multiplayer libgdx tutorial

為了創建多玩家,我使用了 AppWarp Java SDK (1.5 as of now)

關于libgdx的依賴
 

正如 libgdx的官網上提到的,這個示例依賴于libgbx。如果你試圖運行libgbx網站上的superjumper示例程序,你會得到關于gdx,gdx-backend-lwjgl, gdx-jnigen, gdx-openal的錯誤。你需要將這些工程設置為你的應用(superjumper)的依賴庫工程來解決這些錯誤。

但我已經將這些庫包含在了superjumper git倉庫中的libs文件夾下。觀看這個視頻或閱讀這個教程來了解更多關于libgdx工程的安裝設置。

取得你的AppWarp application keys

如果你要與AppWarp云服務集成,你需要從ShepHertz開發者面板AppHq取得你的application keys.這些key能夠在ShepHertz云服務中識別的你應用空間,而且AppWarp云需要用它們隔離不同應用間的消息。

AppWarp網站上按步驟注冊(免費)并取得你的application keys.

現在打開superjumper示例工程中的 WarpController.java 文件并在其中添加這些值。例如:

  1. public static String AppKey = "14a611b4b3075972be364a7270d9b69a5d2b24898ac483e32d4dc72b2df039ef";  
  2. public static String SecretKey = "55216a9a165b08d93f9390435c9be4739888d971a17170591979e5837f618059"

運行多用戶sample
 

既然你已經準備好了, 我們可以實際運行并觀察這個游戲了。因為這個游戲有單人或多人游戲的選項,為了玩多人游戲你需要在2個模擬器/設備上同時運行它。

當你按了multiplayer按扭, 這個游戲會連接AppWarp并加入一個游戲房間。一旦進入這個游戲房間, 這個客戶端在游戲開始前會一直等待第二個玩家加入該房間。

[[113667]]

現在你需要在第二個模擬器/設備上做同樣的操作,AppWarp的匹配API會將第二個玩家連接到相同的游戲房間,然后游戲開始。玩家需要到達城堡來完成這個游戲。同時用戶會發現他們的對手在實時地運動。這個游戲內實時通信正是AppWarp的強大之處。

[[113668]]

游戲會在這三個條件下完成

  1. 用戶離開:當一個玩家離開游戲時,另一個玩家被判定為勝利者。因為他的對手已經離開的游戲。

  2. 闖關成功:到達城堡的玩家成為勝利者

  3. 游戲結束:如果玩家碰到了松鼠或者玩家掉了下來那另一個玩家會成為勝利者。

GameOver java multiplayer libgdx tutorial 

#p#

怎樣與AppWarp集成
 

開始游戲

首先你需要用你的應用密鑰初始化Warpclient單例(WarpController.java).

  1. WarpClient.initialize(apiKey, secretKey); 

接下你需要連接到AppWarp云端并且加入一個游戲房間(WarpController.java)

注意: AppWarp SDK 提供通過異步API提供它的功能。這意味著你只需簡單的將請求監聽器添加到WarpClient實例中區接受響應和通知即可。

這個文件 (WarpController.java) 有我們這步所需的所有代碼。它創建連接請求,房間請求,區域請求(如果有必要創建一個房間)。因此我們添加相關監聽器到OnStart()方法中。

  1. public WarpController()  
  2. {  
  3.     initAppwarp();  
  4.     warpClient.addConnectionRequestListener(new ConnectionListener(this));  
  5.     warpClient.addChatRequestListener(new ChatListener(this));  
  6.     warpClient.addZoneRequestListener(new ZoneListener(this));  
  7.     warpClient.addRoomRequestListener(new RoomListener(this));  
  8.     warpClient.addNotificationListener(new NotificationListener(this));  
  9. }  
  1. private void initAppwarp(){  
  2.     try {  
  3.         WarpClient.initialize(apiKey, secretKey);  
  4.         warpClient = WarpClient.getInstance();  
  5.     } catch (Exception e) {  
  6.         e.printStackTrace();  
  7.     }  
  8. }  

設置好listener后我們可以繼續創建連接。用戶需要傳入一個惟一用戶名(username)以連接到AppWarp云。在示例中我只是使用了一個隨機字符串(你也可以從用戶或像facebook的第三方服務處取得來惟一標識用戶)。隨機字符串是在MainMenuScreen.java文件中生成的。

  1. WarpClient.connectWithUserName(userName); 

連接的結果會交給以下回調函數。

  1. public void onConnectDone(ConnectEvent e) {  
  2.     if(e.getResult()==WarpResponseResultCode.SUCCESS){  
  3.         callBack.onConnectDone(true);  
  4.     }else{  
  5.         callBack.onConnectDone(false);  
  6.     }  
  7. }  
  1. public void onConnectDone(boolean status){  
  2.     if(status){  
  3.         warpClient.initUDP();  
  4.         warpClient.joinRoomInRange(11false);  
  5.     }else{  
  6.         isConnected = false;  
  7.         handleError();  
  8.     }  

如果連接成功,我們會試著加入一個房間。我們也可以選擇初始化UDP(稍后的游戲玩家會用到)。為了加入房間,我們使用JoinRoomInRange方法并傳入參數(1,1),它會請求服務器將客戶端加入只有一個用戶的房間。如果失敗我們會新建并加入一個容納兩個玩家的房間。

  1. public void onJoinRoomDone(RoomEvent event){  
  2.     if(event.getResult()==WarpResponseResultCode.SUCCESS){// success case  
  3.         this.roomId = event.getData().getId();  
  4.         warpClient.subscribeRoom(roomId);  
  5.     }else if(event.getResult()==WarpResponseResultCode.RESOURCE_NOT_FOUND){// no such room found  
  6.         HashMap<string, object=""> data = new HashMap<string, object="">();  
  7.         data.put("result""");  
  8.         warpClient.createRoom("superjumper""shephertz"2, data);  
  9.     }else{  
  10.         warpClient.disconnect();  
  11.         handleError();  
  12.     }  
  13. }  

一旦加入某個房間(不管是現在還是創建新房間之后),客戶端需要訂閱這個房間來接收房間的通知(這在游戲中是必須的)。這里詳細解釋了這些概念。訂閱之后我們要調用getLiveRoomInfo來檢查房間是否有兩個玩家了,如果是我們就開始游戲,否則就等待其他玩家加入這個房間。

  1. WarpClient.getLiveRoomInfo(roomId); 
  1. public void onGetLiveRoomInfo(String[] liveUsers){  
  2.     if(liveUsers!=null){  
  3.         if(liveUsers.length==2){  
  4.             startGame();      
  5.         }else{  
  6.             waitForOtherUser();  
  7.         }  
  8.         }else{  
  9.             warpClient.disconnect();  
  10.             handleError();  
  11.     }  
  12. }  

開始游戲

進行游戲的代碼在MultiplayerGameScreen.java文件中。如果用戶進入了這個界面,那就意味著有兩個用戶在這個房間中且游戲開始了。玩家玩這個游戲,并且他也要更新其他玩家的狀態。其他玩家在你的界面上顯示成綠色小怪物。

隨著玩家在界面上移動以完成游戲關卡,需要繪制它的移動軌跡,也要將位置更新發送給遠程玩家。參見WorldRenderer.java(multiplayer)

  1. private void renderBob () {  
  2. {  
  3. ...  
  4. ...  
  5.     if (side < 0){  
  6.         batch.draw(keyFrame, world.local_bob.position.x + 0.5f, world.local_bob.position.y - 0.5f, side * 11);  
  7.         sendLocation(world.local_bob.position.x + 0.5f, world.local_bob.position.y - 0.5f, side * 11);  
  8.     }else{  
  9.         batch.draw(keyFrame, world.local_bob.position.x - 0.5f, world.local_bob.position.y - 0.5f, side * 11);  
  10.         sendLocation(world.local_bob.position.x - 0.5f, world.local_bob.position.y - 0.5f, side * 11);  
  11.     }  
  12. }  

消息通過我們在這個示例中所寫的工具方法來發送。WarpClient允許客戶端將字節數組廣播給它所在的房間。可以使用TCP(默認)或UDP來發送。記住我們已經在成功連接到云服務后的***個界面中初始化了UDP。

  1. private void sendLocation(float x, float y, float width, float height){  
  2.   try {  
  3.     JSONObject data = new JSONObject();  
  4.     data.put("x", x);  
  5.     data.put("y", y);  
  6.     data.put("width", width);  
  7.     data.put("height", height);  
  8.     WarpController.getInstance().sendGameUpdate(data.toString());  
  9.     } catch (Exception e) {  
  10.         // exception in sendLocation  
  11.     }  
  12.   }  

發送給房間的消息是通過onUpdatePeersReceived的回調方法提供的。在這個回調中我們要解析這個消息并識別發送者,消息類型和與此消息綁定的數據。我們根據這些消息做相應的處理。

  1. public void onUpdatePeersReceived(UpdateEvent event) {  
  2.     callBack.onGameUpdateReceived(new String(event.getUpdate()));  
  3. }  
  1. try {  
  2.     JSONObject data = new JSONObject(message);  
  3.     float x = (float)data.getDouble("x");  
  4.     float y = (float)data.getDouble("y");  
  5.     float width = (float)data.getDouble("width");  
  6.     float height = (float)data.getDouble("height");  
  7.     renderer.updateEnemyLocation(x, y, width, height);  
  8. catch (Exception e) {  
  9.     // exception   
  10. }  

#p#

游戲結束

當游戲結束后我們只需要更新房間的屬性。其他玩家收到通知后需要根據此消息更新他們的UI。

  1. public void updateResult(int code, String msg){  
  2.     if(isConnected){  
  3.         STATE = COMPLETED;  
  4.         HashMap<string, object=""> properties = new HashMap<string, object="">();  
  5.         properties.put("result", code);  
  6.         warpClient.lockProperties(properties);  
  7.     }  
  8. }  

lockProperties

當兩個遠程玩家同玩游戲時,他們有可能會同時結束游戲,而這會引起資源競爭。這種情況***交由服務器解決,所以我們使用了lockProperties API。所以當游戲結束時用戶向服務器發送一個lockProperties請求將結果屬性鎖定。一旦這個結果被某個用戶鎖定,服務器會放棄處理后續對同一個屬性的lockProperties請求。點擊此處以了解更多此AppWarp仲裁方式。

隨著游戲的結束,其他用戶得到通知,StartMultiplayerScreen.java根據以下代碼將游戲結束的原因顯示到界面上。

  1. public void onGameFinished (int code) {  
  2.     if(code==WarpController.GAME_WIN){  
  3.         this.msg = game_loose;  
  4.     }else if(code==WarpController.GAME_LOOSE){  
  5.         this.msg = game_win;  
  6.     }else if(code==WarpController.ENEMY_LEFT){  
  7.         this.msg = enemy_left;  
  8.     }  
  9.     update();  
  10.     game.setScreen(this);  
  11. }  

我們也要離開并取消訂閱此房間,并且取消監聽器;如果游戲不在運行狀態我們也要刪除房間。由于在這個游戲中我們使用的是AppWarp 動態房間,在使用完后***立即刪除(盡管空動態房間在60分鐘后都會被自動刪除)。

  1. public void handleLeave(){  
  2.     if(isConnected){  
  3.         warpClient.unsubscribeRoom(roomId);  
  4.         warpClient.leaveRoom(roomId);  
  5.         if(STATE!=STARTED){  
  6.             warpClient.deleteRoom(roomId);  
  7.         }  
  8.         warpClient.disconnect();  
  9.     }  
  10. }  
  1. private void disconnect(){  
  2.     warpClient.removeConnectionRequestListener(new ConnectionListener(this));  
  3.     warpClient.removeChatRequestListener(new ChatListener(this));  
  4.     warpClient.removeZoneRequestListener(new ZoneListener(this));  
  5.     warpClient.removeRoomRequestListener(new RoomListener(this));  
  6.     warpClient.removeNotificationListener(new NotificationListener(this));  
  7.     warpClient.disconnect();  
  8. }  

用戶可以在這里點擊并返回MainMenuScreen,然后我們可以重新進行這個過程。但這次我們只需要找到一個房間就可以開始了(因為我們已經連接到了服務器)。

總結

這篇文章中我們看到如何用AppWarp開發多人游戲。 我們在一個現成的libgdx超級跳躍例子基礎上用 AppWarp Cloud 特性進行拓展。我們同樣看到客戶端怎樣連接到AppWarp上,怎樣加入游戲房間。繼承概念不受libgdx的影響,并且可以應有與其他任何Java程序中。

使用Robovm發布到iOS

你可以使用 Robovm 來將超級跳躍游戲發布到iOS上. 下面是幾步是任何其它項目中都需要做的。另外你需要做如下改變。

1. 將這些屬性添加到 robovm.xml  

  1. <forcelinkclasses>  
  2.   <pattern>org.apache.harmony.xnet.provider.jsse.OpenSSLProvider</pattern>  
  3.   <pattern>org.apache.harmony.security.provider.cert.DRLCertFactory</pattern>  
  4.   <pattern>com.android.org.bouncycastle.jce.provider.BouncyCastleProvider</pattern>  
  5.   <pattern>org.apache.harmony.security.provider.crypto.CryptoProvider</pattern>  
  6.   <pattern>org.apache.harmony.xnet.provider.jsse.JSSEProvider</pattern>  
  7.   <pattern>com.android.org.bouncycastle.jce.provider.JCEMac$SHA1</pattern>  
  8. </forcelinkclasses>  

2. 使用如下代碼從背景中改變屏幕。

  1. Gdx.app.postRunnable(new Runnable() {  
  2.   @Override 
  3.   public void run () {  
  4.       game.setScreen(new MultiplayerGameScreen(game, StartMultiplayerScreen.this));  
  5.   }  
  6. });  

這里另有要求, 我們得到如下錯誤,因為AppWarp的回調不在UI線程中。

    Exception in thread "MessageDispatchThread" java.lang.IllegalArgumentException:     Error compiling shader

3. 超級跳躍中聲音不可用了,這是因為iOS中的聲音是使用RoboVm。

英文原文: Java Multiplayer libgdx Tutorial

譯文鏈接:http://www.oschina.net/translate/java-multiplayer-libgdx-tutorial

責任編輯:林師授 來源: 開源中國社區 編譯
相關推薦

2013-11-06 11:31:28

Android游戲

2013-12-04 13:30:45

Android游戲引擎libgdx教程

2013-12-06 10:22:42

Android游戲引擎libgdx教程

2013-12-06 10:31:14

Android游戲引擎libgdx教程

2013-12-04 17:27:10

Android游戲引擎libgdx教程

2013-12-06 10:12:49

Android游戲引擎libgdx教程

2013-12-06 09:59:53

Android游戲引擎libgdx教程

2022-01-07 13:34:25

Java時間格式化

2013-12-04 16:21:02

Android游戲引擎libgdx教程

2013-12-04 17:14:57

Android游戲引擎libgdx教程

2013-12-04 16:07:27

Android游戲引擎libgdx教程

2021-01-19 11:07:34

內存條標簽硬件

2023-05-18 07:15:35

SSDHDD游戲

2013-12-04 16:28:29

Android游戲引擎libgdx教程

2013-12-06 10:35:28

Android游戲引擎libgdx教程

2021-08-26 21:55:38

DPU架構數據

2011-12-24 21:59:02

iPhone

2009-03-23 13:50:40

Nehalem服務器高性能

2020-04-06 11:56:04

黑客網絡威脅網絡攻擊

2009-05-26 08:23:04

魔獸集體移民臺灣玩家
點贊
收藏

51CTO技術棧公眾號

国产一级在线观看| 国产性70yerg老太| 国产第一亚洲| 久久久久亚洲综合| 国产精品第七十二页| xxx在线播放| 日韩毛片网站| 亚洲综合色噜噜狠狠| 国产精品高清一区二区三区| 日韩欧美国产亚洲| 精品成人影院| 欧美另类z0zxhd电影| 欧美日韩dvd| 午夜视频免费在线| 奇米精品一区二区三区四区| 精品国产欧美一区二区五十路 | 国产av无码专区亚洲a∨毛片| 欧美成人tv| 日韩欧美视频在线| 欧美成人一区二区在线观看| 国产一二三区在线视频| 黄色小说综合网站| 91精品国产91| 91禁男男在线观看| 一区二区在线免费播放| 五月婷婷色综合| 午夜精品区一区二区三| 亚洲成人久久精品| 天使萌一区二区三区免费观看| 色阁综合伊人av| 插我舔内射18免费视频| 国产精品诱惑| 精品国产老师黑色丝袜高跟鞋| 特级西西444www大精品视频| 黄色小视频免费观看| 国产精品久久777777毛茸茸| 久久精品国产亚洲精品| 国产制服丝袜在线| 国产aa精品| 亚洲国产精品一区二区www在线| 欧美一级二级三级九九九| 国产精品系列视频| 日韩电影在线免费观看| 久久久久久欧美| 在线观看日本黄色| 欧美一区二区三区红桃小说| 欧美一区二区国产| 蜜臀av免费观看| 日韩精品亚洲人成在线观看| 欧美国产视频在线| 精品一区二区三区日本| 精品久久国产视频| 卡一卡二国产精品| 色婷婷精品大视频在线蜜桃视频| 免费的av在线| 黄色免费网站在线| 亚洲色图欧美在线| 97伦理在线四区| 国产又粗又大又爽| 精品综合免费视频观看| 国产精品综合久久久| 69xxx免费| 另类专区亚洲| 午夜日韩在线观看| 国产亚洲精品久久久久久久| 在线观看美女网站大全免费| 久久久久久久久久美女| 久久av一区二区三区亚洲| 午夜精品小视频| 国产麻豆精品久久一二三| 国产狼人综合免费视频| 亚洲av人无码激艳猛片服务器| 久久国产成人| 欧美激情乱人伦一区| 成人免费毛片xxx| 98精品久久久久久久| 亚洲天堂成人在线| 性欧美一区二区| 国产欧美日韩精品高清二区综合区| 亚洲激情 国产| 88av在线播放| 日韩伦理一区二区三区| 国产丝袜精品第一页| 亚洲av成人片色在线观看高潮| 美国十次av导航亚洲入口| 精品国产乱码久久久久久影片| 亚洲一级片免费观看| 国产伊人久久| 欧美电影一区二区| 4438x全国最大成人| 国内高清免费在线视频| 夜夜嗨av一区二区三区| 精品视频在线观看一区二区| 欧美xxxx免费虐| 精品成人av一区| 无码人妻h动漫| 国产成人精品一区二区三区免费| 欧美日韩和欧美的一区二区| 久久久久久久久久毛片| 麻豆一区在线| 亚洲第一区在线观看| 污污视频网站免费观看| 99久久er| 日韩一级免费一区| 国产精品一级黄片| 欧美三级伦理在线| 欧美成人高清视频| 欧美激情亚洲综合| 男女激情视频一区| 亚洲自拍偷拍在线| 欧洲一级在线观看| 亚洲丝袜美腿综合| 夜夜添无码一区二区三区| 久草福利在线视频| 中文字幕一区二区三区精华液 | 国产1区2区3区精品美女| 国产精品一区视频网站| 天天av综合网| 国产丶欧美丶日本不卡视频| 精品久久久久久一区| 成年人在线免费观看| 一级做a爱片久久| 18岁视频在线观看| 久久在线观看| 亚洲欧洲国产一区| a级片在线观看免费| 久久婷婷丁香| 成人免费在线看片| 超碰免费在线观看| 午夜精彩视频在线观看不卡| 国产一伦一伦一伦| 欧美理论电影在线精品| 中文字幕日韩欧美| 天天操天天摸天天干| 国产一区三区三区| 欧美精品一区二区三区四区五区| 激情在线小视频| 日本福利一区二区| 精品国产鲁一鲁一区二区三区| 亚洲小说图片| 久久久久久久久久久成人| 这里只有精品9| 懂色av一区二区三区蜜臀| 亚洲一区bb| 视频二区不卡| 日韩国产高清污视频在线观看| 国产性生活大片| 日本女优在线视频一区二区| 精品欧美一区二区在线观看视频 | 欧美精品少妇| 亚洲一区二区三区小说| 亚洲精品mv在线观看| 欧美在线色图| 国产91精品网站| 四虎国产精品永远| 亚洲成人动漫av| 五月天视频在线观看| 国产中文字幕一区二区三区| 91a在线视频| 人妻va精品va欧美va| 中文字幕字幕中文在线中不卡视频| 午夜视频在线瓜伦| 加勒比中文字幕精品| 久久精品国产69国产精品亚洲| 一级黄色av片| 久久亚洲影视婷婷| 黄色免费视频大全| 人人网欧美视频| 性色av一区二区三区红粉影视| 99久久精品国产成人一区二区| 国产精品视频yy9299一区| 999精品网站| 国产探花在线精品一区二区| 国产成人精品视频| 黄色在线视频观看网站| 精品女厕一区二区三区| av在线播放网址| 99精品福利视频| 久久99精品国产一区二区三区| www在线观看黄色| 欧美日韩加勒比精品一区| av av在线| 极品裸体白嫩激情啪啪国产精品| 成人自拍视频网站| 草草在线视频| 亚洲欧洲午夜一线一品| 波多野结衣黄色| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | av鲁丝一区鲁丝二区鲁丝三区| 国产精品九九| 久久精品综合一区| 日韩理论视频| 一级做a爰片久久毛片美女图片| 波多野结衣二区三区| 国产精品福利一区二区三区| 久久久久亚洲av无码麻豆| 亚洲国产二区| 欧美日韩免费精品| 岛国精品在线| 久久影院资源网| 中文字幕在线观看第二页| 亚洲免费av高清| 黄色激情在线观看| 日韩精品免费专区| 国产高潮呻吟久久久| av成人在线网站| 欧美精品999| 国产尤物视频在线| 欧美亚洲一区二区三区四区| 四虎精品一区二区| 肉色丝袜一区二区| 99精品一级欧美片免费播放| 国产精品调教视频| 国产精品美女主播| 欧洲成人综合网| 亚洲日本中文字幕| 国产福利资源在线| 色综合久久精品| 国产精品99久久久久久成人| www.在线欧美| 国产福利在线免费| 一区二区高清| 欧美 另类 交| 国产精品片aa在线观看| av色综合网| 国语自产精品视频在线看抢先版结局| 欧美精品激情在线观看| 成人免费在线视频网| 日韩欧美电影在线| www.国产com| 夜夜揉揉日日人人青青一国产精品| 国产sm调教视频| 91在线观看污| 亚洲av成人精品一区二区三区 | 亚洲五码中文字幕| 男的操女的网站| 国产精品乱码久久久久久| 精品无人区无码乱码毛片国产| av在线不卡观看免费观看| 男人女人拔萝卜视频| 国产一区二区精品在线观看| 最新天堂中文在线| 欧美aaa在线| 不卡av免费在线| 日韩影院精彩在线| 成人在线免费在线观看| 99这里有精品| 国产精品裸体瑜伽视频| 国产一区日韩一区| 欧美久久在线观看| 亚洲午夜久久久久久尤物 | 亚洲欧美久久| 免费观看精品视频| 久久久久99| 天天干在线影院| 美国一区二区三区在线播放 | 亚洲国产成人在线视频| 免费国产黄色片| 精品国产伦一区二区三区观看体验| 国产高中女学生第一次| 日韩女优av电影在线观看| www.黄色国产| 精品国产乱码久久久久久蜜臀| 丰满人妻一区二区三区免费| 欧美va亚洲va国产综合| 人妻与黑人一区二区三区| 亚洲精品久久久久久久久久久| 日中文字幕在线| 亚洲一区二区国产| 日本高清视频在线播放| 久久久精品电影| 男人天堂亚洲天堂| 国产91精品青草社区| 三级成人黄色影院| 成人av在线天堂| 日韩在线观看一区二区三区| 国产亚洲一区在线播放| 久草成人在线| 中文字幕人成一区| 精品福利电影| 国产裸体免费无遮挡| 国产真实乱子伦精品视频| 国产女主播在线播放| 久久久久久久网| www深夜成人a√在线| 亚洲一区二区欧美| 日韩黄色片网站| 91麻豆精品国产综合久久久久久| 国产91绿帽单男绿奴| 亚洲人成绝费网站色www| 老司机在线看片网av| 91国产中文字幕| 日本午夜免费一区二区| 国产精品国产精品| 日本精品三区| 福利视频一二区| 麻豆久久久久久久| 人妖粗暴刺激videos呻吟| 日本一区二区三级电影在线观看| 澳门黄色一级片| 欧美专区日韩专区| 人妻偷人精品一区二区三区| 最新69国产成人精品视频免费| 国产高清在线a视频大全| 国产精品久久在线观看| 国产精品白丝av嫩草影院| 四虎一区二区| 日韩午夜在线| 91蝌蚪视频在线| 久久老女人爱爱| 久久久久久久中文字幕| 欧美色精品在线视频| 亚洲 欧美 激情 另类| 久久在精品线影院精品国产| 日韩制服一区| 精品在线视频一区二区| 综合亚洲视频| 亚洲一级片网站| 久久影音资源网| 久久久久99精品成人片毛片| 欧美日韩国产综合草草| 丝袜视频国产在线播放| 午夜精品视频网站| 精品国产不卡一区二区| 亚洲国产日韩综合一区| 国产一区导航| 丝袜熟女一区二区三区 | 一区二区三区日韩视频| 日韩国产精品久久久| 草草影院第一页| 亚欧色一区w666天堂| 国产熟女一区二区丰满| 色婷婷久久av| 麻豆精品蜜桃| 日本精品一区二区三区高清 久久| 雨宫琴音一区二区在线| 不卡的一区二区| 亚洲免费高清视频在线| 国产精品自偷自拍| 久久精品国产2020观看福利| 久久精品97| 亚洲欧美日韩综合一区| 日韩av一区二区三区四区| 丰满少妇高潮一区二区| 色综合一个色综合亚洲| 日本一二三区在线视频| 国产91|九色| 国产乱码精品一区二区亚洲| 北条麻妃在线观看| 久久亚洲捆绑美女| 天堂网中文字幕| 亚洲视频在线观看视频| 色8久久影院午夜场| 欧日韩一区二区三区| 日韩福利电影在线观看| 三年中国中文观看免费播放| 在线观看国产日韩| 香蕉视频在线看| 成人中心免费视频| 在线成人超碰| 欧美性猛交乱大交| 亚洲夂夂婷婷色拍ww47| 丰满人妻一区二区| 97视频在线播放| 国内精品久久久久久99蜜桃| 亚洲最大成人在线观看| 成人免费一区二区三区在线观看| 国产一区二区三区中文字幕| 久热精品视频在线| av在线亚洲色图| av免费播放网址| 国产亚洲成年网址在线观看| 在线免费观看一区二区| 毛片精品免费在线观看| 国产福利资源一区| 妺妺窝人体色www在线小说| 国产清纯在线一区二区www| 国产一区二区在线视频观看| 欧美激情综合色综合啪啪五月| 国语一区二区三区| 国产精品乱码久久久久| 中文字幕欧美一| 欧美综合视频在线| 国产精品嫩草影院久久久| 欧美日本一区二区视频在线观看 | heyzo欧美激情| 欧美国产激情视频| 国产精品成人免费在线| 亚洲高清视频网站| 日韩免费av在线| 影音先锋日韩精品| 加勒比综合在线| 欧美一区欧美二区| 蜜桃视频在线观看免费视频| 婷婷亚洲婷婷综合色香五月| 国产成人亚洲综合a∨婷婷图片| 成年人视频在线免费看| 毛片精品免费在线观看| 亚洲人亚洲人色久| 中文字幕55页|