老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

html52048,html2048代碼

2048游戲鏈接地址。

如果你是安卓用戶,這是我個人收集的全部2048信息,望采納

網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、小程序制作、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了玉樹免費建站歡迎大家使用!

360:

可以保存的2048 (SL大法)

2048六邊形 (= =! 和正方形感覺不一樣,很難死)

安智

(六邊形)

5X5 2048(更加時間殺手)

元素周期表 (學霸必備,本學渣淚目 T T)

海外黨の福利 (google play):

普通帶保存(還是SL)

斐波那契(for 數學愛好者)

5X5

用html5怎么實現2048

網頁版的2048?,我寫過

在慕課網上有教的,先講的就是思想

如何通過js HTML5上傳示例代碼

HTML5版本,只要支持HTML5的瀏覽器都可以正常使用,并對觸摸屏(手機,平板)進行了優化

IE9+ Firefox Chrome Opera

Safari IPhone4 iPad2 Android 2.1CFUpdate HTML5版本,只要支持HTML5的瀏覽器都可以正常使用,并對觸摸屏(手機,平板)進行了優化

IE9+ Firefox

Chrome Opera Safari IPhone4 iPad2 Android 2.1

如何將HTML5性能發揮到極致

第1節:代碼執行基本原理

LayaAir

引擎支持AS3、TypeScript、JavaScript三種語言開發,然而無論是采用哪種開發語言,最終執行的都是JavaScript代碼。所有

看到的畫面都是通過引擎繪制出來的,更新頻率取決于開發者指定的FPS,例如指定幀頻率為60FPS,則運行時每個幀的執行時間為六十分之一秒,所以幀速

越高,視覺上感覺越流暢,60幀是滿幀。

由于實際運行環境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會達到,所以這部分不是開發者能夠決定的,開發者能作的是盡可能通過優化,在低端設備或低性能瀏覽器中,提升FPS幀速。

LayaAir引擎在每幀都會重繪,在性能優化時,除了關注每幀執行邏輯代碼帶來的CPU消耗,還需要注意每幀調用繪圖指令的數量以及GPU的紋理提交次數。

第2節:基準測試

LayaAir引擎內置的性能統計工具可用于基準測試,實時檢測當前性能。開發者可以使用laya.utils.Stat類,通過Stat.show() 顯示統計面板。具體編寫代碼如下例所示:

?

1

2

Stat.show(0,0); //AS3的面板調用寫法

Laya.Stat.show(0,0); //TS與JS的面板調用寫法

Canvas渲染的統計信息:

WebGL渲染的統計信息:

統計參數的意義:

FPS:

每秒呈現的幀數(數字越高越好)。

使用canvas渲染時,描述字段顯示為FPS(Canvas),使用WebGL渲染時,描述字段顯示為FPS(WebGL)。

Sprite:

渲染節點數量(數字越低越好)。

Sprite統計所有渲染節點(包括容器),這個數字的大小會影響引擎節點遍歷,數據組織和渲染的次數。

DrawCall:

DrawCall在canvas和WebGL渲染下代表不同的意義(越少越好)。

Canvas下表示每幀的繪制次數,包括圖片、文字、矢量圖。盡量限制在100之下。

WebGL

下表示渲染提交批次,每次準備數據并通知GPU渲染繪制的過程稱為1次DrawCall,在每1次DrawCall中除了在通知GPU的渲染上比較耗時之

外,切換材質與shader也是非常耗時的操作。 DrawCall的次數是決定性能的重要指標,盡量限制在100之下。

Canvas:

三個數值 —— 每幀重繪的畫布數量 / 緩存類型為“normal”類型的畫布數量 / 緩存類型為“bitmap”類型的畫布數量”。

CurMem:僅限WebGL渲染,表示內存與顯存占用(越低越好)。

Shader:僅限WebGL渲染,表示每幀Shader提交次數。

無論是Canvas模式還是WebGL模式,我們都需要重點關注DrawCall,Sprite,Canvas這三個參數,然后針對性地進行優化。(參見“圖形渲染性能”)

第3節:內存優化

對象池

對象池,涉及到不斷重復使用對象。在初始化應用程序期間創建一定數量的對象并將其存儲在一個池中。對一個對象完成操作后,將該對象放回到池中,在需要新對象時可以對其進行檢索。

由于實例化對象成本很高,使用對象池重用對象可減少實例化對象的需求。還可以減少垃圾回收器運行的機會,從而提高程序的運行速度。

以下代碼演示使用

Laya.utils.Pool:

?

1

2

3

4

5

6

7

8

9

10

11

12

ar SPRITE_SIGN = 'spriteSign';

var sprites = [];

function initialize()

{

for (var i = 0; i 1000; i++)

{

var sp = Pool.getItemByClass(SPRITE_SIGN, Sprite)

sprites.push(sp);

Laya.stage.addChild(sp);

}

}

initialize();

在initialize中創建大小為1000的對象池。

以下代碼在當單擊鼠標時,將刪除顯示列表中的所有顯示對象,并在以后的其他任務中重復使用這些對象:

?

1

2

3

4

5

6

7

8

9

10

Laya.stage.on("click", this, function()

{

var sp;

for(var i = 0, len = sprites.length; i len; i++)

{

sp = sprites.pop();

Pool.recover(SPRITE_SIGN, sp);

Laya.stage.removeChild(sp);

}

});

調用Pool.recover后,指定的對象會被回收至池內。

使用Handler.create

在開發過程中,會經常使用Handler來完成異步回調。Handler.create使用了內置對象池管理,因此在使用Handler對象時應使用Handler.create來創建回調處理器。以下代碼使用Handler.create創建加載的回調處理器:

?

1

Laya.loader.load(urls, Handler.create(this, onAssetLoaded));

在上面的代碼中,回調被執行后Handler將會被對象池收回。此時,考慮如下代碼會發生什么事:

?

1

Laya.loader.load(urls, Handler.create(this, onAssetLoaded), Handler.create(this, onLoading));

在上面的代碼中,使用Handler.create返回的處理器處理progress事件。此時的回調執行一次之后就被對象池回收,于是progress事件只觸發了一次,此時需要將四個名為once的參數設置為false:

?

1

Laya.loader.load(urls, Handler.create(this, onAssetLoaded), Handler.create(this, onLoading, null, false));

釋放內存

JavaScript運行時無法啟動垃圾回收器。要確保一個對象能夠被回收,請刪除對該對象的所有引用。Sprite提供的destory會幫助設置內部引用為null。

例如,以下代碼確保對象能夠被作為垃圾回收:

?

1

2

var sp = new Sprite();

sp.destroy();

當對象設置為null,不會立即將其從內存中刪除。只有系統認為內存足夠低時,垃圾回收器才會運行。內存分配(而不是對象刪除)會觸發垃圾回收。

圾回收期間可能占用大量CPU并影響性能。通過重用對象,嘗試限制使用垃圾回收。此外,盡可能將引用設置為null,以便垃圾回收器用較少時間來查找對

象。有時(比如兩個對象相互引用),無法同時設置兩個引用為null,垃圾回收器將掃描無法被訪問到的對象,并將其清除,這會比引用計數更消耗性能。

資源卸載

游戲運行時總會加載許多資源,這些資源在使用完成后應及時卸載,否則一直殘留在內存中。

下例演示加載資源后對比資源卸載前和卸載后的資源狀態:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

var assets = [];

assets.push("res/apes/monkey0.png");

assets.push("res/apes/monkey1.png");

assets.push("res/apes/monkey2.png");

assets.push("res/apes/monkey3.png");

Laya.loader.load(assets, Handler.create(this, onAssetsLoaded));

function onAssetsLoaded()

{

for(var i = 0, len = assets.length; i len; ++i)

{

var asset = assets[i];

console.log(Laya.loader.getRes(asset));

Laya.loader.clearRes(asset);

console.log(Laya.loader.getRes(asset));

}

}

關于濾鏡、遮罩

嘗試盡量減少使用濾鏡效果。將濾鏡(BlurFilter和GlowFilter)應用于顯示對象時,運行時將在內存中創建兩張位圖。其中每個位圖的大小與顯示對象相同。將第一個位圖創建為顯示對象的柵格化版本,然后用于生成應用濾鏡的另一個位圖:

應用濾鏡時內存中的兩個位圖

當修改濾鏡的某個屬性或者顯示對象時,內存中的兩個位圖都將更新以創建生成的位圖,這兩個位圖可能會占用大量內存。此外,此過程涉及CPU計算,動態更新時將會降低性能(參見“圖形渲染性能 – 關于cacheAs)。

ColorFiter在Canvas渲染下需要計算每個像素點,而在WebGL下的GPU消耗可以忽略不計。

最佳的做法是,盡可能使用圖像創作工具創建的位圖來模擬濾鏡。避免在運行時中創建動態位圖,可以幫助減少CPU或GPU負載。特別是一張應用了濾鏡并且不會在修改的圖像。

第4節:圖形渲染性能

優化Sprite

1.盡量減少不必要的層次嵌套,減少Sprite數量。

2.非可見區域的對象盡量從顯示列表移除或者設置visible=false。

3.對于容器內有大量靜態內容或者不經常變化的內容(比如按鈕),可以對整個容器設置cacheAs屬性,能大量減少Sprite的數量,顯著提高性能。如果有動態內容,最好和靜態內容分開,以便只緩存靜態內容。

4.Panel內,會針對panel區域外的直接子對象(子對象的子對象判斷不了)進行不渲染處理,超出panel區域的子對象是不產生消耗的。

優化DrawCall

1.對復雜靜態內容設置cacheAs,能大量減少DrawCall,使用好cacheAs是游戲優化的關鍵。

2.盡量保證同圖集的圖片渲染順序是挨著的,如果不同圖集交叉渲染,會增加DrawCall數量。

3.盡量保證同一個面板中的所有資源用一個圖集,這樣能減少提交批次。

優化Canvas

在對Canvas優化時,我們需要注意,在以下場合不要使用cacheAs:

1.對象非常簡單,比如一個字或者一個圖片,設置cacheAs=bitmap不但不提高性能,反而會損失性能。

2.容器內有經常變化的內容,比如容器內有一個動畫或者倒計時,如果再對這個容器設置cacheAs=bitmap,會損失性能。

可以通過查看Canvas統計信息的第一個值,判斷是否一直在刷新Canvas緩存。

關于cacheAs

置cacheAs可將顯示對象緩存為靜態圖像,當cacheAs時,子對象發生變化,會自動重新緩存,同時也可以手動調用reCache方法更新緩存。

建議把不經常變化的復雜內容,緩存為靜態圖像,能極大提高渲染性能,cacheAs有”none”,”normal”和”bitmap”三個值可選。

默認為”none”,不做任何緩存。

2.當值為”normal”時,canvas下進行畫布緩存,webgl模式下進行命令緩存。

3.

當值為”bitmap”時,canvas下進行依然是畫布緩存,webGL模式下使用renderTarget緩存。這里需要注意的是,webGL下

renderTarget緩存模式有2048大小限制,超出2048會額外增加內存開銷。另外,不斷重繪時開銷也比較大,但是會減少drawcall,渲

染性能最高。 webGL下命令緩存模式只會減少節點遍歷及命令組織,不會減少drawcall,性能中等。

設置cacheAs后,還可以設置staticCache=true以阻止自動更新緩存,同時可以手動調用reCache方法更新緩存。

cacheAs主要通過兩方面提升性能。一是減少節點遍歷和頂點計算;二是減少drawCall。善用cacheAs將是引擎優化性能的利器。

下例繪制10000個文本:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

Laya.init(550, 400, Laya.WebGL);

Laya.Stat.show();

var textBox = new Laya.Sprite();

var text;

for (var i = 0; i 10000; i++)

{

text = new Laya.Text();

text.text = (Math.random() * 100).toFixed(0);

text.color = "#CCCCCC";

text.x = Math.random() * 550;

text.y = Math.random() * 400;

textBox.addChild(text);

}

Laya.stage.addChild(textBox);

下面是筆者電腦上的運行時截圖,FPS穩定于52上下。

當我們對文字所在的容器設置為cacheAs之后,如下面的例子所示,性能獲得較大的提升,FPS達到到了60幀。

?

1

2

// …省略其他代碼… var textBox = new Laya.Sprite();

textBox.cacheAs = "bitmap"; // …省略其他代碼…

文字描邊

在運行時,設置了描邊的文本比沒有描邊的文本多調用一次繪圖指令。此時,文本對CPU的使用量和文本的數量成正比。因此,盡量使用替代方案來完成同樣的需求。

對于幾乎不變動的文本內容,可以使用cacheAs降低性能消耗,參見“圖形渲染性能 - 關于cacheAs”。

對于內容經常變動,但是使用的字符數量較少的文本域,可以選擇使用位圖字體。

跳過文本排版,直接渲染

大多數情況下,很多文本都不需要復雜的排版,僅僅簡單地顯示一行字。為了迎合這一需求,Text提供的名為changeText的方法可以直接跳過排版。

?

1

2

3

4

5

var text = new Text();

text.text = "text";

Laya.stage.addChild(text);

//后面只是更新文字內容,使用changeText能提高性能

text.changeText("text changed.");

Text.changeText會直接修改繪圖指令中該文本繪制的最后一條指令,這種前面的繪圖指令依舊存在的行為會導致changeText只使用于以下情況:

文本始終只有一行。

文本的樣式始終不變(顏色、粗細、斜體、對齊等等)。

即使如此,實際編程中依舊會經常使用到這樣的需要。

第5節:減少CPU使用量

減少動態屬性查找

JavaScript中任何對象都是動態的,你可以任意地添加屬性。然而,在大量的屬性里查找某屬性可能很耗時。如果需要頻繁使用某個屬性值,可以使用局部變量來保存它:

?

1

2

3

4

5

6

7

8

function foo()

{

var prop = target.prop;

// 使用prop

process1(prop);

process2(prop);

process3(prop);

}

計時器

LayaAir提供兩種計時器循環來執行代碼塊。

Laya.timer.frameLoop執行頻率依賴于幀頻率,可通過Stat.FPS查看當前幀頻。

Laya.timer.loop執行頻率依賴于參數指定時間。

當一個對象的生命周期結束時,記得清除其內部的Timer:

?

1

2

3

4

5

6

Laya.timer.frameLoop(1, this, animateFrameRateBased);

Laya.stage.on("click", this, dispose);

function dispose()

{

Laya.timer.clear(this, animateFrameRateBased);

}

獲取顯示對象邊界的做法

在相對布局中,很經常需要正確地獲取顯示對象的邊界。獲取顯示對象的邊界也有多種做法,而其間差異很有必要知道。

1.使用getBounds/ getGraphicBounds。、

?

1

2

3

4

var sp = new Sprite();

sp.graphics.drawRect(0, 0, 100, 100, "#FF0000");

var bounds = sp.getGraphicBounds();

Laya.stage.addChild(sp);

getBounds可以滿足多數多數需求,但由于其需要計算邊界,不適合頻繁調用。

2.設置容器的autoSize為true。

?

1

2

3

4

var sp = new Sprite();

sp.autoSize = true;

sp.graphics.drawRect(0, 0, 100, 100, "#FF0000");

Laya.stage.addChild(sp);

上述代碼可以在運行時正確獲取寬高。autoSize在獲取寬高并且顯示列表的狀態發生改變時會重新計算(autoSize通過getBoudns計算寬高)。所以對擁有大量子對象的容器應用autoSize是不可取的。如果設置了size,autoSize將不起效。

使用loadImage后獲取寬高:

?

1

2

3

4

5

6

var sp = new Sprite();

sp.loadImage("res/apes/monkey2.png", 0, 0, 0, 0, Handler.create(this, function()

{

console.log(sp.width, sp.height);

}));

Laya.stage.addChild(sp);

loadImage在加載完成的回調函數觸發之后才可以正確獲取寬高。

3.直接調用size設置:

?

1

2

3

4

5

6

7

8

Laya.loader.load("res/apes/monkey2.png", Handler.create(this, function()

{

var texture = Laya.loader.getRes("res/apes/monkey2.png");

var sp = new Sprite();

sp.graphics.drawTexture(texture, 0, 0);

sp.size(texture.width, texture.height);

Laya.stage.addChild(sp);

}));

使用Graphics.drawTexture并不會自動設置容器的寬高,但是可以使用Texture的寬高賦予容器。毋庸置疑,這是最高效的方式。

注:getGraphicsBounds用于獲取矢量繪圖寬高。

根據活動狀態改變幀頻

幀頻有三種模式,Stage.FRAME_SLOW維持FPS在30;Stage.FRAME_FAST維持FPS在60;Stage.FRAME_MOUSE則選擇性維持FPS在30或60幀。

有時并不需要讓游戲以60FPS的速率執行,因為30FPS已經能夠滿足多數情況下人類視覺的響應,但是鼠標交互時,30FPS可能會造成畫面的不連貫,于是Stage.FRAME_MOUSE應運而生。

下例展示以Stage.FRAME_SLOW的幀率,在畫布上移動鼠標,使圓球跟隨鼠標移動:

?

1

2

3

4

5

6

7

8

9

10

11

12

Laya.init(Browser.width, Browser.height);

Stat.show();

Laya.stage.frameRate = Stage.FRAME_SLOW;

var sp = new Sprite();

sp.graphics.drawCircle(0, 0, 20, "#990000");

Laya.stage.addChild(sp);

Laya.stage.on(Event.MOUSE_MOVE, this, function()

{

sp.pos(Laya.stage.mouseX, Laya.stage.mouseY);

});

此時FPS顯示30,并且在鼠標移動時,可以感覺到圓球位置的更新不連貫。設置Stage.frameRate為Stage.FRAME_MOUSE:

?

1

Laya.stage.frameRate = Stage.FRAME_MOUSE;

此時在鼠標移動后FPS會顯示60,并且畫面流暢度提升。在鼠標靜止2秒不動后,FPS又會恢復到30幀。

使用callLater

callLater使代碼塊延遲至本幀渲染前執行。如果當前的操作頻繁改變某對象的狀態,此時可以考慮使用callLater,以減少重復計算。

考慮一個圖形,對它設置任何改變外觀的屬性都將導致圖形重繪:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

var rotation = 0,

scale = 1,

position = 0;

function setRotation(value)

{

this.rotation = value;

update();

}

function setScale(value)

{

this.scale = value;

update();

}

function setPosition(value)

{

this.position = value;

update();

}

function update()

{

console.log('rotation: ' + this.rotation + '\tscale: ' + this.scale + '\tposition: ' + position);

}

調用以下代碼更改狀態:

?

1

setRotation(90); setScale(2); setPosition(30);

控制臺的打印結果是

rotation: 90 scale: 1 position: 0

rotation: 90 scale: 2 position: 0

rotation: 90 scale: 2 position: 30

update被調用了三次,并且最后的結果是正確的,但是前面兩次調用都是不需要的。

嘗試將三處update改為:

?

1

Laya.timer.callLater(this, update);

此時,update只會調用一次,并且是我們想要的結果。

圖片/圖集加載

在完成圖片/圖集的加載之后,引擎就會開始處理圖片資源。如果加載的是一張圖集,會處理每張子圖片。如果一次性處理大量的圖片,這個過程可能會造成長時間的卡頓。

在游戲的資源加載中,可以將資源按照關卡、場景等分類加載。在同一時間處理的圖片越少,當時的游戲響應速度也會更快。在資源使用完成后,也可以予以卸載,釋放內存。

第6節:其他優化策略

減少粒子使用數量,在移動平臺Canvas模式下,盡量不用粒子;

2.在Canvas模式下,盡量減少旋轉,縮放,alpha等屬性的使用,這些屬性會對性能產生消耗。(在WebGL模式可以使用);

3.不要在timeloop里面創建對象及復雜計算;

4.盡量減少對容器的autoSize的使用,減少getBounds()的使用,因為這些調用會產生較多計算;

5.盡量少用try catch的使用,被try catch的函數執行會變得非常慢;

怎樣做好一個基于微信傳播的 HTML5 互動頁面或游戲

從游戲流程設計來說:

1. 玩法:

游戲玩法要簡單,易上手,初期參與成本低,方便用戶學習和參與。這里說的簡單,不等于單一,用戶如果沒有付出任何成本就得到了xx稱號(比如大轉盤)則缺少成就感和挑戰的必要,也很難產生分享意愿;

游戲時間要短,兩三分鐘足矣。用戶用閑暇碎片時間瀏覽朋友圈,不帶預期地點擊url進入游戲,并沒有留給游戲太多時間,基于H5頁面的游戲也不能承載太多內容,用戶很快會覺得膩煩。如果用戶感到厭倦而游戲仍未結束,直接關閉了頁面,又怎么會分享呢?

游戲的可重復性要強,失敗隨時可以重來,滿足自我挑戰或好友間相互挑戰的需求。這里說的好友間相互挑戰可以很簡單,不一定要登錄系統,不一定要排行榜,我在朋友圈看到我的朋友得了x分,一定要比他高或者得到比他nb的文案就夠了。

當前熱門玩法舉例:神經貓,flappy bird,2048,別踩白塊,打靶,擦屏幕脫衣服,心理測試……

2. 游戲內部的引導分享:

分享到朋友圈,這可能是指望用戶在微信自傳播的唯一途徑了。微信把這個功能藏得很深,游戲開發者則有義務引導用戶分享出去。這不僅是視覺上加個懸浮箭頭讓用戶點點點的事,還需要能跟游戲整體流程、玩法強相關,此外,引導分享流程應該反復多次出現,因為游戲是可多次重復的,用戶獲得了滿意成績之后會更想分享出去。

現在H5游戲的常見做法,是在每盤游戲結束后略帶干擾的分享強提示,不評價好壞。

3. 分享到朋友圈的文案:

這是用戶分享的理由,也是新用戶點進來參與的理由。首先文案要吸引眼球,有傳播性,不一定要很俗很low很浮夸,最好能跟品牌相關,有自己的調性特點,當然還要注意字數限制和縮略圖的選擇;其次,文案應該是一組而非一個,每個人可以通過參與游戲獲得不同的分享文案,這是用戶在朋友圈看到此標題卻還愿意去分享的理由。

4. 品牌關聯性:

除非你只是想弄個H5頁面植入廣告,賺點廣告費;如果是為了品牌傳播,求求各位別拿產品圖做「別踩白塊」了,還是認真地想一些從玩法到設計,每一個環節都跟品牌強相關的小游戲吧,不然做它干啥?

如何把2048或圍住神經貓這樣的html5游戲放到微信公眾公眾號中被別人玩和分享?

需要利用到微信公眾號里的開發者文檔中的JS-SDK工具,具體使用,開發者文檔中有說明。


本文名稱:html52048,html2048代碼
文章分享:http://www.xueling.net.cn/article/dsegpod.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲一线产区二线产区精华 | 99福利影院 | 久久66热人妻偷产国产 | 天天拍拍天天干 | 日韩精品成人一区二区在线 | 性大片性大片免费 | 成人性生交A片免费网 | 久久一区二区精品视频 | 精品深夜AV无码一区二区 | 3ce奇米四色眼影奇米8888 | 国产久一 | 亚洲aaa视频| 女人被躁到高潮嗷嗷叫游戏 | 激情四射五月天婷婷 | 亚洲JIZZJIZZ中国少妇中文 | 少妇爆乳无码AV无码波霸 | 日本亚洲精品无码专区 | 蜜臀AV综合网 | 99有精品 | 欧美日韩中文在线 | 久久亚洲av成人无码国产最大 | 本av在线 | 日韩a无码av一区二区三区 | 日本亚洲欧洲精品 | 久久99精品一区二区三区 | 91国产在线视频在线观看 | 亚州日韩精品AV片无码中文 | 在线看片免费人成视频大全 | 人妻大胸奶水2 | 日韩精品一区二区三区视频网 | 国产精品久久影院 | 97在线免费观看视频 | 韩国理伦三级做爰观看向日葵 | 欧美一级二级三级乱码 | 老太婆性杂交欧美肥老太 | 国产成人精品一区二区在线小狼 | 亚洲黄色片免费观看 | 久久精品在线观看视频 | 日日夜夜狠狠 | 欧美成人精品 | 亚洲精品国品乱码久久久久 |