日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Box2D基础知识

發(fā)布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Box2D基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址

一、box2d基礎知識

1、關于

?Box2D 是一個用于游戲的 2D 剛體仿真庫。從游戲的視角來看,物理引擎就是一個程序性動畫(procedural?animation)的系統(tǒng),而不是由動畫師去移動你的物體。

1、核心概念?

形狀(shape)?:一個2D的幾何對象,例如圓或多邊形。

剛體(rigid?body)?:一塊十分堅硬的物質,它上面的任何兩點之間的距離都是完全不變的。它們就像鉆石那樣堅硬。在后面的討論中,我們用物體(body)來代替剛體。

固定裝置(fixture)fixture綁定一個形狀到物體,增加材料屬性,例如密度,摩擦,恢復。注:也有翻譯為"夾具","定制器"的

約束(constraint):一個約束(constraint)就是消除物體自由度的物理連接。在?2D?中,一個物體有?3?個自由度。如果我們把一個物體釘在墻上(像擺錘那樣),那我們就把它約束到了墻上。這樣,此物體就只能繞著這個釘子旋轉,所以這個約束消除了它?2?個自由度。

接觸約束(contact?constraint):一個防止剛體穿透,以及用于模擬摩擦(friction)和恢復(restitution)的特殊約束。你永遠都不必創(chuàng)建一個接觸約束,它們會自動被?Box2D?創(chuàng)建。

關節(jié)(joint):它是一種用于把兩個或多個物體固定到一起的約束。Box2D?支持的關節(jié)類型有:旋轉,棱柱,距離等等。關節(jié)可以支持限制(limits)和馬達(motors)

關節(jié)限制(joint?limit):一個關節(jié)限制限定了一個關節(jié)的運動范圍。例如人類的胳膊肘只能做某一范圍角度的運動。

關節(jié)馬達(joint?motor):一個關節(jié)馬達能依照關節(jié)的自由度來驅動所連接的物體。例如,你可以使用一個馬達來驅動一個肘的旋轉。

世界(world):一個物理世界就是物體,形狀和約束相互作用的集合。Box2D?支持創(chuàng)建多個世界,但這通常是不必要的。

解決器(solver)物理世界有一個解決器用來推進時間(advance?time)和解決接觸和關節(jié)約束。Box2D解決器是一個高效的迭代的解決器,它運行N次,N是約束的數(shù)目。

連續(xù)沖突(continuous?collision)解決器用分離的時間步推進物體。沒有它的介入,就會導致穿過(tunneling)。

Box2D包含專門的算法用來處理穿過。首先,collision算法為了找到第一時間的影響(TOI)可以篡改兩個物體的移動。其次,sub-stepping解決器,它移動物體到他第一時間影響,然后解決collision

?

模塊

Box2D由三個模塊組成:CommonCollisionDynamicsCommon模塊包含分配,數(shù)學和設置(settings)。Collision模塊定義形狀,broad-phasecollision函數(shù)/資料庫。最后Dynamics模塊提供仿真模擬世界,物體,固定裝置(fixtures)和關節(jié)。


?

?3、?創(chuàng)建一個世界

?每個 Box2D 程序都將從一個世界對象(world object)的創(chuàng)建開始。這是一個管理內(nèi)存,對象和模擬的中心。

要創(chuàng)建一個世界對象,我們首先需要定義一個世界的包圍盒。Box2D 使用包圍盒來加速碰撞檢測。尺寸并不關鍵,但合適的尺寸有助于性能。這個包圍盒過大總比過小好。 b2AABB?worldAABB;
worldAABB.lowerBound.Set(-100.0f,?-100.0f);
worldAABB.upperBound.Set(100.0f,?100.0f);? 接下來我們定義重力矢量。 b2Vec2?gravity(0.0f,?-10.0f);
bool?doSleep?=?true;?//當動態(tài)物體靜止時使它休眠,減少性能開銷

?現(xiàn)在我們創(chuàng)建世界對象。

b2World?world(worldAABB,?gravity,?doSleep);//在棧上創(chuàng)建world

那么現(xiàn)在我們有了自己的物理世界,讓我們再加些東西進去。

4、創(chuàng)建一個地面

?第一步,我們創(chuàng)建地面體。要創(chuàng)建它我們需要一個物體定義(body definition),通過物體定義我們來指定地面體的初始位置。

b2BodyDef?groundBodyDef;
groundBodyDef.position.Set(0.0f,?-10.0f);

?

?第二步,將物體定義傳給世界對象來創(chuàng)建地面體。世界對象并不保存到物體定義的引用。地面體是作為靜態(tài)物體(static body)創(chuàng)建的,靜態(tài)物體之間并沒有碰撞,它們是固定的。當一個物體具有零質量的時候 Box2D 就會確定它為靜態(tài)物體,物體的默認質量是零,所以它們默認就是靜態(tài)的。

b2Body*?ground?=?world.CreateBody(&groundBodyDef);

?

第三步,我們創(chuàng)建一個地面的多邊形定義。我們使用 SetAsBox 簡捷地把地面多邊形規(guī)定為一個盒子(矩形)形狀,盒子的中點就位于父物體的原點上。 b2PolygonDef?groundShapeDef;
groundShapeDef.SetAsBox(50.0f,?10.0f); 其中,SetAsBox 函數(shù)接收了半個寬度和半個高度,這樣的話,地面盒就是 100 個單位寬(x 軸)以及?20 個單位高(y 軸)。Box2D 已被調(diào)諧使用米,千克和秒來作單位,所以你可以用米來考慮長度。

?

?在第四步中,我們在地面體上創(chuàng)建地面多邊形,以完成地面體。

groundBody->CreateShape(&groundShapeDef);//創(chuàng)建形狀用于碰撞檢測等 5、?創(chuàng)建一個動態(tài)物體 首先我們用 CreateBody 創(chuàng)建物體。 b2BodyDef?bodyDef;
bodyDef.position.Set(0.0f,?4.0f);
b2Body*?body?=?world.CreateBody(&bodyDef);?

?

接下來我們創(chuàng)建并添加一個多邊形形狀到物體上。注意我們把密度設置為 1,默認的密度是 0。并且,形狀的摩擦設置到了 0.3。形狀添加好以后,我們就使用 SetMassFromShapes 方法來命令物體通過形狀去計算其自身的質量。這暗示了你可以給單個物體添加一個以上的形狀。如果質量計算結果為 0,那么物體會變成真正的靜態(tài)。

b2PolygonDef?shapeDef;

shapeDef.SetAsBox(1.0f,?1.0f);
shapeDef.density?=?1.0f;
shapeDef.friction?=?0.3f;
body->CreateShape(&shapeDef);
body->SetMassFromShapes();

?

?6、模擬(Box2D 的)世界

?

?我們已經(jīng)初始化好了地面盒和一個動態(tài)盒。現(xiàn)在我們只有少數(shù)幾個問題需要考慮。Box2D 中有一些數(shù)學代碼構成的積分器(integrator),積分器在離散的時間點上模擬物理方程,它將與游戲動畫循環(huán)一同運行。所以我們需要為 Box2D 選取一個時間步,通常來說游戲物理引擎需要至少?60Hz 的速度,也就是 1/60 的時間步。你可以使用更大的時間步,但是你必須更加小心地為你的世界調(diào)整定義。我們也不喜歡時間步變化得太大,所以不要把時間步關聯(lián)到幀頻(除非你真的必須這樣做)。直截了當?shù)?#xff0c;這個就是時間步:float32?timeStep?=?1.0f?/?60.0f;?

?除了積分器之外,Box2D 中還有約束求解器(constraint solver)。約束求解器用于解決模擬中的所有約束,一次一個。單個的約束會被完美的求解,然而當我們求解一個約束的時候,我們就會稍微耽誤另一個。要得到良好的解,我們需要迭代所有約束多次。建議的 Box2D 迭代次數(shù)是 10 次。你可以按自己的喜好去調(diào)整這個數(shù),但要記得它是速度與質量之間的平衡。更少的迭代會增加性能并降低精度,同樣地,更多的迭代會減少性能但提高模擬質量。這是我們選擇的迭代次數(shù):

?int32?iterations?=?10;//一個時間步遍歷10次約束

?

?現(xiàn)在我們可以開始模擬循環(huán)了,在游戲中模擬循環(huán)應該并入游戲循環(huán)。每次循環(huán)你都應該調(diào)用?b2World::Step,通常調(diào)用一次就夠了,這取決于幀頻以及物理時間步。

?這就是模擬 1 秒鐘內(nèi) 60 個時間步的循環(huán)

for?(int32?i?=?0;?i?<?60;?++i)
{
????world.Step(timeStep,?iterations);
}

?

?

?7、API 設計

?

單位

?

?Box2D 使用浮點數(shù),所以必須使用一些公差來保證它正常工作。這些公差已經(jīng)被調(diào)諧得適合米-千克-秒(MKS)單位。尤其是,Box2D 被調(diào)諧得能良好地處理 0.1 到 10 米之間的移動物體。這意味著從罐頭盒到公共汽車大小的對象都能良好地工作。?

? 注意:Box2D 已被調(diào)諧至 MKS 單位。移動物體的尺寸大約應該保持在 0.1 到 10 米之間。你可能需要一些縮放系統(tǒng)來渲染你的場景和物體。Box2D 中的例子是使用 OpenGL 的視口來變換的。

?

用戶數(shù)據(jù)

b2Shape,b2Body 和 b2Joint 類都允許你通過一個 void 指針來附加用戶數(shù)據(jù)。這在你測試 Box2D?數(shù)據(jù)結構,以及你想把它們聯(lián)系到自己的引擎中的時候是較方便的。舉個典型的例子,在角色上的剛體中附加到角色的指針,這就構成了一個循環(huán)引用。如果你有角色,你就能得到剛體。如果你有剛體,你就能得到角色。 GameActor*?actor?=?GameCreateActor();
b2BodyDef?bodyDef;
bodyDef.userData?=?actor;
actor->body?=?box2Dworld->CreateBody(&bodyDef); 這是一些需要用戶數(shù)據(jù)的案例:? ? 使用碰撞結果給角色施加傷害 ? 當玩家進入一個包圍盒時播放一段腳本事件 ? 當 Box2D 通知你一個關節(jié)即將摧毀時訪問一個游戲結構 記得用戶數(shù)據(jù)是可選的,并且能放入任何東西。然而,你需要保持一致性。例如,如果你想在一個物體中保存一個角色的指針,那你就應該在所有物體中都保存一個角色指針。不要在一個物體中保存角色指針,卻在另一個物體中保存一個其它指針。這可能會導致程序崩潰。?

?

8、世界?

?b2World 類包含著物體和關節(jié)。它管理著模擬的方方面面,并允許異步查詢(就像 AABB 查詢)。你與?Box2D 的大部分交互都將通過 b2World 對象來完成。

?要創(chuàng)建或摧毀一個世界你需要使用 new 和 delete:

b2World*?myWorld?=?new?b2World(aabb,?gravity,?doSleep);
//?...?do?stuff?...
delete?myWorld;

?世界類用于驅動模擬。你需要指定一個時間步和一個迭代次數(shù)。例如:

float32?timeStep?=?1.0f?/?60.f;
int32?iterationCount?=?10;
myWorld->Step(timeStep,?iterationCount);

?

?在時間步完成之后,你可以調(diào)查物體和關節(jié)的信息。最可能的情況是你會獲取物體的位置,這樣你才能更新你的角色并渲染它們。你可以在游戲循環(huán)的任何地方執(zhí)行時間步,但你應該意識到事情發(fā)生的順序。例如,如果你想要在一幀中得到新物體的碰撞結果,你必須在時間步之前創(chuàng)建物體。推薦使用固定的時間步。使用大一些的時間步你可以在低幀率的情況下提升性能。1/60 的時間步通常會呈現(xiàn)一個高質量的模擬。

??掃描世界:

世界就是一個物體和關節(jié)的容器。你可以獲取世界中所有物體和關節(jié)并遍歷它們。例如,這段代碼會喚醒世界中的所有物體: for?(b2Body*?b?=?myWorld->GetBodyList();?b;?b?=?b->GetNext())
{
????b->WakeUp();
}?

?

?AABB 查詢:

有時你需要求出一個區(qū)域內(nèi)的所有形狀。b2World 類為此使用了 broad-phase 數(shù)據(jù)結構,提供了一個 log(N) 的快速方法。你提供一個世界坐標的 AABB,而 b2World 會返回一個所有大概相交于此?AABB 的形狀之數(shù)組。這不是精確的,因為函數(shù)實際上返回那些 AABB 與規(guī)定之 AABB 相交的形狀。例如,下面的代碼找到所有大概與指定 AABB 相交的形狀并喚醒所有關聯(lián)的物體。 b2AABB?aabb;
aabb.minVertex.Set(-1.0f,?-1.0f);
aabb.maxVertex.Set(1.0f,?1.0f);
const?int32?k_bufferSize?=?10;
b2Shape?*buffer[k_bufferSize];
int32?count?=?myWorld->Query(aabb,?buffer,?k_bufferSize);
for?(int32?i?=?0;?i?<?count;?++i)
{
????buffer[i]->GetBody()->WakeUp();
}?

?

?9、?物體

?物體具有位置和速度。你可以應用力,扭矩和沖量到物體。物體可以是靜態(tài)的或動態(tài)的,靜態(tài)物體永遠不會移動,并且不會與其它靜態(tài)物體發(fā)生碰撞。物體是形狀的主干,物體攜帶形狀在世界中運動。在 Box2D 中物體總是剛體,這意味著同一剛體上的兩個形狀永遠不會相對移動。通常你會保存所有你所創(chuàng)建的物體的指針,這樣你就能查詢物體的位置,并在圖形實體中更新它的位置。另外在不需要它們的時候你也需要通過它們的指針摧毀它們。

??質量性質:

1)在物體定義中顯式地設置?

?bodyDef.massData.mass?=?2.0f;//物體的質量是2kg

?2)顯式地在物體上設置(在其創(chuàng)建之后)

3)基于物體上的形狀來進行密度設置?

?b2PolygonDef?shapeDef;

shapeDef.SetAsBox(1.0f,?1.0f);
shapeDef.density?=?1.0f;
body->CreateShape(&shapeDef);
body->SetMassFromShapes();//這個函數(shù)成本較高,所以你應該只在需要時使用它。 你可以在運行時調(diào)整一個物體的質量,這通常是在添加或移除物體上之形狀時完成的。可能你會根據(jù)物體上的當前形狀來調(diào)整其質量。 可能你也會直接設置質量。例如,你可能會改變形狀,但你只想使用自己的質量公式。 void?SetMass(const?b2MassData*?massData); 通過以下這些函數(shù)可以獲得物體的質量數(shù)據(jù): float32?GetMass()?const;
float32?GetInertia()?const;
const?b2Vec2&?GetLocalCenter()?const;?

?

位置和角度:

bodyDef.position.Set(0.0f,?2.0f);???//?the?body's?origin?position.
bodyDef.angle?=?0.25f?*?b2_pi;??????//?the?body's?angle?in?radians. 你可以訪問一個物體的位置和角度,這在你渲染相關游戲角色時很常用。你也可以設置位置,盡管這不怎么常用。 bool?SetXForm(const?b2Vec2&?position,?float32?angle);
const?b2XForm&?GetXForm()?const;
const?b2Vec2&?GetPosition()?const;
float32?GetAngle()?const;?

?

?你可以訪問線速度與角速度,線速度是對于質心所言的。

void?SetLinearVelocity(const?b2Vec2&?v);
b2Vec2?GetLinearVelocity()?const;
void?SetAngularVelocity(float32?omega);
float32?GetAngularVelocity()?const;

?

阻尼:

阻尼用于減小物體在世界中的速率。阻尼與摩擦是不同的,因為摩擦僅在物體有接觸的時候才會發(fā)生,而阻尼的模擬要比摩擦便宜多了。然而,阻尼并不能取代摩擦,往往這兩個效果需要同時使用。阻尼參數(shù)的范圍可以在 0 到無窮之間,0 的就是沒有阻尼,無窮就是滿阻尼。通常來說,阻尼的值應在 0 到 0.1 之間,我通常不使用線性阻尼,因為它會使物體看起來發(fā)飄。 bodyDef.linearDamping?=?0.0f;
bodyDef.angularDamping?=?0.01f; 阻尼相似于穩(wěn)定性與性能,阻尼值較小的時候阻尼效應幾乎不依賴于時間步,而阻尼值較大的時候阻尼效應將隨著時間步而變化。如果你使用固定的時間步(推薦)這就不是問題了。?

?休眠參數(shù):

模擬物體的成本是高昂的,所以如果物體更少,那模擬的效果就能更好。當一個物體停止了運動時,我們要停止去模擬它。?當 Box2D 確定一個物體(或一組物體)已經(jīng)停止移動時,物體就會進入休眠狀態(tài),消耗很小的 CPU 開銷。如果一個醒著的物體接觸到了一個休眠中的物體,那么休眠中的物體就會醒來。當物體上的關節(jié)或 觸點被摧毀的時候,它們同樣會醒來。你也可以手動地喚醒物體。通過物體定義,你可以指定一個物體是否可以休眠,或者創(chuàng)建一個休眠的物體。 bodyDef.allowSleep?=?true;
bodyDef.isSleeping?=?false;

?

?子彈:

高速移動的物體在 Box2D 被稱為子彈(bullet),你需要按照游戲的設計來決定哪些物體是子彈。如果你決定一個物體應該按照子彈去處理,使用下面的設置。 bodyDef.isBullet?=?true; 子彈開關只影響動態(tài)物體。 有的時候,在一個時間步內(nèi)可能會有大量的剛體同時運動。如果一個物理引擎沒有處理好大幅度運動的問題,你就可能會看見一些物體錯誤地穿過了彼此。這種效果被稱為隧道效應(tunneling)。默認情況下,Box2D 會通過連續(xù)碰撞檢測(CCD)來防止動態(tài)物體穿越靜態(tài)物體,這是通過從形狀的舊位置到新位置的掃描來完成的。引擎會查找掃描中的新碰撞,并為這些碰撞計算碰撞時間(TOI)。物體會先被移動到它們的第一個 TOI,然后一直模擬到原時間步的結束。如果有必要這個步驟會重復執(zhí)行。一般 CCD 不會應用于動態(tài)物體之間,這是為了保持性能。在一些游戲環(huán)境中你需要在動態(tài)物體上也使用 CCD,譬如,你可能想用一顆高速的子彈去射擊薄壁。沒有 CCD,子彈就可能會隧穿薄壁。?CCD 的成本是昂貴的,所以你可能不希望所有運動物體都成為子彈。所以 Box2D 默認只在動態(tài)物體和靜態(tài)物體之間使用 CCD,這是防止物體逃脫游戲世界的一個有效方法。然而,可能你有一些高速移動的物體需要一直使用 CCD。?

?

?狀態(tài)信息:

物體的狀態(tài)含有多個方面,通過這些函數(shù)你可以訪問這些狀態(tài)數(shù)據(jù): bool?IsBullet()?const;
void?SetBullet(bool?flag);
bool?IsStatic()?const;
bool?IsDynamic()?const;
bool?IsFrozen()?const;
bool?IsSleeping()?const;
void?AllowSleeping(bool?flag);
void?WakeUp();?

?

?

?力和沖量:

你可以對一個物體應用力,扭矩,以及沖量。當應用一個力或沖量時,你需要提供一個世界位置。這常常會導致對質心的一個扭矩。 void?ApplyForce(const?b2Vec2&?force,?const?b2Vec2&?point);
void?ApplyTorque(float32?torque);
void?ApplyImpulse(const?b2Vec2&?impulse,?const?b2Vec2&?point); 應用力,扭矩或沖量會喚醒物體,有時這是不合需求的。例如,你可能想要應用一個穩(wěn)定的力,并允許物體休眠來提升性能。這時,你可以使用這樣的代碼: if?(myBody->IsSleeping()?==?false)
{
????myBody->ApplyForce(myForce,?myPoint);
}?

?

??坐標轉換:

物體類包含一些工具函數(shù),它們可以幫助你在局部和世界坐標系之間轉換點和向量。如果你不了解這些概念,請看 Jim Van Verth 和 Lars Bishop 的“Essential Mathematics for Games and Interactive?Applications”。這些函數(shù)都很高效,所以可放心使用。 b2Vec2?GetWorldPoint(const?b2Vec2&?localPoint);
b2Vec2?GetWorldVector(const?b2Vec2&?localVector);
b2Vec2?GetLocalPoint(const?b2Vec2&?worldPoint);
b2Vec2?GetLocalVector(const?b2Vec2&?worldVector);?

?

?列表

你可以遍歷一個物體的形狀,其主要用途是幫助你訪問形狀的用戶數(shù)據(jù)。 for?(b2Shape*?s?=?body->GetShapeList();?s;?s?=?s->GetNext())
{
????MyShapeData*?data?=?(MyShapeData*)s->GetUserData();
????...?do?something?with?data?...
}

你也可以用類似的方法遍歷物體的關節(jié)列表。?

?

?

?10、?形狀

?形狀就是物體上的碰撞幾何結構。另外形狀也用于定義物體的質量。也就是說,你來指定密度,Box2D 可以幫你計算出質量。形狀具有摩擦和恢復的性質。形狀還可以攜帶篩選信息,使你可以防止某些游戲對象之間的碰撞。形狀永遠屬于某物體,單個物體可以擁有多個形狀。形狀是抽象類,所以在 Box2D 中可以實現(xiàn)許多

類型的形狀。如果你有勇氣,那便可以實現(xiàn)出自己的形狀類型(和碰撞算法)。

形狀定義?:

形狀定義用于創(chuàng)建形狀。通用的形狀數(shù)據(jù)會保存在 b2ShapeDef 中,特殊的形狀數(shù)據(jù)會保存在其派生類中。?

1)摩擦和恢復?

?摩擦可以使對象逼真地沿其它對象滑動。Box2D 支持靜摩擦和動摩擦,但使用相同的參數(shù)。摩擦參數(shù)經(jīng)常會設置在 0 到 1 之間,0 意味著沒有摩擦,1 會產(chǎn)生強摩擦。當計算兩個形狀之間的摩擦時,Box2D 必須聯(lián)合兩個形狀的摩擦參數(shù),這是通過以下公式完成的:

float32?friction;
friction?=?sqrtf(shape1->friction?*?shape2->friction);

?恢復可以使對象彈起,想象一下,在桌面上方丟下一個小球。恢復的值通常設置在 0 到 1 之間,0 的意思是小球不會彈起,這稱為非彈性碰撞;1 的意思是小球的速度會得到精確的反射,這稱為完全彈性碰撞。恢復是通過這樣的公式計算的:

float32?restitution;
restitution?=?b2Max(shape1->restitution,?shape2->restitution);

?當一個形狀發(fā)生多碰撞時,恢復會被近似地模擬。這是因為 Box2D 使用了迭代求解器.

2)?密度

Box2D 可以根據(jù)附加形狀的質量分配來計算物體的質量以及轉動慣量。直接指定物體質量常常會導致不協(xié)調(diào)的模擬。因此,推薦的方法是使用b2Body::SetMassFromShape 來根據(jù)形狀設置質量。?

?3)?篩選

碰撞篩選是一個防止某些形狀發(fā)生碰撞的系統(tǒng)。?

Box2D 支持 16 個種群,對于任何一個形狀你都可以指定它屬于哪個種群。你還可以指定這個形狀可以和其它哪些種群發(fā)生碰撞。例如,你可以在一個多人游戲中指定玩家之間不會碰撞,怪物之間也不會碰撞,但是玩家和怪物會發(fā)生碰撞。這是通過掩碼來完成的,例如: playerShapeDef.filter.categoryBits?=?0x0002;
monsterShapeDef.filter.categoryBits?=?0x0004;
playerShape.filter.maskBits?=?0x0004;
monsterShapeDef.filter.maskBits?=?0x0002;

?

?碰撞組可以讓你指定一個整數(shù)的組索引。你可以讓同一個組的所有形狀總是相互碰撞(正索引)或永遠不碰撞(負索引)。組索引通常用于一些以某種方式關聯(lián)的事物,就像自行車的那些部件。在下面的例子中,shape1 和 shape2 總是碰撞,而 shape3 和 shape4 永遠不會碰撞。

shape1Def.filter.groupIndex?=?2;
shape2Def.filter.groupIndex?=?2;
shape3Def.filter.groupIndex?=?-8;
shape4Def.filter.groupIndex?=?-8;

?不同組索引之間形狀的碰撞會按照種群和掩碼來篩選。換句話說,組篩選比種群篩選有更高的優(yōu)選權。

注意在 Box2D 中的其它碰撞篩選,這里是一個列表:? ? 靜態(tài)物體上的形狀永遠不會與另一個靜態(tài)物體上的形狀發(fā)生碰撞 ? 同一個物體上的形狀之間永遠不會發(fā)生碰撞 ? 你可以有選擇地啟用或禁止由關節(jié)連接的物體上的形狀之間是否碰撞 有時你可能希望在形狀創(chuàng)建之后去改變其碰撞篩選,你可以使用 b2Shape::GetFilterData 以及?b2Shape::SetFilterData 來存取已存在形狀之 b2FilterData 結構。Box2D 會緩存篩選結果,所以你需要使用 b2World::Refilter 手動地進行重篩選。

?4)傳感器

?有時候游戲邏輯需要判斷兩個形狀是否相交,但卻不應該有碰撞反應。這可以通過傳感器(sensor)來完成。傳感器會偵測碰撞而不產(chǎn)生碰撞反應。你可以將任一形狀標記為傳感器,傳感器可以是靜態(tài)或動態(tài)的。記得,每個物體上可以有多個形狀,并且傳感器和實體形狀是可以混合的。

?myShapeDef.isSensor?=?true;

?5)?圓形定義

b2CircleDef 擴充了 b2ShapeDef 并增加一個半徑和一個局部位置。 b2CircleDef?def;
def.radius?=?1.5f;
def.localPosition.Set(1.0f,?0.0f);?

?6)多邊形定義

b2PolyDef 用于定義凸多邊形。要正確地使用需要一點點技巧,所以請仔細閱讀。最大頂點數(shù)由?b2_maxPolyVertices 定義,當前是 8。如果你需要更多頂點,你必須修改 b2Settings.h 中的?b2_maxPolyVertices。當創(chuàng)建多邊形定義時,你需要給出所用的頂點數(shù)目。這些頂點必須按照相對于右手坐標系之 z 軸逆時 針(CCW)的順序定義。在你的屏幕上可能是順時針的,這取決于你的坐標系統(tǒng)規(guī)則。多邊形必須是凸多邊形,也就是,每個頂點都必須指向外面。最后,你也不應該重疊任何頂點。Box2D 會自動地封閉環(huán)路。?

?這里是一個三角形的多邊形定義的例子:

b2PolygonDef?triangleDef;
triangleDef.vertexCount?=?3;
triangleDef.vertices[0].Set(-1.0f,?0.0f);
triangleDef.vertices[1].Set(1.0f,?0.0f);
triangleDef.vertices[2].Set(0.0f,?2.0f);

?

?7)形狀工廠

?初始化一個形狀定義,而后將其傳遞給父物體;形狀就是這樣創(chuàng)建的。

b2CircleDef?circleDef;
circleDef.radius?=?3.0f;
circleDef.density?=?2.5f;
b2Shape*?myShape?=?myBody->CreateShape(&circleDef);

?

?

?11、關節(jié)

?關節(jié)的作用是把物體約束到世界,或約束到其它物體上。在游戲中的典型例子是木偶,蹺蹺板和滑輪。關節(jié)可以用許多種不同的方法結合起來,創(chuàng)造出有趣的運動。

有些關節(jié)提供了限制(limit),以便你控制運動范圍。有些關節(jié)還提供了馬達(motor),它可以以指定的速度驅動關節(jié),直到你指定了更大的力或扭矩。 1)關節(jié)定義 各種關節(jié)類型都派生自 b2JointDef。所有關節(jié)都連接兩個不同的物體,可能其中一個是靜態(tài)物體。如果你想浪費內(nèi)存的話,那就創(chuàng)建一個連接兩個靜態(tài)物體的關節(jié)?你可以為任何一種關節(jié)指定用戶數(shù)據(jù)。你還可以提供一個標記,用于預防相連的物體發(fā)生碰撞。實際上,這是默認行為,你可以設置 collideConnected 布爾值來允許相連的物體碰撞。很多關節(jié)定義需要你提供一些幾何數(shù)據(jù)。一個關節(jié)常常需要一個錨點(anchor point)來定義,這是固定于相接物體中的點。在 Box2D 中這點需要在局部坐標系中指定,這樣,即便當前物體的變化違反了關節(jié)約束,關節(jié)還是可以被指定 —— 在游戲存取進度時這經(jīng)常會發(fā)生。另外,有些關節(jié)定義需要默認的 物體之間的相對角度。這樣才能通過關節(jié)限制或固定的相對角來正確地約束旋轉。初始化幾何數(shù)據(jù)可能有些乏味。所以很多關節(jié)提供了初始化函數(shù),消除了大部分工作。然而,這些初始化函數(shù)通常只應用于原型,在產(chǎn)品代碼中應該直接地定義幾何數(shù)據(jù)。這能使關節(jié)行為更加穩(wěn)固。其余的關節(jié)定義數(shù)據(jù)依賴于關節(jié)的類型。下面我們來介紹它們。?

?2)距離關節(jié)

?距離關節(jié)是最簡單的關節(jié)之一,它描述了兩個物體上的兩個點之間的距離應該是常量。當你指定一個距離關節(jié)時,兩個物體必須已在應有的位置上。隨后,你指定兩個世界坐標中的錨點。第一個錨點連接到物體 1,第二個錨點連接到物體 2。這些點隱含了距離約束的長度。

?

?

?

?這是一個距離關節(jié)定義的例子。在此我們允許了碰撞。

b2DistanceJointDef?jointDef;
jointDef.Initialize(myBody1,?myBody2,?worldAnchorOnBody1,?
worldAnchorOnBody2);
jointDef.collideConnected?=?true;

?3)旋轉關節(jié)

?一個旋轉關節(jié)會強制兩個物體共享一個錨點,即所謂鉸接點。旋轉關節(jié)只有一個自由度:兩個物體的相對旋轉。這稱之為關節(jié)角。

?

?要指定一個旋轉關節(jié),你需要提供兩個物體以及一個世界坐標的錨點。初始化函數(shù)會假定物體已經(jīng)在應有位置了。在此例中,兩個物體被旋轉關節(jié)連接于第一個物體的質心。

b2RevoluteJointDef?jointDef;
jointDef.Initialize(myBody1,?myBody2,?myBody1->GetWorldCenter());

?

?這里是對上面旋轉關節(jié)定義的修訂;這次,關節(jié)擁有一個限制以及一個馬達,后者用于模擬摩擦。

b2RevoluteJointDef?jointDef;
jointDef.Initialize(body1,?body2,?myBody1->GetWorldCenter());//使用 Initialize() 創(chuàng)建關節(jié)時,旋轉關節(jié)角為 0,無論兩個物體當前的角度怎樣。
jointDef.lowerAngle?=?-0.5f?*?b2_pi;?//?-90?degrees最小角度
jointDef.upperAngle?=?0.25f?*?b2_pi;?//?45?degrees最大角度
jointDef.enableLimit?=?true;
jointDef.maxMotorTorque?=?10.0f;//馬達
jointDef.motorSpeed?=?0.0f;
jointDef.enableMotor?=?true;

你可以訪問旋轉關節(jié)的角度,速度,以及扭矩。?

float32?GetJointAngle()?const;??

float32?GetJointSpeed()?const;
float32?GetMotorTorque()?const;

你也可以在每步中更新馬達參數(shù)。?

void?SetMotorSpeed(float32?speed); void?SetMaxMotorTorque(float32?torque);??

?關節(jié)馬達有一些有趣的能力。你可以在每個時間步中更新關節(jié)速度,這可以使關節(jié)像正弦波一樣來回

移動,或者按其它什么函數(shù)運動。 //?...?Game?Loop?Begin?...
myJoint->SetMotorSpeed(cosf(0.5f?*?time));
//?...?Game?Loop?End?... 你還可以使用關節(jié)馬達來追蹤某個關節(jié)角度。例如: //?...?Game?Loop?Begin?...
float32?angleError?=?myJoint->GetJointAngle()?-?angleTarget;
float32?gain?=?0.1f;
myJoint->SetMotorSpeed(-gain?*?angleError);
//?...?Game?Loop?End?... 通常來講你的增益參數(shù)不應過大,否則你的關節(jié)可能會變得不穩(wěn)定。

?

4)移動關節(jié)

?移動關節(jié)(prismatic joint)允許兩個物體沿指定軸相對移動,它會阻止相對旋轉。因此,移動關節(jié)只有一個自由度。

?

移動關節(jié)的定義有些類似于旋轉關節(jié);只是轉動角度換成了平移,扭矩換成了力。以這樣的類比,我們來看一個帶有關節(jié)限制以及馬達摩擦的移動關節(jié)定義:? b2PrismaticJointDef?jointDef;

b2Vec2?worldAxis(1.0f,?0.0f);
jointDef.Initialize(myBody1,?myBody2,?myBody1->GetWorldCenter(),?
worldAxis);
jointDef.lowerTranslation?=?-5.0f;
jointDef.upperTranslation?=?2.5f;
jointDef.enableLimit?=?true;
jointDef.motorForce?=?1.0f;
jointDef.motorSpeed?=?0.0f;
jointDef.enableMotor?=?true;

?旋轉關節(jié)隱含著一個從屏幕射出的軸,而移動關節(jié)明確地需要一個平行于屏幕的軸。這個軸會固定于兩個物體之上,沿著它們的運動方向。就像旋轉關節(jié)一樣,當使用 Initialize() 創(chuàng)建移動關節(jié)時,移動為 0。所以一定要確保移動限制范圍內(nèi)包含了 0。移動關節(jié)的用法類似于旋轉關節(jié),這是它的相關成員函數(shù):?

float32?GetJointTranslation()?const;
float32?GetJointSpeed()?const;
float32?GetMotorForce()?const;
void?SetMotorSpeed(float32?speed);

void?SetMotorForce(float32?force);?

?

?5)滑輪關節(jié)

?滑輪關節(jié)用于創(chuàng)建理想的滑輪,它將兩個物體接地(ground)并連接到彼此。這樣,當一個物體升起時,另一個物體就會下降。滑輪的繩子長度取決于初始時的狀態(tài)。

length1 + length2 == constant

?

?

?你還可以提供一個系數(shù)(ratio)來模擬滑輪組,這會使滑輪一側的運動比另一側要快。同時,一側的約束力也比另一側要小。你也可以用這個來模擬機械杠桿(mechanical leverage)。length1 + ratio * length2 == constant?舉個例子,如果系數(shù)是 2,那么 length1 的變化會是 length2 的兩倍。另外連接 body1 的繩子的約束力將會是連接 body2 繩子的一半。當滑輪的一側完全展開時,另一側的繩子長度為零,這可能會出問題。此時,約束方程將變得奇異。因此,滑輪關節(jié)約束了每一側的最大長度。另外出于游戲原因你可能也希望控制這個最大長度。最大長度能提高穩(wěn)定性,以及提供更多的控制。

這是一個滑輪定義的例子: b2Vec2?anchor1?=?myBody1->GetWorldCenter();
b2Vec2?anchor2?=?myBody2->GetWorldCenter();
b2Vec2?groundAnchor1(p1.x,?p1.y?+?10.0f);
?b2Vec2?groundAnchor2(p2.x,?p2.y?+?12.0f);
float32?ratio?=?1.0f;
b2PulleyJointDef?jointDef;
jointDef.Initialize(myBody1,?myBody2,?groundAnchor1,?groundAnchor2,?
anchor1,?anchor2,?ratio);
jointDef.maxLength1?=?18.0f;
jointDef.maxLength2?=?20.0f;

?滑輪關節(jié)提供了當前長度:

float32?GetLength1()?const; float32?GetLength2()?const;??

?

?6)?齒輪關節(jié)

?如果你想要創(chuàng)建復雜的機械裝置,你可能需要齒輪。原則上,在 Box2D 中你可以用復雜的形狀來模擬輪齒,但這并不十分高效,而且這樣的工作可能有些乏味。另外,你還得小心地排列齒輪,保證輪齒能平穩(wěn)地嚙合。Box2D 提供了一個創(chuàng)建齒輪的更簡單的方法:齒輪關節(jié)。

?

?

?齒輪關節(jié)需要兩個被旋轉關節(jié)或移動關節(jié)接地(ground)的物體,你可以任意組合這些關節(jié)類型。另外,創(chuàng)建旋轉或移動關節(jié)時,Box2D 需要地(ground)作為 body1。類似于滑輪的系數(shù),你可以指定一個齒輪系數(shù)(ratio),齒輪系數(shù)可以為負。另外值得注意的是,當一個是旋轉關節(jié)(有角度的)而另一個是移動關節(jié)(平移)時,齒輪系數(shù)是長度或長度分之一。coordinate1 + ratio * coordinate2 == constant這是一個齒輪關節(jié)的例子:

b2GearJointDef?jointDef;
jointDef.body1?=?myBody1;
jointDef.body2?=?myBody2;
jointDef.joint1?=?myRevoluteJoint;
jointDef.joint2?=?myPrismaticJoint;
jointDef.ratio?=?2.0f?*?b2_pi?/?myLength;? ? 注意:齒輪關節(jié)總應該先于旋轉或移動關節(jié)被刪除,否則你的代碼將會由于齒輪關節(jié)中的無效關節(jié) 指針而導致崩潰。另外齒輪關節(jié)也應該在任何相關物體被刪除之前刪除。

7)關節(jié)工廠

?關節(jié)是通過世界的工廠方法來創(chuàng)建和摧毀的,這引出了一個舊問題:?

? 注意:不要試圖在棧上創(chuàng)建物體或關節(jié),也不要使用 new 或 malloc 在堆上創(chuàng)建。物體以及關節(jié)必須要通過 b2World 類的方法來創(chuàng)建或摧毀。 這是一個關于旋轉關節(jié)生命期的例子: b2RevoluteJointDef?jointDef;
jointDef.body1?=?myBody1;
jointDef.body2?=?myBody2;
jointDef.anchorPoint?=?myBody1->GetCenterPosition();
b2RevoluteJoint*?joint?=?myWorld->CreateJoint(&jointDef);
//?...?do?stuff?...
myWorld->DestroyJoint(joint);
joint?=?NULL;

?8)使用關節(jié)

?在許多模擬中,關節(jié)被創(chuàng)建之后便不再被訪問了。然而,關節(jié)中包含著很多有用的數(shù)據(jù),使你可以創(chuàng)建出豐富的模擬。首先,你可以在關節(jié)上得到物體,錨點,以及用戶數(shù)據(jù)。

b2Body*?GetBody1();
b2Body*?GetBody2();
b2Vec2?GetAnchor1();
b2Vec2?GetAnchor2();
void*?GetUserData();

?

?11、接觸

?接觸(contact)是由 Box2D 創(chuàng)建的用于管理形狀間碰撞的對象。接觸有不同的種類,它們都派生自?b2Contact,用于管理不同類型形狀之間的接觸。例如,有管理多邊形之間碰撞的類,有管理圓形之間碰撞的類。

這里是 Box2D 中的一些與碰撞有關的術語:

?觸點(contact point)

兩個形狀相互接觸的點。實際上當物體的表面相接觸時可能會有一定接觸區(qū)域,在 Box2D 則近似地 以少數(shù)點來接觸。 接觸向量(contact normal) 從 shape1 指向 shape2 的單位向量。 接觸分隔(contact separation) 分隔相反于穿透,當形狀相重疊時,分隔為負。可能以后的 Box2D 版本中會以正隔離來創(chuàng)建觸點,所以當有觸點的報告時你可能會檢查符號。 法向力(normal force) Box2D 使用了一個迭代接觸求解器,并會以觸點保存結果。你可以安全地使用法向力來判斷碰撞強度。例如,你可以使用這個力來引發(fā)破碎,或者播放碰撞的聲音。

?切向力(tangent force)

它是接觸求解器關于摩擦力的估計量。 接觸標識(contact ids) Box2D 會試圖利用一個時間步中的觸點壓力(contact force)結果來推測下一個時間步中的情況。接觸標識用于匹配跨越時間步的觸點,它包含了幾何特征索引以便區(qū)分觸點。?

?

?當兩個形狀的 AABB 重疊時,接觸就被創(chuàng)建了。有時碰撞篩選會阻止接觸的創(chuàng)建,有時盡管碰撞已篩選了 Box2D 還是須要創(chuàng)建一個接觸,這種情況下它會使用 b2NullContact 來防止碰撞的發(fā)生。當?AABB 不再重疊之后接觸會被摧毀。也許你會皺起眉頭,為了沒有發(fā)生實際碰撞的形狀(只是它們的 AABB)卻創(chuàng)建了接觸。好吧,的確是這樣的,這是一個“雞或蛋”的問題。我們并不知道是否需要一個接觸,除非我們創(chuàng)建一個接觸去分析碰撞。如果形狀之間沒有發(fā)生碰撞,我們需要正確地刪除接觸,或者,我們可以一直等到 AABB 不再重疊。Box2D 選擇了后面這個方法。

1)接觸監(jiān)聽器 通過實現(xiàn) b2ContactListener 你就可以接受接觸數(shù)據(jù)。當一個觸點被創(chuàng)建時,當它持續(xù)超過一個時間步時,以及當它被摧毀時,這個監(jiān)聽器(listener)就會發(fā)出報告。請留意兩個形狀之間可能會有多個觸點。 class MyContactListener : public b2ContactListener { public: void Add(const b2ContactPoint* point) { // handle add point } void Persist(const b2ContactPoint* point) { // handle persist point } void Remove(const b2ContactPoint* point) { // handle remove point } void Result(const b2ContactResult* point) { // handle results } }; 2)接觸篩選 通常,你不希望游戲中的所有物體都發(fā)生碰撞。例如,你可能會創(chuàng)建一個只有某些角色才能通過的門。這稱之為接觸篩選,因為一些交互被篩選出了。 通過實現(xiàn) b2ContactFilter 類,Box2D 允許定制接觸篩選。這個類需要一個 ShouldCollide 函數(shù),用于接收兩個 b2Shape 的指針,如果應該碰撞那么就返回 true。默認的 ShouldCollide 實現(xiàn)使用了 6 形狀 中的 b2FilterData。 bool?b2ContactFilter::ShouldCollide(b2Shape*?shape1,?b2Shape*?shape2)
{
?const?b2FilterData&?filter1?=?shape1->GetFilterData();
?const?b2FilterData&?filter2?=?shape2->GetFilterData();
?if?(filter1.groupIndex?==?filter2.groupIndex?&&?filter1.groupIndex?!=?0)
?{
?return?filter1.groupIndex?>?0;
?}
?bool?collide?=?(filter1.maskBits?&?filter2.categoryBits)?!=?0?&&?
(filter1.categoryBits?&?filter2.maskBits)?!=?0;
?return?collide;
}? 12、雜項 1) 你可以實現(xiàn)一個 b2BoundaryListener,這樣當有物體超出世界的 AABB 時 b2World 就能通知你。當你得到回調(diào)時,你不應該試圖刪除物體;取而代之的是,你可以為角色做個刪除或錯誤處理標記,在物理時間步之后再進行這個事件的處理。 class MyBoundaryListener : public b2BoundaryListener { void Violation(b2Body* body) { MyActor* myActor = (MyActor*)body->GetUserData(); myActor->MarkForErrorHandling(); } }; 隨后你可以在世界對象中注冊你的邊界監(jiān)聽器實例,這應該安排在世界初始化過程中。 myWorld->SetListener(myBoundaryListener); 2)隱式摧毀 如果你摧毀一個 Box2D 實體,你應該保證所有到它的引用都刪除了。如果你只有實體的單個引用的話,那就簡單了。但如果你有很多個引用,你可能要考慮實現(xiàn)一個處理類來封裝原始指針。通常使用 Box2D 時你需要創(chuàng)建并摧毀許多物體,形狀還有關節(jié)。管理這些實體有些自動化,如果你摧毀一個物體,所有它的形狀,關節(jié),以及接觸都會摧毀,這稱為隱式摧毀。任何連接于這些關節(jié)或接觸之一的物體將被喚醒,通常這是便利的。然而,你應該意識到了一個關鍵問題:? Box2D 提供了一個名為 b2WorldListener 的監(jiān)聽器類,你可以實現(xiàn)它并提供給世界對象,隨后當關節(jié)將被隱式摧毀時世界對象就會提醒你。 你可以實現(xiàn)一個 b2DestructionListener,這樣當一個形狀或關節(jié)隱式摧毀時 b2World 就能通知你,這可以幫助你預防訪問無效指針。 class MyDestructionListener : public b2DestructionListener { void SayGoodbye(b2Joint* joint) { // remove all references to joint. } }; 隨后你可以注冊它,這應該在世界初始化過程中。 myWorld->SetListener(myDestructionListener);

總結

以上是生活随笔為你收集整理的Box2D基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久久伦理影院 | 久久人人爽人人爽人人片av免费 | 亚洲禁18久人片 | 亚洲激情校园春色 | 亚洲成人av在线播放 | 欧美午夜精品久久久久久孕妇 | 久久国产精品免费看 | 婷婷.com| 91成人免费在线视频 | 精品欧美在线视频 | 日韩在线观看精品 | 国产一区二区精 | 色久综合| 日韩一区二区在线免费观看 | 丁香久久 | 久久久九色精品国产一区二区三区 | 免费看的国产视频网站 | 一区二区理论片 | 久久婷婷开心 | 亚洲电影一区二区 | 久久久久久免费毛片精品 | 91社区国产高清 | 99久久久国产精品免费99 | 中文字幕av最新 | 丰满少妇对白在线偷拍 | av在线电影网站 | 亚洲精品国偷自产在线91正片 | 色网站在线观看 | 久久久久色| 最近日本中文字幕 | 久久不卡国产精品一区二区 | 美女视频久久久 | 成人免费大片黄在线播放 | 免费看黄电影 | 在线天堂视频 | 99精品偷拍视频一区二区三区 | 亚洲精品乱码久久久久久久久久 | 久久99国产精品免费 | 99久久综合狠狠综合久久 | 91aaa在线观看| 中文字幕在线视频一区二区三区 | av在线播放国产 | 永久免费在线 | 91精品一区二区三区久久久久久 | 午夜婷婷在线播放 | 欧美 日韩 国产 成人 在线 | 很污的网站 | 亚洲精品ww | 国产青草视频在线观看 | 97成人资源站 | 中文字幕av免费在线观看 | 爱干视频| 精品一区二区三区香蕉蜜桃 | 日韩av电影中文字幕 | 亚洲精品在线观看中文字幕 | 久久理论电影网 | 日本精品久久久久中文字幕 | 91女子私密保健养生少妇 | 久草a视频| 中文字幕一区二区三区四区久久 | 国产一区视频导航 | 午夜精品久久久久久中宇69 | 视频在线日韩 | 97国产一区| 成人午夜影视 | 国产精品一区二区麻豆 | 亚洲精品国精品久久99热一 | 色噜噜色噜噜 | 美腿丝袜一区二区三区 | 国产精品系列在线播放 | 奇米777777 | 超黄视频网站 | 2019中文字幕第一页 | 成全免费观看视频 | 国产99久久精品一区二区永久免费 | 国内外成人免费在线视频 | 成人一级片在线观看 | 美女福利视频 | 欧美最猛性xxxxx亚洲精品 | 日日夜夜免费精品视频 | 欧美黑人性猛交 | 91国内在线 | 在线看v片成人 | 亚洲婷婷网| 伊人五月综合 | 日本丰满少妇免费一区 | 中国黄色一级大片 | 久久综合狠狠综合久久狠狠色综合 | 91看片看淫黄大片 | 免费看片网站91 | 国产在线观看 | 美女免费电影 | 亚洲久在线| 99爱这里只有精品 | 91理论电影 | 久久久久这里只有精品 | 依人成人综合网 | 久久久久久久久久久久电影 | 国产精品xxxx18a99 | 国产麻豆剧传媒免费观看 | 999久久国产精品免费观看网站 | 九九亚洲精品 | 久久久污 | 香蕉视频久久久 | 欧美大片第1页 | 国产一级91 | 亚洲欧美色婷婷 | 天天操天天添 | 91精品在线视频 | 美女黄网久久 | 九九免费观看全部免费视频 | 久久草草影视免费网 | 99在线观看免费视频精品观看 | 国产字幕在线播放 | 日日夜夜婷婷 | 亚洲小视频在线 | 高清av影院 | 欧美一区二区三区激情视频 | 在线a人v观看视频 | 国产中文字幕视频在线 | 欧美一区二区在线免费看 | 国语精品免费视频 | 亚洲国产欧美一区二区三区丁香婷 | 五月婷婷婷婷婷 | 日韩av中文 | 成人资源站 | 色婷婷丁香| 视频1区2区| 69xxxx欧美| 日日夜夜狠狠 | 99久久久国产精品 | 久久国产精品一二三区 | 亚洲丝袜中文 | 国产夫妻性生活自拍 | 天天舔天天搞 | 国产成a人亚洲精v品在线观看 | 久草精品免费 | 日韩精品亚洲专区在线观看 | 久久免费精彩视频 | 国产精品久久精品国产 | 久久艹艹 | 久久66热这里只有精品 | 欧美一区二区日韩一区二区 | 经典三级一区 | 亚洲激情在线视频 | 深爱五月激情五月 | 美女亚洲精品 | 久久久久国产精品www | 国产精品入口传媒 | 国产黄色理论片 | 亚洲精品久久视频 | 久久韩国免费视频 | 国产精品高 | 不卡视频一区二区三区 | 日韩性色| 免费观看国产视频 | 国产日韩中文字幕 | 三级黄色a| 久久婷婷五月综合色丁香 | 精品国产欧美一区二区三区不卡 | 国产精品 中文在线 | 成人在线观看免费视频 | 亚洲午夜av| 国产精品99久久久精品免费观看 | 亚洲精品视频在线免费 | 婷婷中文字幕在线观看 | 国产精品免费不卡 | 337p日本欧洲亚洲大胆裸体艺术 | 国产精品video爽爽爽爽 | 97精品欧美91久久久久久 | 天天玩天天干天天操 | 一区中文字幕在线观看 | 在线观看黄色的网站 | 99麻豆久久久国产精品免费 | 久久久久久久久久免费视频 | 人人舔人人 | 96久久 | www一起操 | 色综合天天综合在线视频 | 综合色亚洲| 九九免费精品视频在线观看 | 国产成人精品999 | 久久不卡免费视频 | 精品国产免费久久 | 久99久精品| 91九色视频国产 | 91香蕉国产在线观看软件 | 国产福利网站 | 免费av高清| 日韩色在线观看 | 在线观看www.| 日本在线观看中文字幕 | 国产精品久久久久婷婷二区次 | 日韩电影中文字幕在线观看 | 午夜国产福利在线 | 亚洲免费在线看 | 色综合久久五月天 | 成人国产网址 | 99精品视频在线播放免费 | 日韩精品一区二区三区高清免费 | 中文字幕在线观看av | 国产99久久久久久免费看 | 在线黄色av电影 | 久久夜视频 | 久国产在线播放 | www色综合| a√天堂资源 | 日本黄色免费大片 | 黄色三级免费片 | 日韩3区 | 91九色视频观看 | 日日干 天天干 | 久久久网址 | 黄色的网站在线 | 黄网站a | 超碰在线最新网址 | 国产精品免费看 | 免费网站黄 | 夜夜爽88888免费视频4848 | 国产成人精品电影久久久 | 国产高清无av久久 | 成人在线观看影院 | 久久久久久久久毛片精品 | 久久精品aaa | av在线免费在线 | 欧美嫩草影院 | 日韩高清三区 | 精品国偷自产在线 | 色婷婷天天干 | 久久人人添人人爽添人人88v | 精品人人人| 亚洲一片黄| 超碰在线观看99 | 成人精品一区二区三区中文字幕 | 国产日韩精品一区二区在线观看播放 | 五月激情片 | 99久久精品免费看国产免费软件 | 日韩区欧美久久久无人区 | 婷婷伊人五月 | 91精品久久香蕉国产线看观看 | 91精品久久久久久久久久入口 | 又污又黄的网站 | 99热最新地址 | 国产精品久久久久久久久久白浆 | 六月丁香在线视频 | 日韩免费在线视频观看 | 在线观看香蕉视频 | 国产成人精品久久二区二区 | 天天插日日插 | 欧美先锋影音 | 五月香婷| 天天操操操操操 | 一区二区三区电影大全 | 夜色成人网| 亚洲一区二区三区在线看 | 天天插天天射 | 色网站免费在线看 | 色婷婷色 | 国产系列在线观看 | 日韩久久一区 | 99热国产在线 | 亚洲精品视频第一页 | 亚洲资源一区 | 欧美亚洲精品一区 | 日韩久久午夜一级啪啪 | 国产资源在线观看 | 色综合www | 国产精品日韩久久久久 | 久久久久久久久久久国产精品 | 九九热视频在线免费观看 | 成人国产精品免费 | 国产精品夜夜夜一区二区三区尤 | 久久小视频 | 中文字幕高清av | 欧美日韩三级在线观看 | 99视频在线精品 | 香蕉影院在线 | 国产综合精品一区二区三区 | 四虎影视欧美 | 日韩a级黄色片 | 麻豆精品视频在线观看免费 | 久久精品视频免费播放 | 国内精品久久久久久久影视麻豆 | 久久精品亚洲精品国产欧美 | 亚洲做受高潮欧美裸体 | 国产精品婷婷 | 国产91精品在线播放 | 成人91av| 免费在线观看a v | 中文在线资源 | 国产精品久久99综合免费观看尤物 | 日韩免费在线看 | 91精品国产高清自在线观看 | 欧美一级黄色网 | 国产精品美女999 | 国产精品毛片一区二区 | 色婷婷国产精品一区在线观看 | 在线观看日本高清mv视频 | 在线97| 在线观看色网 | 天天操操操操操 | 免费在线观看不卡av | 中文字幕在 | 奇米影视在线99精品 | 亚洲男男gaygayxxxgv | 亚洲一级国产 | 久久精品网 | 欧美视频在线观看免费网址 | 国产中文字幕免费 | 久久久www成人免费精品张筱雨 | 在线黄色观看 | 天天做天天爱天天综合网 | 久久九九国产精品 | 欧美日韩在线免费观看视频 | 一区二区三区四区免费视频 | 国产精品久久99精品毛片三a | 最近中文字幕第一页 | 色永久免费视频 | 一区二区中文字幕在线播放 | 国产成人一区二区三区电影 | 91精品网站在线观看 | 精品国产一区二区三区久久影院 | 亚洲国产中文字幕在线观看 | 久久综合色一综合色88 | 久久超碰99| 欧美激情综合五月色丁香 | 国产精品不卡在线 | 久久久久免费精品国产小说色大师 | 国产色婷婷在线 | 日韩国产欧美在线播放 | 中文日韩在线视频 | 精品伊人久久久 | 色婷婷精品大在线视频 | 三级黄色大片在线观看 | 国产精品24小时在线观看 | 人人看看人人 | 亚洲视频axxx | 狠狠狠狠狠操 | 国产一区观看 | 亚洲国产视频直播 | 一区二区高清在线 | 日韩免费在线观看 | 网址你懂的在线观看 | 黄色片网站免费 | 亚洲成年人在线播放 | 亚洲aaa毛片| 精品 激情| 91精品专区| 国产一线天在线观看 | 中文亚洲欧美日韩 | 国产精品久久久久毛片大屁完整版 | 精品国产亚洲在线 | 日本99精品 | 久久婷亚洲五月一区天天躁 | 精品欧美一区二区精品久久 | 欧美精品色 | 麻豆视频免费观看 | 欧美精品久久人人躁人人爽 | 丝袜精品视频 | 久久av电影 | 久草电影免费在线观看 | 狠狠做深爱婷婷综合一区 | 久久这里有 | 亚洲综合成人婷婷小说 | 91成人亚洲 | av爱干| 99精品偷拍视频一区二区三区 | 安徽妇搡bbbb搡bbbb | 国产精品一区二区在线观看 | 天天色天天色天天色 | 手机在线欧美 | 美女网站在线播放 | 日日夜夜免费精品视频 | 久久久一本精品99久久精品 | 久久tv视频 | 久久免费福利 | 国产色综合天天综合网 | 免费三级大片 | 久久男人中文字幕资源站 | 久草在线最新视频 | 3d黄动漫免费看 | 激情久久五月 | 国产视频一区二区在线播放 | 国产精品成人aaaaa网站 | 超碰在线97国产 | 日韩三级免费 | 日日日天天天 | 日本中文在线 | 精品国产一区二区三区噜噜噜 | 亚洲国产精品久久久久久 | 亚洲春色奇米影视 | 99视频一区二区 | 久久久久成人精品 | 友田真希av| 中文字幕久久精品亚洲乱码 | 久久99免费| 中文字幕永久在线 | 草久久av| 成人蜜桃视频 | 久久精品视频在线播放 | 国内精品一区二区 | 国产专区在线视频 | 粉嫩av一区二区三区四区五区 | 久久免费美女视频 | 韩日av一区二区 | 久热国产视频 | 天天鲁一鲁摸一摸爽一爽 | 国产精品久久99综合免费观看尤物 | 天天干.com| 亚洲天堂网站视频 | 国产资源免费在线观看 | 欧美性生活久久 | 六月丁香婷婷网 | 亚一亚二国产专区 | 国产伦精品一区二区三区四区视频 | 24小时日本在线www免费的 | 色综合久久久久久中文网 | 亚洲综合狠狠干 | av网站地址 | www视频在线免费观看 | 久久久精华网 | 四虎在线观看视频 | 成人污视频在线观看 | 玖玖爱在线观看 | 91成年视频 | 日韩免费小视频 | 97电影网站 | 国产精品一区二区三区视频免费 | 日韩精品 在线视频 | 国产精品一区欧美 | 亚洲人成影院在线 | 国产在线1区 | 人人爽人人爽人人爽学生一级 | 91av免费观看 | 国产原创中文在线 | 成人动漫一区二区 | 亚洲综合在 | 久久久精品欧美 | 中文字幕在线第一页 | 久久综合日| 亚洲在线网址 | 夜夜爽天天爽 | 久久成人亚洲欧美电影 | 精品久久久久久国产偷窥 | 久久国产一区 | 色永久免费视频 | 99精品国产99久久久久久福利 | 福利网在线 | 亚洲精品久久久久中文字幕m男 | 日韩毛片在线播放 | 国产一区在线看 | 91精品福利在线 | 青青河边草观看完整版高清 | 久久极品 | 国产色视频网站2 | 精品国产伦一区二区三区观看方式 | 中文字幕av免费在线观看 | 亚洲aⅴ一区二区三区 | 国产在线a不卡 | 99在线精品免费视频九九视 | 黄av免费 | 亚洲少妇久久 | 99亚洲国产精品 | 国产精品午夜8888 | 91九色porny在线 | 国产精品久久久久三级 | 久久视频免费观看 | 99久久99久久免费精品蜜臀 | 69久久夜色精品国产69 | 我要色综合天天 | 又黄又网站 | 亚洲另类视频在线 | 欧美精品在线观看免费 | 色资源二区在线视频 | 日韩精品一区二区在线观看视频 | 欧美日韩另类视频 | 午夜精品久久久久99热app | 偷拍精品一区二区三区 | 亚洲综合在 | 亚洲成人资源网 | 超碰在线99 | 天堂av在线网站 | 中文字幕在线视频一区 | 国产精品美女久久久久久免费 | 999视频在线观看 | 奇米网8888 | av福利超碰网站 | 日韩,精品电影 | 看av免费| 色免费在线 | av性网站| 精品国产一区二 | 国产99久久精品一区二区永久免费 | 欧美日韩激情视频8区 | 色综合中文字幕 | 91精品国产入口 | 国产va精品免费观看 | 国产片网站 | 久草在线看片 | 国产又粗又猛又色又黄网站 | 国产91精品一区二区麻豆网站 | 激情综合五月天 | 国产偷在线 | 精品一区二区电影 | www.久久婷婷 | 国产高清无av久久 | 欧美日韩亚洲第一 | www.夜夜 | 久久视频在线视频 | 天天狠狠操 | 久久久久久久久免费视频 | av怡红院| 婷婷伊人五月 | 美女黄视频免费看 | 国产精品欧美一区二区 | 成人观看视频 | 国产精品手机播放 | 亚洲影院一区 | 黄色影院在线观看 | 91日韩国产 | 久草在线精品观看 | 四虎影视成人永久免费观看亚洲欧美 | 国产999免费视频 | 国产中文字幕在线观看 | av电影一区 | 国产中文字幕视频在线观看 | 手机在线永久免费观看av片 | 亚洲激情p | 一级一片免费看 | 午夜视频在线观看一区 | 一区二区三区播放 | 色综合激情网 | 日韩影视大全 | 久久99电影 | 国产网站色 | 久久99视频免费观看 | 日韩黄色在线电影 | 亚洲在线视频观看 | 亚洲a成人v| 毛片网站观看 | 国产精品a成v人在线播放 | 久久久久久国产精品美女 | 91女子私密保健养生少妇 | 在线综合 亚洲 欧美在线视频 | 欧美久久久久久久 | 99国产精品久久久久久久久久 | 在线免费观看国产黄色 | 色多多视频在线观看 | 久久深爱网 | 免费日p视频 | 免费看片网页 | 亚洲高清精品在线 | 精品久久久999 | 色综合久久久久综合体 | 黄色www在线观看 | 亚洲另类视频在线观看 | 毛片精品免费在线观看 | 在线一区观看 | 亚洲精品资源 | 天天躁天天躁天天躁婷 | 狠狠干网 | 色婷婷av一区 | 国产精品免费观看在线 | 国产香蕉视频在线观看 | 国产精品欧美激情在线观看 | 人人搞人人爽 | 日韩精品无 | 91视频免费看片 | 干天天| 国产一区二区久久久久 | 国产日韩欧美自拍 | 欧美日韩在线视频观看 | 国产成人福利在线 | 99爱视频在线观看 | 99久久久国产精品免费99 | 免费人成网 | 五月婷香蕉久色在线看 | 在线亚洲观看 | 99久热在线精品视频观看 | 国产黄色片在线 | 超碰人人91 | 美女视频黄在线观看 | 色狠狠操| 午夜av电影院 | 超碰在线最新网址 | 亚洲一区二区三区精品在线观看 | 伊人久久国产 | 久久免费精品视频 | 日本精品久久久久中文字幕5 | 久久国产精品免费一区二区三区 | 91精品国产一区二区在线观看 | 免费亚洲视频在线观看 | 99精品视频在线观看视频 | 欧美日韩国产一区二区在线观看 | 日韩欧美一区二区三区免费观看 | 国产99久久久国产精品 | 久草剧场| 国产精品入口a级 | 99久久精品免费 | 国产精品久久久一区二区三区网站 | 亚洲成人资源网 | 韩国精品视频在线观看 | 伊人婷婷久久 | 欧美一二三区播放 | 成人小视频在线免费观看 | 婷婷色狠狠| 日韩夜夜爽 | 99精品网站| 欧美成人黄色片 | 国产精品久久久久久久久软件 | 欧美另类激情 | av成年人电影 | 999视频在线观看 | a级片久久久 | 美女网站色在线观看 | 久久美女免费视频 | 五月天激情综合 | 亚洲综合色av | 808电影| 超薄丝袜一二三区 | 欧美午夜精品久久久久久孕妇 | 国产精品无 | 国产成人精品一区二区三区福利 | 亚洲欧美国产日韩在线观看 | 国产一二三区在线观看 | 亚洲黄电影 | 五月天免费网站 | av免费在线观看网站 | 成人av资源 | 97国产情侣爱久久免费观看 | 99久久精品免费一区 | 视频在线99re | 97国产视频| 国产精品爽爽爽 | 精品视频亚洲 | 香蕉视频免费在线播放 | 亚洲高清在线观看视频 | 亚洲精品久久久久中文字幕m男 | 日韩av图片 | 国产成视频在线观看 | 91久久国产露脸精品国产闺蜜 | 精品一区二区三区在线播放 | 91精品久久久久久久久久久久久 | 最新极品jizzhd欧美 | 91免费的视频在线播放 | 99久久综合精品五月天 | 中午字幕在线观看 | 成人 国产 在线 | 午夜精品导航 | 久久影视中文字幕 | 奇米影视777影音先锋 | 成人av电影网址 | av7777777 | www.狠狠操 | 日韩有码第一页 | 日本在线观看中文字幕无线观看 | 久久国产品| 日韩在线观看第一页 | 九九热中文字幕 | 亚洲 欧美 另类人妖 | 五月天堂网 | 免费av一级电影 | 久久精品久久久久 | 91正在播放 | 日本中文字幕高清 | av大片免费在线观看 | 日韩综合视频在线观看 | 亚洲国内精品 | 超碰成人免费电影 | 婷婷亚洲激情 | 久久精品视频免费播放 | 中文字幕乱在线伦视频中文字幕乱码在线 | 色噜噜狠狠狠狠色综合久不 | 国产中文字幕在线免费观看 | 黄网站色成年免费观看 | 五月天亚洲综合小说网 | 日韩欧美精品在线视频 | 久久久久久久久久国产精品 | 亚洲男男gaygay无套 | 中文字幕最新精品 | 久久国语 | 亚州欧美精品 | 天天曰天天 | 国产精品免费久久久久影院仙踪林 | 午夜精品久久 | 黄色免费电影网站 | 免费观看性生活大片3 | 在线观看av黄色 | 视频二区在线 | 亚洲欧美国产精品久久久久 | 成人三级av| 国产精品porn | 伊人色**天天综合婷婷 | www.在线观看av | av免费在线观看网站 | 亚洲在线日韩 | 一区中文字幕电影 | 91精品网站 | 国产手机在线播放 | 人人揉人人揉人人揉人人揉97 | 精品视频99| 一区二区视频播放 | 久久精品美女视频 | 国产极品尤物在线 | 欧美与欧洲交xxxx免费观看 | 久久人91精品久久久久久不卡 | 91视频在线观看下载 | 成人av电影在线观看 | 狠狠插天天干 | 又长又大又黑又粗欧美 | 韩国一区二区三区在线观看 | 国产精品自拍av | 亚洲国产无 | 免费看黄色大全 | 国产精品成人一区二区三区 | 99久久婷婷国产综合亚洲 | 在线观看黄 | 日韩电影一区二区三区在线观看 | 91精品婷婷国产综合久久蝌蚪 | 免费热情视频 | 亚洲影院国产 | 欧美黄色高清 | 精品国产精品久久一区免费式 | 91亚洲精品久久久蜜桃 | 国产精品专区一 | 久久人操 | av在线网站免费观看 | 免费在线观看不卡av | 免费视频黄 | 日韩精品中文字幕在线观看 | 五月婷婷激情网 | 免费视频黄色 | 国产精品永久 | 国产精品大片 | 奇米影视8888 | 激情视频一区二区三区 | 精品自拍sae8—视频 | 久久人视频 | 97夜夜澡人人双人人人喊 | 操久在线 | 久草在线免费色站 | 激情视频网页 | 波多野结衣在线播放一区 | 91九色蝌蚪视频在线 | 日日综合网 | 亚洲激情久久 | 免费国产视频 | 国产日本亚洲高清 | 99精品视频观看 | 久久久国产精品麻豆 | 9在线观看免费高清完整版在线观看明 | 国产精品手机在线播放 | 日本特黄特色aaa大片免费 | 精品视频99 | 国产中文字幕三区 | 久久婷婷开心 | 四虎影视精品永久在线观看 | 国产精品专区一 | 午夜黄色影院 | 人人看人人爱 | 亚洲精品一区二区精华 | 日本 在线 视频 中文 有码 | 亚洲午夜激情网 | 午夜在线免费观看 | 欧美成人亚洲 | 成 人 黄 色视频免费播放 | 亚洲免费不卡 | 五月婷婷综合网 | 欧美激情综合五月色丁香 | 丁香色婷婷 | 天天色综合天天 | 欧美日韩国内在线 | 日本性生活一级片 | 天天看天天干天天操 | 特级西西444www大胆高清无视频 | 色在线最新 | 97碰在线| 99色精品视频 | 久久久久| 日韩在线观看网站 | 草久在线视频 | 人人干97 | 西西444www | 在线黄av| 亚洲在线免费视频 | 天天操天天色天天射 | 中文字幕在线影院 | 亚洲成人xxx | 久久草在线视频国产 | 九九交易行官网 | 在线免费三级 | 黄色a一级视频 | 一区二区三区四区五区在线视频 | 久草av在线播放 | 在线一二三四区 | 91免费版在线观看 | 蜜臀av性久久久久蜜臀av | 日本xxxx.com | 97视频在线免费播放 | 在线观看av片 | 天天色天天骑天天射 | 99在线视频免费观看 | 久热电影 | 日韩在线欧美在线 | 在线欧美a | 国产精品一区二区无线 | 久久成人高清视频 | 精品亚洲视频在线 | 激情综合久久 | 黄色毛片视频免费 | 在线播放第一页 | 在线亚洲日本 | 国产手机精品视频 | 久久亚洲成人网 | 日韩在线电影一区 | 黄色在线免费观看网址 | 国产精品成人久久久久久久 | 超碰97久久 | 中文字幕在线看人 | 麻豆精品视频在线 | 色综合久久综合 | 亚洲精品美女久久久久网站 | 黄色小网站免费看 | 国产高清中文字幕 | 久久精品99久久久久久 | 国产 欧美 日产久久 | 国产欧美日韩精品一区二区免费 | 亚洲无吗天堂 | 亚洲精品综合一区二区 | 国产小视频国产精品 | 激情五月激情综合网 | 久久精品一级片 | 精品在线观看一区二区 | 在线国产91 | av在线网站大全 | 日韩欧美在线中文字幕 | 波多野结衣在线视频免费观看 | 久久久久久久久黄色 | 国产精品v欧美精品 | 五月天婷婷狠狠 | 精品久久久久久久久久 | 在线观看国产高清视频 | 精品国产欧美一区二区三区不卡 | 在线免费观看羞羞视频 | 亚洲国产合集 | 国内精品久久久久影院男同志 | 国产亚洲精品久久久久久 | 最近乱久中文字幕 | 久视频在线 | 亚洲桃花综合 | 国产成在线观看免费视频 | 天天色天天上天天操 | 成年人三级网站 | 国产午夜精品一区 | 国产专区精品视频 | 中文字幕免费在线看 | 国产女人40精品一区毛片视频 | 欧美先锋影音 | 久久久久亚洲国产精品 | 国产理论在线 | 欧美另类交人妖 | 91精品国产三级a在线观看 | 亚洲精品国产综合久久 | 成人看片 | 免费国产在线视频 | 少妇搡bbbb搡bbb搡忠贞 | 亚洲精品高清视频 | 中文乱幕日产无线码1区 | 一区 二区电影免费在线观看 | 亚州精品成人 | 国产在线2020 | 在线一二三四区 | 午夜婷婷综合 | 欧美一区二区在线免费观看 | 国产福利午夜 | 欧美精品一区二区免费 | 9草在线 | 中文字幕在线观看视频一区二区三区 | 国产精品亚 | 91综合视频在线观看 | 成人一级片视频 | 色婷婷综合久久久中文字幕 | 久久婷婷影视 | 午夜美女视频 | 99人久久精品视频最新地址 | 色视频网站免费观看 | 成人一区二区在线 | 精品久久五月天 | 国产日本在线观看 | 久久国产精品免费 | 欧美性久久久久久 | 久久婷婷综合激情 | 日韩精品一区二区在线观看视频 | 国产不卡网站 | 日韩二区三区在线 | 国产亚洲无 | 久草干| 国产午夜精品福利视频 | 亚洲精品资源在线 | 波多野结衣在线中文字幕 | 玖玖国产精品视频 | 美女啪啪图片 | 日日夜夜免费精品 | 久久精品视频99 | 午夜精品久久久久久久久久久久久久 | 97超碰人人澡人人爱 | 免费合欢视频成人app | 99久久婷婷 | 亚洲午夜久久久久久久久久久 | 国产成人精品aaa | www.天天干 | 午夜精品一区二区三区在线视频 | 国产在线观看99 | 成年人网站免费在线观看 | 青草视频在线看 | 久久精品福利 | 久久久蜜桃 | www四虎影院| 四虎国产精品永久在线国在线 | 成人欧美一区二区三区在线观看 | 国产精品九九久久久久久久 | 丁香色综合 | 国产最新在线视频 | 久久久久综合视频 | 午夜久久电影网 | 国产一级黄色电影 | 成人黄色中文字幕 | 亚洲精品视频在线观看网站 | 亚洲一区二区三区四区精品 | 成年人在线播放视频 | 精品欧美一区二区三区久久久 | 久久久久久久久福利 | 国产亚洲欧美精品久久久久久 | 国产精品久久久久久久免费大片 | 日本精品中文字幕在线观看 | 黄色av一级片 | 激情综合中文娱乐网 | 久久久精品电影 | 四虎8848免费高清在线观看 | 国产精品久久久久久久免费 | 国产在线视频导航 | 亚洲最大免费成人网 | 久久精品视频播放 | av福利在线 | 国产尤物在线观看 | 国产精品一区二区在线观看免费 | 日本三级人妇 | 成人动漫一区二区三区 | 久久手机免费视频 | 韩国三级在线一区 | 91伊人久久大香线蕉蜜芽人口 | 黄色成人影院 | 欧美精品一区二区三区一线天视频 | 国产精品久久9 | 精品电影一区二区 | 日韩午夜精品福利 | 91麻豆精品国产自产在线游戏 | 一区二区三区www | 国产精品一区二区免费视频 | 96精品高清视频在线观看软件特色 | 久久久久欠精品国产毛片国产毛生 | 五月婷婷,六月丁香 | 69精品久久 | 国产在线一区二区 | 日本成人免费在线观看 | www.综合网.com | 色综合天天综合网国产成人网 | 国产精品va在线 | 久久 亚洲视频 | 又黄又爽的免费高潮视频 | 亚洲成人精品在线观看 | 国产福利在线免费观看 | 国产视频在线一区二区 | 欧美伊人网 | 91精品视频免费看 | 91麻豆精品国产 | 日韩欧美一区二区在线 | 精品一区二区视频 | 天天插天天爽 | 欧洲av不卡 | 日韩大陆欧美高清视频区 | 国产手机精品视频 | 精品国产一区二 | 韩日成人av| 国产精品黄 | 麻豆一二三精选视频 | 国产一级片观看 | 五月婷婷中文 | 国产视频久久 | 国产精品成人aaaaa网站 | 中文字幕在线播放日韩 | 国内偷拍精品视频 | 国产亚洲精品中文字幕 | 99re视频在线观看 | 中文字幕黄色网 | 西西44人体做爰大胆视频 | 99视频在线播放 | 亚洲天天在线日亚洲洲精 |