青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Where there is a dream ,there is hope

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  64 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

#

晚上 抽風 ,折騰電腦 ,安 了 個 UBUNTU.
夜深了 ,明早起 來 在 這 下 面 寫個 小 程序玩下 .

posted @ 2010-10-23 01:26 IT菜鳥 閱讀(211) | 評論 (0)編輯 收藏

綜述

參看前面的教程基礎, 對象創建, 時鐘 , 框架層次結構動畫 視口與攝像機,和 聲音與音樂
這篇教程介紹了什么是特效以及如何創建它們
特效是將曲線及其組合而成的一組數據(正弦線、三角型邊、矩形或者線性),應用在不同類型的參數中。如:縮放、旋轉、位置、速度、顏色等。

特效在配置文件中設置,僅僅只需要一行代碼就可以在對象上使用這些特效。
可以有最多8條任意類型的曲線組合在一起形成一個特效。
在同一時間,可以有最多4個特效應用于同一個對象上面。

特效可以使用絕對值或者相對值,這取決于配置文件中Absolute標簽。
控制曲線的周期、相位、和振幅都是允許的。
對于位置和速度特效來說,輸出值可以使用對象的方向 和/或 縮放值,以相對方式應用于對象目前的狀態。

這也就允許我們創造極其拉風的視覺特效。

除非特效已經緩存在內存中,否則特效參數全部在配置文件中進行調整,并且使用退格鍵來即時重載。 (cf.通過 KeepInCache 屬性來實現內存的緩存).
比如說:你不能調整正在運行的循環特效,因為他已經在默認的配置文件中定義好了。在這個測試程序運行的時候,所有其它的特效能夠被更新。

通常說來,隨機值的使用可以給特效帶來更多的變化。
比如, 晃動方式的縮放(the wobble scale), 帶顏色的閃光(the flash color) 和 攻擊式的移動(the “attack” move) 等特效就使用了少量的隨機值.

就像顯示事件一樣,我們也可以注冊特效的開始播放和停止的事件。因為循環時間是永遠不會停下來的,所以對應的停止事件(orxFX_EVENT_STOP)永遠不會發生. 我們也會簡單的介紹一下如何一些個性數據(僅僅包含一個布爾值的結構)添加到orxOBJECT中。1)
在事件的回調函數中,我們通過它,在特效開始的時候為對象加鎖,在結束的時候解鎖。
我們使用鎖是為了讓soldier(士兵)在同一時刻只有一個特效在發揮作用。
把這些東西寫在這里,僅僅具有教育意義。2)

詳細內容

通常,我們先載入配置文件,創建一個時鐘,然后注冊更新函數,最后,創建我們的士兵和盒子對象。請在之間的教程中獲取更多信息。 .

然后,我們注冊輸入和特效事件

orxEvent_AddHandler(orxEVENT_TYPE_FX, EventHandler);
orxEvent_AddHandler(orxEVENT_TYPE_INPUT, EventHandler);

大家可以看到,在這兩個事件中,我們使用了同一個回調函數(EventHandler).

現在我們迅速的掃一眼自己的“對象”數據結構。

typedef struct MyObject
{
orxBOOL bLock;
} MyObject;

接下來,看看如何用 orxObject_SetUserData()將它綁定到soldier上

MyObject *pstMyObject;
 
pstMyObject = orxMemory_Allocate(sizeof(MyObject), orxMEMORY_TYPE_MAIN);
pstMyObject->bLock = orxFALSE;
 
orxObject_SetUserData(pstSoldier, pstMyObject);

現在看看如何在Update函數中使用特效

orxSTRING zSelectedFX;
 
if(orxInput_IsActive("SelectWobble"))
{
zSelectedFX = "WobbleFX";
}
else if(orxInput_IsActive("SelectCircle"))
{
zSelectedFX = "CircleFX";
}
 
[...]
 
// Soldier not locked?
if(!((MyObject *)orxObject_GetUserData(pstSoldier))->bLock)
{
if(orxInput_IsActive("ApplyFX") && orxInput_HasNewStatus("ApplyFX"))
{
orxObject_AddFX(pstSoldier, zSelectedFX);
}
}

可以看到,我們通過orxObject_GetUserData()這個函數得到了我們想要的數據,向solder里添加特效的方法跟添加聲音的方法如出一轍,用的都是這個函數orxObject_AddFX()。

接下來,看看EventHandler這個函數

首先是輸入方面,這里只展示了每次輸入時哪個按鍵被使用了。

if(_pstEvent->eType == orxEVENT_TYPE_INPUT)
{
if(_pstEvent->eID == orxINPUT_EVENT_ON)
{
orxINPUT_EVENT_PAYLOAD *pstPayload;
 
pstPayload = (orxINPUT_EVENT_PAYLOAD *)_pstEvent->pstPayload;
 
if(pstPayload->aeType[1] != orxINPUT_TYPE_NONE)
{
orxLOG("[%s] triggered by '%s' + '%s'.", pstPayload->zInputName, orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0]), orxInput_GetBindingName(pstPayload->aeType[1], pstPayload->aeID[1]));
}
else
{
orxLOG("[%s] triggered by '%s'.", pstPayload->zInputName, orxInput_GetBindingName(pstPayload->aeType[0], pstPayload->aeID[0]));
}
}
}

正如你所見,我們通過按下的是一個單鍵還是一個組合鍵來判斷展示不同的信息。

我們僅使用了兩個首次輸入點,因為我們知道,我們的配置文件中沒有超過兩個的組合鍵。盡管orx支持最多四個組合鍵來做為一個單鍵。

orxInput_GetBindingName() 函數給了我們一個輸入的文字顯示。

注意:這些名稱在配置文件中也綁定到了對應的按鍵上面。

現在來看下如何處理這個事件

if(_pstEvent->eType == orxEVENT_TYPE_FX)
{
orxFX_EVENT_PAYLOAD *pstPayload;
orxOBJECT           *pstObject;
 
pstPayload = _pstEvent->pstPayload;
pstObject  = orxOBJECT(_pstEvent->hRecipient);
 
switch(_pstEvent->eID)
{
case orxFX_EVENT_START:
orxLOG("FX <%s>@<%s> has started!", pstPayload->zFXName, orxObject_GetName(pstObject));
 
if(pstObject == pstSoldier)
{
// Locks it
((MyObject *)orxObject_GetUserData(pstObject))->bLock = orxTRUE;
}
break;
 
case orxSOUND_EVENT_STOP:
orxLOG("FX <%s>@<%s> has stoped!", pstPayload->zFXName, orxObject_GetName(pstObject));
 
if(pstObject == pstSoldier)
{
// Unlocks it
((MyObject *)orxObject_GetUserData(pstObject))->bLock = orxFALSE;
}
break;
}
}

在soldier上的動畫開始的時候,我們用自己的數據結構來鎖定它,相應的,停止的時候解鎖。

看完了代碼部分,我們再去看看配置文件。

首先看個簡單的特效 :盒子上旋轉的特效。

[RotateLoopFX]
SlotList  = Rotate
Loop      = true
 
[Rotate]
Type        = rotation
StartTime   = 0.0
EndTime     = 2.0
Curve       = sine
Pow         = 2.0
StartValue  = 0
EndValue    = 360
 
[Box]
FXList = RotateLoopFX

看到了吧,特效是在它創建之初直接應用在盒對象上面的,而不是在代碼中。

RotateLoopFX包含僅包含一個時間段(Rotate)并且一直循環(attribute Loop)

然后定義Rotates時間段。時間的單位都是秒,角度的單位都是度。

定義這個旋轉動畫的時候,我們使用了一個正弦曲線,讓他每兩秒旋轉360度。

下面看下我們的搖擺特效。

[WobbleFX]
SlotList = Wobble
 
[Wobble]
Type          = scale
StartTime     = 0.0
EndTime       = 1.0
Period        = 0.2
Curve         = sine
Amplification = 0.0
StartValue    = (1.0, 1.0, 1.0)
EndValue      = (2.0, 2.0, 1.0) ~ (6.0, 6.0, 1.0)

我們修改了scale屬性,并賦予它一個StartValue(開始值)和EndValue(結束值)。
他們都是用向量來表示的,如果不想使用任何各向異性的值(譯者注:專業名詞anisotropic(各向異性)去知道確切意思)的話,也可是使用float類型來表示。
雖然看起來我們正在使用一個isotropic(各向同性)3)的值,這個EndValue也不過是一個隨機值。

也就是說,它的X和Y部分可能是完全統統的隨機值!

除此之外,我們使用了一個簡單的周期為0.2 秒的正弦曲線,它將會播放1秒鐘。

看到了吧,我們將Amplification(增幅) 的值設為0,這就是說,隨著時間的推進,曲線的振幅會逐漸變低。注意:默認的Amplification是1,表示不隨時間變化,保持穩定,當值大于1時,振幅就會加大;當值小于1時,振幅就會減少。

看看圓是如何運動的。

[CircleFX]
SlotList        = CircleX#CircleY
KeepInCache     = true
 
[CircleX]
Type            = position
StartTime       = 0.0
EndTime         = 1.0
Curve           = sine
StartValue      = (0.0, 0.0, 0.0)
EndValue        = (-50.0, 0.0, 0.0)
UseOrientation  = true
UseScale        = true
 
[CircleY@CircleX]
Phase       = 0.25
StartValue  = (0.0, -25.0, 0.0)
EndValue    = (0.0, 25.0, 0.0)

Here we need to use 2 slots that affects the position so as to be able to have a circle motion.
The first slot, CircleX, will apply a sine curve on the X component of our object's position.
The second slot, CircleY, will apply the same curve (with a different amplitude) on its Y component.

我們使用兩個時間段來控制它的位置,這樣才能做出一個圓形的運動。第一個時間段是CircleX,他將會應用在對象的X軸向的振幅。第二個時間段CircleY,會產生一個同樣幅度的作用效果在Y軸上。

如果我們不更改CircleY的相位,是不會發生圓形的運動。

現在假設一個正弦曲線,在初始值(StartValue)是相位0,準備增加

在相位0。25的時候,到達中間點,將會繼續增加

在相位0.5的時候,到達最高值(EndValue),準備下降

在相位0.75的時候,回到中間點,繼續下降

在相位1.0的時候,就跟相位0(StartValue)是一樣的了

注意:這段描述正弦曲線的工作過程也同樣適用于三角形,但是卻不適用于線形。

我們將略過大多數其他的特效,因為那里沒有什么我們不知道的新知識了。

但是我們還是要迅速的看一眼翻轉的特效,他將會向我們展示如何翻轉一個對象。就像Paper Mario Wii4)的風格.

[FlipFX]
SlotList = Flip
 
[Flip@Wobble]
EndTime       = 0.5
Period        = 1.0
Amplification = 1.0
EndValue      = (-1.0, 1.0, 1.0)

看到了吧,我們很簡單的使用負值完成了這個效果! =)
同時也注意到,我們給Period(周期)設了一個明確的值。
我們選了一個兩倍于定義的正弦曲線的Period,這樣我們就只使用了正弦曲線的上升的那一半。同時,我們也將Amplification改回了1。(在”“Wobble”“中被設為0)

資源

源代碼: 07_FX.c

配置文件: 07_FX.ini

1) 九天注:這里作者有點穿越了,需要看下面的例子才能懂,作者定義了一個僅包含一個Bool值的結構MyObject,這里的括號,作者打在了orxOBJECT后面,我費解了N久,其實應該修飾個性數據,所以個人調整了一下。
2) 九天注:本來一個對象可以同時有4個特效發生,這里作者僅僅是告訴你怎么使用“個性數據”才這樣做的,所以說僅僅具有教育意義。
3) Z值不影響2D元素
4) 九天注:Wii上的紙片馬里奧是個很出名的游戲,作者的意思就是這里的flip描述的就是那個游戲里面的風格和效果
posted @ 2010-07-07 08:58 IT菜鳥 閱讀(327) | 評論 (0)編輯 收藏

     摘要: 綜述 這篇教程介紹了什么是特效以及如何創建它們   特效是建立在曲線集(線、三角形、矩形、)之上的,它們具有不同參數如:大小、旋度、位置、速度、顏色等。   特效在配置文件中設置,僅僅只需要一行代碼就可以在對象上使用這些特效。 8條任意類型的曲線組合在一起就可以形成一個特效。 在同一時間,可以有多達4個特效應用于同一個對象上面。   特效可以使用絕對...  閱讀全文
posted @ 2010-07-06 13:27 IT菜鳥 閱讀(424) | 評論 (0)編輯 收藏

原文:http://orx-project.org/wiki/en/orx/tutorials/anim

綜述

這篇教程只涉及了orx中最基本的動畫使用。

更多關于動畫的東西在這里 猛擊我.

圖定義了動畫間所有可能的切換方式。動畫通過一個唯一的字符串來引用。所有的切換和動畫都是通過配置文件來創建的。
當一個動畫被請求的時候,引擎會計算從當前動畫到請求動畫之間的鏈路
如果這個鏈路存在,它會自動執行。用戶將通過事件被告知動畫何時開始、停止、刪節或者循環。
如果我們不能具體制定任何目標動畫,引擎就會很自然的沿著屬性中定義的線路(走下去)。
也有一個方法來越過這個尋路過程并且迅速的指向一個動畫。

詳細內容

通常,我們先載入config file(配置文件),創建一個viewport,創建一個clock(時鐘)并且注冊Update(更新)函數,最后創建一個主對象。
請從之前的教程中獲得更多的信息。

現在我們開始從代碼入手,我們將會從本頁的底部看到數據是如何組織的。
在Update函數中,當輸入GoLeft激活的時候會觸發WalkLeft動畫;GoRight激活的時候會觸發WalkRight函數.
當沒有激活態的輸入時,我們會移除目標動畫,讓這個圖保持一個自然的狀態

if(orxInput_IsActive("GoRight"))
{
  orxObject_SetTargetAnim(pstSoldier, 
"WalkRight");
}

else if(orxInput_IsActive("GoLeft"))
{
  orxObject_SetTargetAnim(pstSoldier, 
"WalkLeft");
}

else
{
  orxObject_SetTargetAnim(pstSoldier, orxNULL);
}

就是這樣!如何從任意當前動畫切換到目標動畫將會通過這個矢量圖來計算。如果需要切換,他們將會自動播放。
注意:有很多的函數可以用高級的方法來控制動畫,但是99%的時候,這兩個函數是最常用的(orxObject_SetCurrentAnim() 和 orxObject_SetTargetAnim())。

讓我們來看一下,動畫是如何通知我們發生了什么的(比如,就像同步語音一樣)。
首先,我們要向動畫事件注冊回調函數。

orxEvent_AddHandler(orxEVENT_TYPE_ANIM, EventHandler);

好了!讓我們看下現在可以做什么了。
我們說我們想要打印出對象中哪個動畫被播放、停止、剪切或者循環。需要寫一下的回調函數。

orxSTATUS orxFASTCALL EventHandler(const orxEVENT *_pstEvent)
{
orxANIM_EVENT_PAYLOAD 
*pstPayload;
 
pstPayload 
= (orxANIM_EVENT_PAYLOAD *)_pstEvent->pstPayload;
 
switch(_pstEvent->eID)
{
  
case orxANIM_EVENT_START:
    orxLOG(
"Animation <%s>@<%s> has started!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_STOP:
    orxLOG(
"Animation <%s>@<%s> has stoped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_CUT:
    orxLOG(
"Animation <%s>@<%s> has been cut!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
 
  
case orxANIM_EVENT_LOOP:
    orxLOG(
"Animation <%s>@<%s> has looped!", pstPayload->zAnimName, orxObject_GetName(orxOBJECT(_pstEvent->hRecipient)));
    
break;
  }

 
  
return orxSTATUS_SUCCESS;
}

先得到了事件的payload指針,因為我們只是在這里傳遞動畫事件,所以我們可以安全的將payload 轉化為orxANIM_EVENT_PAYLOAD類型,它在 orxAnim.h中定義。
如果我們在不同的事件(譯者注:原文是even 根據上下文推斷是作者拼寫錯誤)類型中調用了同一個回調函數,我們首先將會查看是否得到了一個動畫事件,可以這樣做:

if(_pstEvent->eType == orxEVENT_TYPE_ANIM)

最后,事件接收者(_pstEvent→hRecipient)通常是播放動畫的那個對象。將其用宏orxOBJECT()來轉化為orOBJECT類型的對象。

現在讓我們來看一眼數據方面的東西吧。
首先,我們需要定義一個動畫集,它將會包含指定對象的動畫的整個矢量圖。
動畫集在不會再內存中重復,并且它與矢量圖相對應的多有動畫和鏈路。
在上面這個例子中,我們又4個動畫和10條可以用來切換的鏈路。

[AnimSet]
AnimationList 
= IdleRight#WalkRight#IdleLeft#WalkLeft
 
LinkList 
= IdleRightLoop#IdleRight2Left#IdleRight2WalkRight#WalkRightLoop#WalkRight2IdleRight#IdleLeftLoop#IdleLeft2Right#IdleLeft2WalkLeft#WalkLeftLoop#WalkLeft2IdleLeft

現在我們來開始定義動畫!
在這之前,為了減少文章篇幅,我們將要使用orx 配置文件的集成特性。
先錨點的位置定義一項。
也許你可能在對象教程中看到了錨點的相關知識,錨點的位置信息將會匹配世界中的對象。如果沒有確定的話,將會把左上角做為默認值。
錨點可以通過語義關鍵字來確定,如: top, bottom, center, left and right也可以通過實際的值來確定。

[Pivot]
Pivot 
= (15.031.00.0)

現在,我們來定義從錨點繼承過來的圖像對象。在我們這個例子中,它是一個位圖,,包含了對象中所有的幀。因此基本的屬性就是 位圖文件的名字和一幀的大小。

[FullGraphic@Pivot]
Texture     
= ../../data/anim/soldier_full.png
TextureSize 
= (32320)

創建幀的準備工作都做好了。
讓我們定義所有都是right-oriented的動畫。一共6個。

[AnimRight1@FullGraphic]
TextureCorner 
= (000)
 
[AnimRight2@FullGraphic]
TextureCorner 
= (0320)
 
[AnimRight3@FullGraphic]
TextureCorner 
= (0640)
 
[AnimRight4@FullGraphic]
TextureCorner 
= (3200)
 
[AnimRight5@FullGraphic]
TextureCorner 
= (32320)
 
[AnimRight6@FullGraphic]
TextureCorner 
= (32640)


看到了吧,他們全都繼承于FullGraphic,唯一能區分他們的屬性就是TextureCorner. 好,我們已經定義完了所有的圖形對象(他們載入的時候會轉變為orxGraphic結構),下面定義動畫本身。讓我們從ideright動畫開始說起,它包含一個單幀并持續0.1秒。

[IdleRight]
KeyData1      
= AnimRight6
KeyDuration1  
= 0.1


太簡單了,來嘗試下第二個:

[WalkRight]
DefaultKeyDuration  
= 0.1
KeyData1            
= AnimRight1
KeyData2            
= AnimRight2
KeyData3            
= AnimRight3
KeyData4            
= AnimRight4
KeyData5            
= AnimRight5
KeyData6            
= AnimRight6


當我們使用DefaultKeyDuration屬性同時為所有的幀定義時并不是很難。我們可以像idleright動畫中所做的那樣,通過一個確定的鍵值來覆蓋任意一幀。我們如法炮制做出left-oriented動畫。通常我們使用翻轉圖形對象時,我們將會在代碼運行中做這件事。但是那不是我們的目的!讓我們來用與前面那個完全不同的方法來實現它!只有鏈路沒有提到了讓我們添上它。基本的鏈路結構非常簡單,我們指定源動畫和目的動畫。

[IdleRightLoop]
Source      
= IdleRight
Destination 
= IdleRight

這里,我們有跟之前一樣的基本信息,但是多了一個immediate屬性做為鍵值。這就是說,當我們處于IdleRight動畫時,并且目標是WalkRight,我們不必等到IdleRight完成,將直接完成這個動作,這就給了我們一個剪切動畫的方法。 正如在代碼中看到的一樣。當我們已經開始行走的時候,沒有顯式的調用空閑動畫,這是怎么做到的?看下從WalkRight到IdleRight的鏈路。

[IdleRight2WalkRight]
Source      
= IdleRight
Destination 
= WalkRight
Property    
= immediate


當我們再WalkRight狀態并且移除了目標動畫,引擎不得按照自然的路線走下去。這個意思是說,它會選取高優先級的鏈路。默認的優先級是8,它的范圍是0到15.在這里,優先級是9,也就是說當我們沒有目標的時候,就會選取它。它將會帶我們回到IdleRight狀態。這里也加了immdiate屬性,這樣,我們就不必等“走”這個循環完事再回到“空閑”
 
注意:這只是一個非常基本的圖,用來闡述基本的動畫切換過程,但是這個系統的擴展性很高。比如假設這樣一個場景:你想從坐的狀態變為走的狀態,中間沒有別的過度。隨著游戲的開發,你可能覺得在這兩個狀態間加一個站立的狀態會比較好。這時,你只需要再配置文件中添加這多出來的一步,而整個代碼文件都不用更改。

資源:

源文件: 04_Anim.c
配置文件: 04_Anim.ini
posted @ 2010-07-05 23:21 IT菜鳥 閱讀(570) | 評論 (1)編輯 收藏

僅列出標題
共7頁: 1 2 3 4 5 6 7 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲伦理一区| 免费亚洲一区二区| 欧美日韩八区| 美女日韩在线中文字幕| 亚洲欧美日韩综合| 夜夜精品视频一区二区| 国产精品99久久久久久久久久久久| 亚洲韩日在线| 亚洲国产精品日韩| 一本色道久久99精品综合| 一本色道久久88综合亚洲精品ⅰ| 亚洲一区二区三区777| 欧美一二三视频| 久久青青草综合| 免费在线成人| 国产精品福利在线观看| 红桃视频亚洲| 亚洲永久免费精品| aa国产精品| 亚洲美女av网站| 亚洲视频一区| 久久久久久久网站| 欧美日韩国产大片| 狠狠噜噜久久| 亚洲视频在线观看| 久久男女视频| 国产一区二区在线观看免费| 欧美高清不卡在线| 国产精品久久久久久久久| 国产亚洲一区在线| 亚洲视频大全| 亚洲第一区中文99精品| 午夜日韩在线观看| 欧美日韩性视频在线| 亚洲第一页自拍| 久久精品免费播放| 亚洲永久在线| 欧美三级在线播放| 亚洲国产视频a| 久久久久久久久久久久久9999| 亚洲大片在线观看| 久久精品国产第一区二区三区| 欧美色图五月天| 亚洲精品中文字| 免费亚洲视频| 久久久精品999| 国产午夜精品视频免费不卡69堂| 中文av一区二区| 最新国产成人在线观看| 久久精品女人的天堂av| 国产伦精品一区二区| 亚洲午夜成aⅴ人片| 亚洲国产岛国毛片在线| 久久资源在线| 亚洲成人直播| 你懂的网址国产 欧美| 久久国产天堂福利天堂| 国内精品久久久| 久久网站免费| 久久免费视频网| 亚洲国产精品日韩| 欧美国产日产韩国视频| 久久人人97超碰国产公开结果| 国产一区二区视频在线观看| 久久天天狠狠| 美女日韩欧美| 亚洲色在线视频| 亚洲一级黄色片| 国产综合网站| 欧美高清视频www夜色资源网| 久久久久久久久久久一区| 国产亚洲欧美一区二区三区| 久久久999国产| 久久香蕉国产线看观看av| 亚洲激情影院| 亚洲精品你懂的| 欧美成人精品| 亚洲一区二区高清视频| 亚洲免费在线精品一区| 国语自产在线不卡| 亚洲大胆美女视频| 欧美日韩亚洲一区二区三区四区| 亚洲欧美www| 久久国产精品一区二区三区| 亚洲二区在线视频| 亚洲美女在线视频| 亚洲欧美三级在线| 美国三级日本三级久久99| 久久亚洲综合| 99这里只有久久精品视频| 亚洲天堂第二页| 国产一区二区在线免费观看| 欧美激情一区二区三区在线视频观看| 欧美日韩播放| 免费精品视频| 国产精品一区二区三区四区五区 | 欧美中文字幕不卡| 亚洲精品一区二区三区不| 亚洲视频1区2区| 亚洲国产精品成人综合| 亚洲一区二区三区在线播放| 亚洲人成艺术| 久久丁香综合五月国产三级网站| 日韩一级精品| 玖玖综合伊人| 久久精品最新地址| 欧美日韩亚洲一区二区三区| 欧美aⅴ99久久黑人专区| 国产精品视频免费观看www| 欧美jjzz| 韩国在线一区| 午夜日本精品| 午夜欧美视频| 欧美性jizz18性欧美| 亚洲国产精品久久91精品| 国产真实久久| 亚洲欧美一区二区原创| 亚洲午夜免费视频| 欧美精品久久久久a| 欧美成人免费播放| 狠狠做深爱婷婷久久综合一区| 亚洲一区视频在线| 亚洲欧美久久久久一区二区三区| 欧美精品日本| 亚洲经典自拍| 亚洲精品一二三区| 蜜臀av国产精品久久久久| 另类激情亚洲| 黄网动漫久久久| 久久国产精品72免费观看| 欧美中文日韩| 国产亚洲成av人片在线观看桃| 亚洲综合色自拍一区| 欧美亚洲视频在线观看| 欧美午夜影院| 亚洲一区二区三区三| 欧美一级淫片播放口| 国产精自产拍久久久久久蜜| 亚洲欧美日韩天堂一区二区| 欧美在线在线| 在线观看91精品国产麻豆| 久久躁日日躁aaaaxxxx| 欧美黄色小视频| 亚洲精品一级| 欧美日韩免费观看中文| av成人毛片| 欧美在线播放视频| 狠狠色香婷婷久久亚洲精品| 久久免费视频一区| 亚洲高清视频一区二区| 亚洲美女一区| 亚洲福利免费| 久久久精品性| 久久久91精品国产| 禁断一区二区三区在线| 久久躁日日躁aaaaxxxx| 亚洲国产欧美另类丝袜| 一区二区三区精品视频在线观看| 欧美日韩三级电影在线| 亚洲欧美日韩在线高清直播| 久久免费精品视频| 亚洲国产91| 欧美日韩中国免费专区在线看| 一区二区动漫| 久久久久久一区二区| 在线欧美日韩国产| 欧美日韩视频第一区| 欧美伊人精品成人久久综合97| 欧美va天堂va视频va在线| 一本色道久久99精品综合| 国产日韩一区二区| 欧美好骚综合网| 午夜视频久久久久久| 亚洲激情综合| 久久久久网站| 亚洲一区二区三区免费视频| 狠狠色伊人亚洲综合成人| 欧美午夜精品久久久久久孕妇| 久久国产精品黑丝| 一本综合久久| 欧美大片第1页| 欧美亚洲自偷自偷| 亚洲精品乱码久久久久久日本蜜臀 | 免费亚洲视频| 亚洲欧美美女| 亚洲日本成人女熟在线观看| 欧美在线视频免费观看| 99在线|亚洲一区二区| 国语自产偷拍精品视频偷| 国产精品草草| 欧美精品日韩综合在线| 久久精品亚洲精品| 亚洲欧美激情一区二区| 亚洲欧洲美洲综合色网| 蜜桃精品久久久久久久免费影院| 午夜欧美精品久久久久久久| 一区二区三区你懂的| 亚洲乱码一区二区| 亚洲精品久久久久久久久| 亚洲二区在线视频|