整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Egret 2D 5.2.20版本發布 新增支持KT

          Egret 2D 5.2.20版本發布 新增支持KTX紋理格式

          019年5月28日,白鷺引擎發布 5.2.20版本,在5.2.20版本中,2D渲染 – JavaScript和微信小游戲新增支持KTX紋理存儲格式(KTX紋理說明見下文);同時,Egret Native更新至0.1.17版本,新增、修復,優化多項功能,推薦各位開發者更新體驗。


          KTX 紋理壓縮使用說明

          一、關于 KTX

          KTX (Khronos Texture) 是一種紋理存儲格式,大部分移動設備的 GPU 均支持這種格式。可以有效降低設備的顯存占用,提高運行效率和穩定性。




          如上圖所示,第一步我們先把普通的 png\jpg 圖片,轉換成 ios 系統支持的 PVRTC 和安卓系統支持的 ETC1 格式的紋理。第二步再把紋理打包為 KTX 格式。

          二、如何使用 KTX

          http://tool.egret-labs.org/DocZip/engine/KTXHello.zip(KTX使用示例,復制鏈接到地址欄可下載)

          上面是一個 HelloWorld 的示例項目,其中只把 egret_icon.png 這個圖片轉換為KTX 格式使用。

          1、資源說明

          在 resource/assets 目錄下,egret_icon 有如下幾種格式,引擎會根據不同平臺來讀取不同的格式:




          egret_icon.png:PC 平臺使用;

          egret_icon.pvr.ktx:pvr 格式的 ktx,iOS 平臺使用;

          egret_icon.ktx(etc1 格式的顏色紋理) 和 egret_icon_alpha.ktx(alpha遮罩紋理):安卓平臺使用。注:也可以把 2 個 ktx 文件合成一個文件,具體方法請參考高級教程。

          2、代碼說明




          在 Main.ts 中的 loadResource 方法里,我們加了幾行代碼。

          (1)、ignoreResource 方法表示只有 egret_icon.png 這個圖片才會進入 ktx的使用流程,其他資源全部忽略;

          (2)、CompressTextureProcessor 是加載資源的處理器,我們把它注冊到了AssetsManager 資源管理器中。具體的處理邏輯,請看示例中的代碼。

          3、顯示效果




          為了更容易看出效果,我們把 egret_icon.png 換成了另外一張白鷺小鳥,而 ktx格式還是標準 HelloWorld 里的白鷺圖標。

          從上圖中很容易看出,左側是 PC 瀏覽器中的顯示效果,因為不支持 ktx 格式,顯示的是 png 圖片。而右側的 iOS 手機瀏覽器,因為支持 ktx 格式,顯示的是pvr 紋理格式的圖片。

          Egret Native 0.1.17

          [新增] 原生渲染支持自定義字體;

          [新增] 支持更多的WebGLExtension: OES_texture_float、OES_standard_derivatives;

          [優化] Android:帶描邊的加粗字體加粗不明顯;

          [優化] Android:按照Google Play白名單調整Android SDK接口調用方法;

          [修正] 在打開原生顯示列表時,位圖字體時可能導致程序崩潰;

          [修正] 加載完成的audio在cloneNode之后立即播放無效;

          [修正] Android:屏幕彈出鍵盤時會自動彈回;

          [修正] Android:不打開FPS面板時退出異常;

          [修正] Android:和不支持ping pong的websocket服務器連接時會斷線;

          [修正] Android:華為Android8.1系統劉海屏高度支持;

          [修正] iOS:單行輸入框輸入文字超過最大長度后不能自動左移;

          [修正] iOS:多行輸入框輸入文字顏色不正確;

          [修正] iOS:放大模式下正確識別屏幕分辨率;

          [修正] iOS:post請求數據量過大引起崩潰。

          近有空開了一個簡單的油價小程序,分享給大家學習。(適合新手練手項目,大神們請多指教)


          首先展示一下小程序


          <script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          小程序分兩屏,首屏展示的是每個城市的油價、每日黃歷、分享功能、定位當前城市功能;第二屏展示的是每日笑話。


          完整效果可以搜索小程序:悟空仔油價


          ?



          開發詳情:


          1、首先介紹開發工具


          (1)、開發小程序常用的有微信官方提供的工具 -- 微信開發者工具。


          工具介紹鏈接:https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html


          ?


          (2)、白鷺科技推出的Egret Wing


          http://developer.egret.com/cn/github/egret-docs/Wing/ui/index.html


          ?


          小程序目錄


          ?


          2、小程序Appid,每個小程序對應一個appid,如果要開發上線的小程序,首先需要注冊一個小程序,注冊地址:https://mp.weixin.qq.com/wxopen/waregister?action=step1;如果只是練習小程序項目,可以使用測試appid


          ?


          完成之后就可以愉快的開發小程序了


          3、安裝小程序插件 Vant Weapp


          本項目使用了小程序插件 Vant Weapp,項目地址:


          https://vant-contrib.gitee.io/vant-weapp/#/quickstart


          安裝插件的方法有詳細說明,步驟四 構建 npm 包的時候如果提示沒有找到文件夾,首先先創建文件夾miniprogram


          ?


          4、城市列表獲取


          全國城市的獲取,本來想用vant 提供的數據插件,結果引用失敗,沒辦法,直接新建了js文件,復制到了里面。


          小伙伴可以嘗試下,能不能引用成功:


          https://vant-contrib.gitee.io/vant-weapp/#/area


          ?


          ?


          5、獲取當前登錄用戶的位置信息(使用微信的位置接口和騰訊地圖的小程序SDK)


          https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview


          第一步、使用微信提供的位置接口:wx.getLocation(Object object)


          https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html


          ?


          獲取到當前打開用戶的經緯度信息


          第二步、使用騰訊地圖的小程序SDK的reverseGeocoder(options:Object)方法獲取城市信息


          https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodReverseGeocoder


          ?


          6、獲取今日油價、今日黃歷和笑話接口


          采用了聚合數據的免費接口,只需注冊,就可以有每天100次的免費接口訪問權限


          注冊地址:https://www.juhe.cn/


          ?


          笑話展示頁面使用了scroll-view的組件


          https://developers.weixin.qq.com/miniprogram/dev/component/scroll-view.html


          請求接口之前封裝了_get和_post方法


          ?


          7、本來是想做文章資訊頁,但是文章資訊的小程序要有審核資質,所以改成了笑話頁;


          文章詳情頁的頁面還保留著,需要的小伙伴可參考下


          ?


          開發不易,小程序源碼下載鏈接:


          https://mp.weixin.qq.com/s/FrrZbXMVrUV45q_pu8uGQg


          或者關注關注公眾號:憂郁的悟空仔


          ?

          ?

          用一個簡單的游戲開發示例,由淺入深,介紹了如何用Laya引擎開發微信小游戲。

          微信小游戲的推出也快一年時間了,在IEG的游戲運營活動中,也出現了越來越多的以小游戲作為載體運營的活動類型,比如游戲預約,搶先試完等等,都收到了非常良好的效果。

          在支持微信小游戲的游戲引擎中,Cocos,Egret,Laya都對小游戲的開發提供了很多強大的支持。前段時間正好抽空研究了一下這塊的內容,現做一個總結,針對如何使用Laya引擎開發微信小游戲給大家做一下介紹。因為時間有限,研究并不深入, 如有高手路過,忘不吝賜教。

          做個啥游戲呢?“絕地求生”很火,我們做個“絕地求死”如何?策劃也很簡單,和絕地求生相反,主角不是跳傘的玩家,而是地面的炮手,大炮要把跳傘的傘兵用大炮一個個都消滅掉。

          牛逼的策劃有了,咱們進入正題,看看怎么實現吧!

          1. 如果不用引擎會怎樣?

          1.1 Canvas了解下

          微信小游戲提供了canvas這個游戲核心組件。利用Canvas可以在畫布上畫出文字、圖形、圖像等等。 不過講微信小游戲之前,得先說說H5,在H5時代獲取canvas對象非常簡單,如下圖:

          var canvas=document.getElementById("myCanvas");
          var ctx=canvas.getContext("2d");
          

          常用的一些API:

          ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); //繪制圖片
          ctx.fillText(text,x,y,maxWidth); //繪制文字
          ctx.rect(x,y,width,height); //繪制矩形
          ctx.clearRect(x,y,width,height);//清除矩形內像素
          ctx.scale(scalewidth,scaleheight);//縮放
          ctx.rotate(angle);//旋轉角度
          。。。。
          

          微信小游戲里,也提供了canvas對象,只不過獲取接口變了:

          wx.createCanvas()
          

          其他H5環境下有的Canvas API,微信環境里也都有。

          1.2 動畫的原理

          Canvas只是一個2D的畫布,要做一個游戲,動畫總不能少吧?要讓圖片能動起來,這又是怎么做到的呢?請看下圖:

          好吧,動畫其實就是不斷畫圖片,然后擦除,再畫圖片,再擦除的循環過程,肉眼看起來,那就是動起來了。

          在古老的電影膠片時代,我們看到的電影,就是一張一張連續幀的膠片組成的,最后投射到大屏幕上,變成了我們看到的電影。

          1.3 動畫性能優化

          但是,動畫是講究幀率的,一般如果能達到每秒60幀,那就和電影一樣是很流暢的動畫效果了。計算公式:1000ms/60fps=16.67ms,這就要求我們每次動畫里的業務邏輯計算,都要16.6ms里完成,不能影響下一幀的顯示,否則就是卡頓,也就被人說這個游戲好卡,性能好差了。

          知道原理了,性能優化具體怎么做呢?

          • Canvas分層 有些游戲中,背景是不變的,為了提高性能,可以把游戲背景抽離出一個單獨的canvas,這樣,在畫面發生變化的時候,不需要重繪整個背景,只需要繪制變化的那部分就可以。
          • 減少API調用 每次的ctx的api調用,都是有性能消耗的,所以,盡量減少每幀的api調用次數,具體怎么減少,就要看業務需求了。
          • 圖片預裁剪 圖片的裁剪過程,也是有性能消耗的,我們可以把裁剪的圖片預先存起來,之后在繪制的時候,直接從內存里拿,而不需要每次都重新裁剪。
          • 離屏繪制 直接操作上屏的canvas,性能是很差的,尤其是有單幀繪制操作很多的時候,性能下降更明顯。 這個時候,我們可以預先創建一個離屏的canvas,預先在這個canvas完成這一幀要繪制的所有動作,最后一次性的把這個離屏canvas繪制到上屏canvas中。
          • 避免阻塞 由于我們需要保證16.67ms就要完成一次幀的繪制,如果這一幀里,邏輯運算時間超過16ms怎么辦?那就一定會卡幀了。 我們可以使用webworker之類的技術,把耗時的邏輯計算在另一個線程執行,或者把任務進行拆解,降低每幀的耗時。

          當然還有很多其他更多的技巧和手段來提升canvas的性能,在這樣的情況下如果我們直接使用canvas去開發一個游戲,還會面臨比如碰撞算法、物理系統之類的問題。 所以,如果只用canvas去開發游戲,就如同你在吃雞游戲里,只拿了一把平底鍋,你怎么和別人正面剛?

          所以,我們需要一把98K把自己武裝起來,那就是使用游戲引擎開發。

          2. 為什么選擇Laya?

          目前支持微信小游戲的引擎,有Cocos,Egret,Laya,我們先看下三者的功能比較:

          從各種支持度上來講,laya是目前支持度最好的,也據laya側的宣傳,他的性能也是最高的。(關于性能的問題,因外部水軍比較多,在沒有做實際詳細測試前,暫時不發表評價。)

          在公司內部,都有三種引擎的游戲實現,下面是截止5月份的公開數據的引擎占比:

          其實三個引擎都提供了很好的支持度,一般來說,如果原先使用過Cocos實現過APP端游戲要移植到微信小游戲端來的,使用Cocos是最好的選擇,如果是從頭開發一款小游戲,那還是在Egret和Laya里選擇一款吧!

          3. Laya 環境搭建

          前面講了那么多,都還只是前戲,只是為了大家對游戲的開發有個初步的了解,從這一節開始我們就進入正題了。

          到 https://www.layabox.com/ 去下載最新的版本,并進行安裝。目前有1.X版本和2.0版本。(本文使用1.7.20版本做示例)

          然后就可以創建一個新的游戲項目了,我們可以現在選擇創建一個UI示例項目

          [ 創建新工程 ]

          3.1 代碼模式

          當然就是給你寫代碼的地方,感覺這個編輯器,就是在VSCode的基礎上改的。連最頂上的Code標識都還在。也因為這樣,所以才能很好的支持TypeScript。

          [ 代碼模式布局 ]

          為什么要使用TypeScript? 本文不詳細展開比較,只需要了解TypeScript 是Javascript的超集,因為多了個“Type”表示他支持強類型,并且由于靜態類型化,在寫代碼的時候編輯器就能提示你的錯誤,所以更適合開發游戲這種邏輯復雜的應用就好了。當然最終TypeScript還是會像ES6一樣,被編譯成普通的Javascript執行。但是在開發階段管理代碼來說,已經可以駕馭大型項目了。

          3.2 設計模式

          就是用來設計UI界面的地方,拖拖拽拽就可以把游戲頁面整出來。Laya提供了好多組件,如果有需要的可以使用,當然也可以不用他的組件,自己搞自己的自定義組件。

          [ 設計模式布局 ]

          4. Laya的HelloWorld

          都說作為一個程序員,買來文房四寶之后,寫下的第一行字,一定是“Hello World”。(我拿著公司剛發的 20周年LAMY紀念鋼筆,寫的第一行字,居然也是“Hello World”,汗~~~)

          4.1 游戲初始化

          4.1.1.GameMain.ts

          首先刪掉系統剛才默認的文件“LayaUISample.ts”,然后新建文件GameMain.ts

          import WebGL=Laya.WebGL;
          class GameMain { 
           constructor() {
           //TS或JS版本初始化微信小游戲的適配
           Laya.MiniAdpter.init(true,false); 
           //初始化布局大小
           Laya.init(375,667, WebGL);
           
           //布局方式設定
           Laya.stage.scaleMode=Laya.Stage.SCALE_SHOWALL;
           Laya.stage.screenMode=Laya.Stage.SCREEN_VERTICAL;
           Laya.stage.alignV=Laya.Stage.ALIGN_CENTER;
           Laya.stage.alignH=Laya.Stage.ALIGN_CENTER;
           }
          }
          new GameMain();
          

          Laya.MiniAdpter.init()是Laya提供的對小游戲提供的適配,因為在小程序&小游戲環境下,并沒有Bom和DomAPI,比如,沒有window,document, 所以需要這樣一個適配器,對小游戲的開發方式,進行兼容。

          4.1.2. bin/index.html

          修改bin目錄下的index.html ,刪掉LayaUISample.ts的引用,改為下面的方式:

          <!--啟動類添加到這里-->
          <!--jsfile--Main-->
          <script src="js/GameMain.js"></script>
          <!--jsfile--Main-->
          

          在index.html里,提供了很多Laya的類庫,這些類庫,最終會被打包成合并一個code.js. 因為微信小游戲的體積限制,我們不需要把所有的庫都加載進來,只選擇我們需要的庫就好了,用不到的可以都刪除。

          4.1.3. run

          接下來,點擊運行,就會出現模擬器界面了。

          [ 運行模擬器 ]

          先別管黑乎乎的一團,下面我們就要增加“Hello World”了。

          4.2 繪制文字

          4.2.1. Laya.Text

          再次修改GameMain的代碼如下,重點是var txt:Laya.Text=new Laya.Text();

          import WebGL=Laya.WebGL;
          class GameMain {
           constructor() { 
           //TS或JS版本初始化微信小游戲的適配
           Laya.MiniAdpter.init(true,false); 
           
           
           //初始化布局大小
           Laya.init(375,667, WebGL); 
           //布局方式設定
           Laya.stage.scaleMode=Laya.Stage.SCALE_SHOWALL;
           Laya.stage.screenMode=Laya.Stage.SCREEN_VERTICAL;
           Laya.stage.alignV=Laya.Stage.ALIGN_CENTER;
           Laya.stage.alignH=Laya.Stage.ALIGN_CENTER;
           //創建Text對象
           var txt:Laya.Text=new Laya.Text(); 
           
           //給Text的屬性賦值
           txt.text="Hello World";//設定文字內容
           txt.color="#ffffff"; //設定顏色
           txt.fontSize=20; //設定字體大小
           txt.pos(100,200); //設定位置
           //將Text對象添加到舞臺
           Laya.stage.addChild(txt);
           }
          }
          new GameMain();
          

          在上面的代碼中,我們給Stage舞臺上,添加了Text對象,然后點擊運行

          啊哦,傳說中的HelloWorld終于出現了

          4.3 繪制圖片

          4.3.1 loadImage

          Laya的Sprite提供了一個非常簡單的loadImage方法,可以即時加載圖片并加載到舞臺上。

          //設置舞臺背景色
           Laya.stage.bgColor="#1e83e8";
          //創建img Sprite精靈
          var img:Laya.Sprite=new Laya.Sprite();
          //加載顯示圖片,坐標位于100,50,并設置寬高 130*108
          img.loadImage("demo/paratrooper.jpg",100,50,130,108);
          //把圖片添加到舞臺
          Laya.stage.addChild(img);
          

          預覽如下,是不是很簡單?

          但是這個方法,其實并不實用,在真實項目中,一般會有很多圖片,我們不會一張一張圖片的去加載,而是預先加載好,再去顯示圖片。也就是我們常常在游戲主界面看到的進度條,其實就是在加載資源。

          4.3.2 資源預加載

          Laya提供一個資源加載器:Laya.loader ,來解決加載的問題。我們把上面的代碼再修改下,實現先加載完圖片,然后再繪制圖片。

          private imgPath1:string="demo/paratrooper.jpg";
          private imgPath2:string="demo/shell.jpg";
          constructor() {
           //.....省略N行代碼
           this.renderImage();
           //....省略N行代碼
          }
          renderImage():void{ 
           //定義圖片路徑集合
           var resArray=[
           {url:this.imgPath1,type:Laya.Loader.IMAGE},
           {url:this.imgPath2,type:Laya.Loader.IMAGE}
           ]
          //使用加載器加載圖片路徑
          Laya.loader.load(resArray,Laya.Handler.create(this,this.onLoadComplete),Laya.Handler.create(this,this.onLoadProgress))
          }
          //加載完成后,把圖片繪制到畫布上
          onLoadComplete():void{
           console.log("加載完成"); 
           var img1:Laya.Sprite=new Laya.Sprite();
           img1.graphics.drawTexture(Laya.loader.getRes(this.imgPath1),100,50,100,100);
           Laya.stage.addChild(img1);
           var img2:Laya.Sprite=new Laya.Sprite();
           img2.graphics.drawTexture(Laya.loader.getRes(this.imgPath2),100,300,100,100);
           Laya.stage.addChild(img2);
           }
          //這里可以獲取到加載的進度,以后可以制作進度條
          onLoadProgress(percent:number):void{
           console.log("percent->"+percent);
          }
          

          4.3.3 圖集

          只是預加載圖片還不夠,實際場景由于有很多小圖片,所以我們可以把這些小圖片拼合成圖集,這就類似在前端在做性能優化的有時候所使用的css sprite精靈圖,這樣制作成圖集,不但加載性能更高,而且也更便于制作幀動畫。

          圖集的加載類似這樣:

          var resArray=[
           {url:"res/atlas/demo.atlas",type:Laya.Loader.ATLAS},
           ]
           Laya.loader.load(resArray,Laya.Handler.create(this,this.onLoadComplete),Laya.Handler.create(this,this.onLoadProgress))
          

          和之前的圖片加載時Laya.Loader.IMAGE不同的是,type變成了Laya.Loader.ATLAS。

          那圖集怎么制作呢?還有,大量的游戲界面,真的就靠手動一張圖片一張圖片的顯示嗎? 當然不!因為我們接下來該了解下UI編輯器了。

          5. UI編輯器

          UI編輯器,當然是用來編輯UI的,大多數的客戶端程序開發環境,都有類似的UI編輯器。點擊左側的

          圖標,進入UI編輯器模式,如下圖:

          具體UI編輯器的功能介紹,建議還是看官方文檔,這里就不贅述了。

          5.1創建UI

          因為我們創建的是默認UI項目,所以UI編輯器里,有一個TestPage.ui,可以不用管他,我們創建一個自己的UI。 點擊 文件->新建文件

          進入新建頁面窗口,頁面類型有View 和Dialog兩種,因為這里我們做的是整個頁面,所以選View。如果你有興趣去看源碼,其實Dialog也是基于View實現的,只不過多了Dialog的一些特性。

          如果對這個view后面還有邏輯代碼要寫,建議勾選“創建邏輯類”,這樣就會自動在View目錄下自動創建一個和UI對應的GamePage.ts

          [ 新建頁面UI ]

          5.2 導入資源

          在assets目錄下,新建一個demo資源目錄,把需要的圖片都扔進去,然后在UI編輯器的資源面板最下方找找到刷新按鈕

          ,新增資源圖片后,一定要記得點下刷新,否則資源面板的內容不會自動刷新。

          只要是demo文件下的圖片,都會被自動打包成圖集,路徑就是 res/atlas/demo.atlas。 不知道有沒有同學發現,在上面的圖片中,有部分資源顯示“不打包”,這是什么原因的?

          點擊文件-》項目設置,我們會看到圖集限制了能被打入圖集的單圖的最大寬高,和最終圖集的最大寬高,默認標準可以自行修改。超過這個圖集標準的圖片,就不會打包到圖集中去,就需要手動加載了。

          [ 請在這里填寫圖片描述 ]

          5.3 編輯UI

          編輯頁面功能,會用ppt的,應該都會用了,拖個圖片誰不會?直接把資源管理器的圖片,拖到右側場景編輯器里。這次我們拖了一個藍天白云的背景,并在最下方放了一個大炮,看起來還有點意思。

          頂部有一排圖標,是用來協助對齊圖片用的,提供了頂部對齊,底部對齊,左對齊,右對齊,中線對齊等等,如果圖片很多,用這個對齊就很方便了。

          右側的屬性欄,就比較常用了。 var這里,你可以給你拖進來的圖片組件,給個變量名,這個變量名,最后會在之前自動生成的邏輯類里用到。我們把大炮定個變量名“pao”,后面會用到;x,y,width,height這里,就是坐標和寬高,就不用多說了吧?

          5.4 導出UI

          UI做好以后,有個重要的工作,就是千萬別忘記導出。很多初學者,經常會忘記這點。導出UI,才會重新生成圖集和UI相關設置。

          導出以后,我們看laya/pages/GamePage.ui 文件,不用管里面的詳細內容,里面就是剛才我們拖拽圖片,自動生成的響應配置文件。

          5.5 使用UI

          下面我們要把剛才編輯的GamePage顯示出來,那就回過頭來,再次修改GameMain.ts

          class GameMain {
           //定義靜態變量 gamePageView
           public static gamePageView:view.GamePage;
           
           constructor() {
           //...
           this.renderImage();
           //...
           }
           renderImage():void{ 
           //資源加載
           var resArray=[
           {url:"res/atlas/demo.atlas",type:Laya.Loader.ATLAS},
           ]
           Laya.loader.load(resArray,Laya.Handler.create(this,this.onLoadComplete),Laya.Handler.create(this,this.onLoadProgress))
           }
           onLoadComplete():void{
           //初始化view 
           GameMain.gamePageView=new view.GamePage(); 
           //添加到舞臺
           Laya.stage.addChild(GameMain.gamePageView);
           }
          }
          new GameMain();
          

          運行一下,主界面游戲背景,和大炮都已經架設好了,好的開端,就是成功的一半了。

          接下來,根據最初的牛逼策劃,我們要像pubgm一樣,讓傘兵從天下掉下來,怎么實現?接著看動畫部分吧!


          主站蜘蛛池模板: 波多野结衣中文字幕一区| 国产一区精品视频| 精品福利视频一区二区三区 | 久久99精品免费一区二区| 日韩在线观看一区二区三区| 国产麻豆剧果冻传媒一区| 一区二区在线播放视频| 亚洲一区二区三区AV无码| 亚洲av乱码中文一区二区三区 | 日本一区二区三区不卡视频中文字幕| 日本精品夜色视频一区二区| 日韩免费无码一区二区三区| 精品一区二区三区电影| 亚洲性无码一区二区三区| 国产精品福利区一区二区三区四区| 亚洲国产美国国产综合一区二区 | 国内精品视频一区二区八戒| 一区二区在线视频免费观看| 怡红院一区二区三区| 91秒拍国产福利一区| 日韩一区二区久久久久久| 欲色影视天天一区二区三区色香欲 | 亚洲国产av一区二区三区| 亚洲av成人一区二区三区在线播放| 午夜福利一区二区三区高清视频| 国产无吗一区二区三区在线欢| 一区二区和激情视频| 99久久精品日本一区二区免费| 人妻AV中文字幕一区二区三区| 中文人妻无码一区二区三区| 中文字幕人妻丝袜乱一区三区| 中文字幕一区在线播放| 国产伦精品一区二区三区视频猫咪| 日韩av片无码一区二区三区不卡 | 色老头在线一区二区三区| 日韩人妻精品无码一区二区三区| 国产一区麻豆剧传媒果冻精品| 国产在线精品一区二区在线观看| 中文字幕精品一区| 中文字幕日本精品一区二区三区| 色欲综合一区二区三区|