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

戰魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

#

    《洞穴Portal》是一款以HL2引擎制作的FPS游戲,該作與其他FPS在游戲方法上有很大不同,以往的FPS都是以使用各種武器屠殺敵人為主,而《洞穴Portal》在游戲方式上顯得非常聰明,他不追求殺戮的快感,也不追求畫面的華麗。游戲的關鍵在于利用空間傳送,打開空間入口,完成各種迷題。

    本作強調解迷,挑戰玩家們的邏輯思維能力。在游戲中,主角的武器就是一把可以打開通往任意空間入口的傳送槍,傳送槍不但可以打開空間入口,還可以挪動地上的物品攻擊敵人,空間將再也無法束縛你的腳步,能神不知鬼不覺的消滅敵人!

    Valve還宣布,Valve將隨PC版《半條命2:第二章》、PS3和X360版《半條命2》一起推出這款全新的單人游戲。

 

先來熟悉下Portal游戲怎么玩

http://v.youku.com/v_show/id_XODk3MTMwOA==.html

 

現在討論3d實現方法,看圖

GK}TW)$ESO4C{UDNS(PUBQA

圖中,圓圈代表玩家,方塊代表2個門,從圓圈發出的直線代表玩家行進方向,重力向下,側向圖

這個圖表示在地面打開2個門,玩家從一個門進入,進入到另外一個世界

要實現這個圖,需要建立4個世界

 

]DT4$O[HUJ1F04ZS_SMDEYS

這是更加復雜的例子,注意看左上角,玩家在墻上和地上分別打了洞。從墻上的洞進入,會從地面上出來

要實現圖,需要建立4個世界

 

 

]RVSNZKH19@I89__9KKUENS

這是一個特例,玩家在世界的平臺上打洞,和在世界邊緣打了個洞。雖然是建立2個世界,但是左邊的世界明顯和右邊的世界不是等大的

 

其實Portal的原理,我們早在叮當(現在叫多啦A夢)的任意門就實現了,但是打開門的世界與進入前的世界處于2個地方。當在同一個地方開2個洞,就是portal的實現

 

要實現Port有幾個難題

1. 怎么進入到另外一個世界

看到另外一個世界很簡單,通過另外一個Camera渲染出來做成貼圖即可

但是要能進入,那必須是幾何空間是通透的


 

2. 到底構建幾個世界?

其實根據在游戲中的分析與一些資料的透露,建立2個世界即可

 

3. 切換到另外一個世界時,我(攝像機)不需要更換?

實際看下來可以是,我進入到另外一個世界,而另外一個世界進入到我的世界

 

4. 怎樣處理世界遞歸?

這是個有趣的話題,現實世界也存在這樣的問題,比如說,你用2面鏡子對著,眼睛從當中的一面看另外一面,就會形成視覺遞歸,只不過你不能進入到那個世界而已

類似于本文開頭的遞歸世界圖片,這個在Portal游戲中是有設置遞歸層級的,應該是受到渲染限制的,因此世界創建的個數應該與遞歸層級有關系。

posted @ 2009-07-16 11:40 戰魂小筑 閱讀(643) | 評論 (1)編輯 收藏

現在是網絡游戲當紅的時代,因為其模式方便賺錢,玩家也喜歡交流。但畢竟真正的游戲感覺,動作感還是單機游戲。怎樣讓單機游戲重振雄風呢?

街霸4開始使用在線存檔的設定。也就是說,玩家可以用盜版,但是存檔時可能需要賬號。這就需要注冊或者付費。但是帶來的好處是什么?玩家玩過的經典游戲都可以重新歸來

但是類似于 C&C4必須要保持連接這種惡心設定就遭人鄙視

posted @ 2009-07-16 10:19 戰魂小筑 閱讀(267) | 評論 (0)編輯 收藏

試用了下lua專屬的注釋生成文檔工具luaDoc,基本模式和doxygen差不多,不過感覺更簡單一些

1. 前期準備工作,及編譯方法

luaDoc需要依賴luaFileSystem和luaLogging,因此我使用的是一個整合包http://luaforwindows.luaforge.net/

要開始使用時,在5.1\lua下找到luadoc_start.lua文件,這個文件就是luadoc的啟動文件

找到你需要制作的lua文件的目錄制作一個類似這樣的bat

lua "d:\Program Files\Lua\5.1\lua\luadoc_start.lua" xxx.lua

這里注意:lua是已經注冊到系統路徑的,如果你沒有安裝整合包,需要手動加一下

如果需要批量生成,只需要用*.lua既可以

生成出來的網頁文件放置在你的源碼目錄,用index.html開始查看

 

2. 讓luaDoc識別程序里的注釋

看下基本注釋結構:

--- 繼承于某table的屬性及函數
-- @param selfclass 某table
-- @param parentclass 需要繼承的table
-- @return 繼承后的類
-- @usage local _widgetnotebox =  _Inherit( {}, WIDGET_BASE )
function _Inherit( selfclass, parentclass )
    if not parentclass then
        error("parentclass null", 2 )
    end
    return setmetatable( selfclass, 
    {
    __index = function( t, k )
        local ret = parentclass[k]
        selfclass[k]= ret
        return ret
    end
    
    } )
end
luaDoc從---開始識別你的函數注釋,這個被放置于函數主要說明中
@param用作參數說明,selfclass標記是哪個參數的說明
@return說明返回值
@usage就是一些例子
posted @ 2009-07-15 17:47 戰魂小筑 閱讀(798) | 評論 (0)編輯 收藏

lua的第三方庫還是很豐富的,來看下

http://luaforwindows.luaforge.net/

 

luaCom 支持COM調用

LuaDoc 支持lua代碼的文檔生成,我最需要的

LuaExpat 支持XML解析

LuaFileSystem 文件系統訪問

LuaLogging, 基于log4j的日志

LuaProfiler 性能測試工具

LuaSocket 不用說了吧,網絡庫,支持HTTP,FTP,SMTP, MIME, URL & LTN12協議

LuaSQL 支持PostgreSQL, ODBC, MySQL, SQLite, Oracle, ADO

LuaZip 支持zip讀取及打包

LuaInteface .NET的lua包

wxLua 支持lua調試及使用wxWidgets UI庫

LOOP支持OO方式的lua

posted @ 2009-07-14 17:45 戰魂小筑 閱讀(2399) | 評論 (0)編輯 收藏

魔獸的UI插件結構

1.使用lua+XML作為配置

    分析:XML雖然人機交互很好,但其實沒有幾個UI是真正用純XML寫的,大多還是用編輯器比較方便。速度很慢,但尚不清楚魔獸代碼里是否進行優化

2. Interface\Addons為插件目錄,文件夾可以堆疊

3. 每個插件組,需要一個toc文件來做文件讀取列表描述,類似于:

# Libraries
embeds.xml

AceGUIWidget-DragLink.lua
Core.lua

# Localization
Locale-enUS.lua
Locale-zhCN.lua
Locale-zhTW.lua

AutoBarDB.lua
AutoBarOptions.lua
AutoBarSearch.lua

4.一個插件組里可以擁有多個lua文件,都共享一個獨立的全局空間

5.WTF\Account\賬號名\服務器名\角色名\AddOns.txt文件描述哪些插件需要讀取

根據分析:每次魔獸啟動時,都會掃描一次插件目錄,并更新這個列表,但是原有的插件讀取狀態仍然保留,類似于:

Combuctor: enabled
Combuctor_Config: enabled
Parrot: disabled
BattleInfo: disabled
BigWigs: disabled
BigWigs_Extras: disabled
BigWigs_BlackTemple: disabled
leafZone: enabled
InFlight: disabled

6. WTF\下的很多SavedVariables目錄都是用于保存插件狀態的,沒有對lua的擴展庫進行研究(ACE2/3等等),但是這是一種很好的保存插件數據的方法

OZ_Config = {
    {
        ["bottomCol"] = {
            ["a"] = 1,
            ["r"] = 0,
            ["g"] = 0,
            ["b"] = 0.6,
        },
        ["maxBars"] = 40,
        ["barHeight"] = 16,
        ["titleHeight"] = 20,
        ["sort2"] = 0,
        ["fadeAlpha"] = 0.3999999761581421,
        ["textSize"] = 10,
        ["colour"] = 2,
        ["minBars"] = 1,
        ["heading"] = {
            3, -- [1]
            0, -- [2]
            0, -- [3]

7.暫時沒有找到魔獸UI的核心API是否用純腳本提供的證據,但是可以推斷,按照暴雪的實力,應該是全lua api寫成。

 

 

構建安全的lua沙箱

所謂沙箱,就是每個插件擁有獨立的_G全局環境,即便用戶誤將print修改,其他的插件也不會受到影響. 同時,考慮到沙箱的安全性和權限,需要對沙箱函數訪問進行訂制.以下是本人摸索出的一種方案:

先看下我的UI環境及lua嵌入架構:

1. C++層將必要的API注冊到lua層.但都是基于id的全局函數(考慮到效率及便捷),但是實際使用時再在lua層進行OO封裝,這和WINDOWS API及MFC的原理類似

2. C++層只提供4種原生控件: Button,Label, EditBox,MultiLineEditBox。其他的控件都是由這些組成。

3. 可以將整個系統分為內核模式和用戶模式。

    內核模式:可以使用完整的API訪問及權限。

    用戶模式:被沙箱保護,無法訪問一些危險的API,例如io

 

這里,我們使用lua_setfenv進行沙箱構建,首先我們必須將創建每個沙箱對應的table

// 放入沙箱名稱
lua_pushstring( mLua, "mysandbox" );
// 將一個table壓入棧
dotlua::table ts( mLua , false );
// 調用之前載入好的一個訂制沙箱環境的函數
gt.call<void>("SetupSandBox", ts ); 
// 將沙箱以mysandbox的key保存在注冊表中
lua_settable( mLua, LUA_REGISTRYINDEX );

之后使用lua_loadfile載入需要放進沙箱的代碼

 

// 這里將本沙箱對應的環境取出來
lua_pushstring( mLua, "mysandbox" );
lua_gettable( mLua, LUA_REGISTRYINDEX );
// 棧內的情形為
// -1  沙箱table
// -2 chunk function
// 這里必須調用chunk函數
lua_setfenv( mLua, -2 );
調用pcall執行代碼
這里的chunk函數,來源于lua_loadfile或者lua_loadbuffer,這2個函數將代碼讀入,但并不會執行,包括定義全局函數之類的操作。
沙箱訂制函數必須提前載入,這里發一個做參考

function SetupSandBox( e )
    e._G = e
    -- system lib
    e.print         = print
    e.printf         = printf
    e.table         = table
    e.string         = string
    e.debug         = debug
    e.math             = math
    e.assert         = assert
    e.getmetatable     = getmetatable
    e.ipairs         = ipairs
    e.pairs         = pairs
    e.pcall         = pcall
    e.setmetatable     = setmetatable
    e.tostring         = tostring
    e.tonumber         = tonumber
    e.type             = type
    e.unpack         = unpack
    e.collectgarbage = collectgarbage
    -- class
    e.TREENODE = WIDGET_TREENODE
    e.SERIALIZE = WIDGET_SERIALIZE
    -- function
    e.CreateWidget = CreateWidget
    e._Inherit = _Inherit
end

只有被訂制的函數,才能被調用
 
擴展:
 為了獲得完整的內核模式開發,但又擁有獨立的沙箱環境,可以使用setmetatable方式設置一個對全局table的引用,雖然速度慢了點。。
當然,可以支持一套可載入dll訂制權限,并注冊更多的api給自己的腳本用
posted @ 2009-07-09 11:12 戰魂小筑 閱讀(2207) | 評論 (1)編輯 收藏

最近開源的Mono .NET框架被警告遠離微軟,因為引來一大批版權的問題。同時也在verycd上發現一個非常不錯的想法,用Mono C#做腳本引擎

http://www.verycd.com/topics/2747101/

Unity Technology最近剛剛發布他們的游戲開發工具/游戲引擎Unity的最新版,Unity 2.5。
這是一個3D游戲開發工具和游戲引擎套件,其中包括了圖形、音頻、物理、網絡等多方面的引擎支持,并且有一個非常強大的編輯器來整合這一切。原本是一個針對Mac、Windows和Linux的游戲開發套件,后來發展到也能夠在iPhone和Wii上部署,或者在Web上部署。不但如此,最新的Unity 2.5中的編輯器本身就是用Unity來實現的,也因此Unity的開發套件本身也可以在Windows上運行了(在此之前開發游戲需要用Mac)。
Unity 使用了Mono作為腳本引擎的虛擬機,并以C#或者一種類似JavaScript的語言為腳本語言。這在游戲引擎中并不多見(另外一個例子是Second Life也采用了Mono作為腳本引擎,C#作為腳本語言)。在游戲引擎中的應用也促使了Mono自身的進步,包括Mono.Simd等,使得Mono或者說托管代碼更適合于游戲開發

?

posted @ 2009-07-03 10:59 戰魂小筑 閱讀(2620) | 評論 (0)編輯 收藏

轉自我的cnblogs

最近在搜索AngleScript bug時,突然發現一個新的輕量級OO腳本語言Squirrel 翻譯過來就是松鼠的意思

來看下這個腳本的樣子:

local table = { a = "10" subtable = { array = [1,2,3] }, [10 + 123] = "expression index"} local array=[ 1, 2, 3, { a = 10, b = "string" } ];foreach(i,val in array){ ::print("the type of val is"+typeof val);}

class Entity{ constructor(etype,entityname) { name = entityname; type = etype; } x = 0; y = 0; z = 0; name = null; type = null;}function Entity::MoveTo(newx,newy,newz){ x = newx; y = newy; z = newz;}class Player extends Entity { constructor(entityname) { Entity.constructor("Player",entityname) } function DoDomething() { ::print("something"); } } local newplayer = Player("da playar"); newplayer.MoveTo(100,200,300);

特性:

1. 開源,zlib的那種無限制使用的license

2. 動態類型

3. Delegation代理支持

4. 支持類,及繼承

5. 高階函數功能

6. Generator

7. 纖程(Coroutines)

8. 尾遞歸(tail recursion)

9. 異常捕獲

10. 引用計數方式的垃圾回收(有點過時)

11. 弱引用

12. 6k行編譯器及虛擬機代碼

13. 可選的16位字符串

14. 支持64位cpu

總體觀感,這種腳本語言語法結構類似C++及lua的雜合體,很多地方像lua。OO部分又像Python

這里是一個完整文檔說明,可以詳細了解其vm接口及api調用。

不過到目前為主,未看到有成熟的商業項目使用

posted @ 2009-07-03 10:09 戰魂小筑 閱讀(1250) | 評論 (0)編輯 收藏

2008年時,閑來無事,開始研究Lua Debugger,發現目前的很多debugger都很簡單。諸如LuaIDE帶的,只能調試簡單腳本,無法掛接到工程項目;LuaPlus的RemoteLuaDebugger寫的倒是不錯,但是代碼編譯很嚴重,而且依賴LuaPlus。因此結合這2個debugger的優點。自己寫出了一套純粹的遠程調試Lua調試器

luadebugger

特性:

1. 基于一套簡單的網絡庫,完全的遠程調試

2. 調試客戶端命名為DebugToy,并不為lua專用,以后可以用作調試任何代碼

3. 如果客戶端沒有代碼,或者沒有指定代碼路徑。自動從遠程服務器下載后顯示。服務器可以將這個作為一個可選項

4. 基于SCIntilla的編輯器,編寫和查看非常方便,支持語法高亮及斷點等等格式。以后可以擴充很強大的功能

5. 調試快捷鍵與VC相同,支持CallStack,LocalVariable,WatchSymbole及 鼠標下Symbol值查看等功能

6. 最重要的一點,這個調試庫可以動態載入,并提供給任何C++程序調試,無論你使用怎樣的lua架構,都可以使用這個調試器進入代碼調試

最近的UI編輯器中使用這個調試器解決了很多問題,因此準備將這個Debugger功能加強,使用C++CLI封裝后,換做C#做界面,并讓調試lua代碼和C++代碼一樣

這里還有一個商用的Lua調試器,寫的還很不錯http://www.unknownworlds.com/decoda/

posted @ 2009-06-27 10:51 戰魂小筑 閱讀(1130) | 評論 (1)編輯 收藏

      最近在使用自己封住的一套lua庫使用中遇到這樣一個問題,多注冊一個類成員函數后,即便一個lua文件都沒加載,都會在lua_close中的freestack函數中crash

      我的lua封裝非常簡單,支持C++類成員函數調用上也是在luaplus基礎上改造而來的:

    void register_helper( lua_State* L, int tableindex, const char* funcname, lua_CFunction dispatcher, void* func, int sizeoffunc, const void* userdata, int sizeofud )
    {
        // function | userdata = lightuserdata
        unsigned char* buffer = (unsigned char*)lua_newuserdata( L, sizeoffunc + sizeofud );
        memcpy( buffer, (void*)func, sizeoffunc );
        memcpy( buffer + sizeoffunc, &userdata, sizeofud );

        lua_pushstring( L, funcname );
        lua_pushlightuserdata( L, (void*)buffer);  
        lua_pushcclosure(L, dispatcher, 1);
        lua_settable( L, tableindex );
    }
    
 

檢查發現,貌似是lua_newuserdata的問題,將其換為malloc,問題解決了。

雖然支持google了一下類似的問題,并且也在gc庫內打過斷點,new出來的內存絕非簡單的被gc回收,而有可能是lua某些機制造成的,畢竟這樣給C++做綁定是很常見的

馬上做了一個list保存指針,并在lua_close之前清除這些指針,所有問題迎刃而解

posted @ 2009-06-20 10:47 戰魂小筑 閱讀(728) | 評論 (0)編輯 收藏

最近遇到一個vs2008 C++中斷點無法工作的問題,具體表現為:

1. 某個修改后,斷點無法工作,之前版本依然正常

2. 只是某個文件中斷點無法工作

3. 斷點打在 引用另外DLL中的類對象A

文件結構:

Core.dll

A.cpp

class A 
{ 
public: 
    A( )
    { 
        printf("constructor of a");
    } 

} 
 

UI.dll

Manager.cpp

class Manager
{ 
public: 
    Manager( )
    { 
        printf("constructor of Manager");
    } 

} 

 

Button.cpp

A ins; // 斷點打在這里

Run.exe

void main() 
{ 
    Manager ins;  // 實例化 
} 

這里發現A根本不會被C runtime在執行main之前構造,因此斷點無法打到

已經排除特殊字符影響的原因,按照網上的方法是,將文件保存為UNICODE,問題依舊

開始用排除隔離法確定問題位置,最后發現這樣一個規律:

只要在Manager.cpp里構造一個Button

Button insB;

這樣做了以后,斷定必定能起作用。

因此推斷CRT層的全局構造是需要一個鏈表來推動的

因為Manager需要構造,因此CRT肯定會掃描這個CPP對應OBJ鏈接到exe里的段,讓這個段里的全局構造函數都初始化,但是Button因為沒有使用,因此也不會構造。這樣局部掃描應該是出于效率.

解決這個問題還有一個方法就是全部使用靜態鏈接方式,這樣構造代碼都放到最后的exe中,就不會出現這樣的問題

posted @ 2009-06-14 10:51 戰魂小筑 閱讀(444) | 評論 (0)編輯 收藏

僅列出標題
共26頁: First 18 19 20 21 22 23 24 25 26 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一级电影| 亚洲制服av| 国产精品日韩欧美综合| 国产女主播在线一区二区| 国产精品一级二级三级| 国产精品三上| 国产一区二区三区丝袜| 一区二区三区在线免费视频| 亚洲午夜女主播在线直播| 一区二区三区不卡视频在线观看 | 欧美精品在线极品| 欧美视频1区| 国产一区二区三区高清在线观看| 在线观看欧美| 亚洲影院在线观看| 蘑菇福利视频一区播放| 日韩小视频在线观看专区| 午夜精品久久久久久久蜜桃app| 欧美在线观看日本一区| 欧美激情精品久久久久久大尺度| 国产精品豆花视频| 狠狠色狠狠色综合人人| 亚洲一区精彩视频| 美脚丝袜一区二区三区在线观看| 亚洲欧洲一区二区在线观看| 亚洲欧美日韩系列| 欧美日本国产视频| 国语精品一区| 亚洲一二三级电影| 亚洲第一黄色网| 在线亚洲精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美国产日韩精品| 亚洲一区二区三区精品在线| 久久亚洲一区| 国产色综合久久| 中文欧美字幕免费| 欧美激情在线观看| 久久精品99国产精品酒店日本| 欧美国产综合| 亚洲电影免费观看高清| 欧美在线一级va免费观看| 亚洲免费av片| 欧美国产日韩二区| 在线欧美日韩国产| 久久国产精品高清| 亚洲欧美日韩综合| 国产精品第2页| 亚洲一二三区精品| 日韩一本二本av| 欧美国产精品久久| 日韩视频免费观看| 亚洲经典在线| 免费在线观看成人av| 在线免费观看成人网| 久久亚洲精品一区| 久久久999| 亚洲国产三级网| 欧美激情乱人伦| 欧美高清视频一区二区三区在线观看 | 欧美日韩中字| 亚洲国产精品国自产拍av秋霞| 久久久久高清| 欧美日本在线播放| 亚洲高清视频中文字幕| 久久精品网址| 久久国产福利| 亚洲高清免费视频| 欧美国产日韩亚洲一区| 蜜臀a∨国产成人精品| 亚洲黄色影院| 亚洲美女毛片| 国产精品成人播放| 欧美一级淫片播放口| 亚洲女人天堂av| 国产主播喷水一区二区| 另类天堂av| 欧美精品午夜| 欧美亚洲一级| 久久久免费精品视频| 亚洲三级电影全部在线观看高清| 日韩视频在线一区二区三区| 欧美午夜免费电影| 久久久精品日韩| 欧美成人精品在线| 亚洲永久免费| 久久免费99精品久久久久久| 日韩视频在线一区二区三区| 一区二区日韩免费看| 红桃视频欧美| 亚洲欧洲在线视频| 国产午夜亚洲精品不卡| 欧美电影免费观看网站| 欧美日韩另类综合| 久久精品2019中文字幕| 欧美aaaaaaaa牛牛影院| 性视频1819p久久| 欧美日产一区二区三区在线观看| 午夜免费日韩视频| 欧美精品导航| 欧美一区二区三区日韩| 欧美成人精品三级在线观看| 久久aⅴ乱码一区二区三区| 蜜桃精品久久久久久久免费影院| 亚洲自拍高清| 欧美激情导航| 麻豆91精品| 国产精品美女在线观看| 亚洲第一精品在线| 国产亚洲永久域名| 中文亚洲视频在线| 日韩小视频在线观看专区| 久久国产精品黑丝| 亚洲欧美国产精品桃花| 欧美好骚综合网| 玖玖综合伊人| 韩日精品视频| 亚洲欧美日韩一区在线| 亚洲一级免费视频| 欧美片在线观看| 亚洲第一级黄色片| 亚洲电影第1页| 久久久久九九视频| 久久久久久穴| 亚洲综合电影一区二区三区| 亚洲第一久久影院| 久久精品五月婷婷| 久久精品国产2020观看福利| 欧美午夜精品久久久久久孕妇 | 国产欧美日韩视频在线观看| 亚洲国产高清自拍| 亚洲国产精品999| 久久爱另类一区二区小说| 午夜国产一区| 国产精品免费在线| 亚洲视频免费观看| 亚洲欧美日韩精品综合在线观看| 欧美日韩www| 日韩网站在线| 亚洲午夜极品| 国产精品成人一区二区网站软件 | 久久性色av| 国产中文一区| 久久婷婷色综合| 欧美国产综合一区二区| 亚洲老板91色精品久久| 欧美激情1区2区3区| 亚洲免费精品| 欧美亚洲一区在线| 国产午夜一区二区三区| 久久久精品五月天| 欧美大片在线观看一区| 日韩视频一区二区三区| 国产精品成人国产乱一区| 亚洲一区在线免费| 另类成人小视频在线| 亚洲免费观看高清在线观看 | 一区二区成人精品| 午夜久久黄色| 亚洲福利视频一区| 欧美三日本三级三级在线播放| 亚洲欧美国产高清va在线播| 久久全球大尺度高清视频| 夜夜嗨一区二区| 国产精品xxxxx| 性欧美长视频| 亚洲精选视频在线| 久久久久久尹人网香蕉| 99精品视频免费| 国产日韩欧美综合| 欧美精品久久天天躁| 亚洲男人第一网站| 欧美国产大片| 欧美在线短视频| 91久久精品美女| 国产欧美日本| 欧美国产日本在线| 欧美一区二区三区喷汁尤物| 亚洲高清视频一区| 久久久久久久久久久久久久一区| 日韩午夜黄色| 国产综合久久久久久鬼色| 欧美三级在线播放| 欧美日韩国产天堂| 欧美一区激情视频在线观看| 久久激情综合网| 99视频日韩| 欧美国产视频在线观看| 久久av二区| 亚洲综合精品自拍| 亚洲精品日本| 伊人天天综合| 国产午夜精品视频免费不卡69堂| 欧美久久电影| 牛人盗摄一区二区三区视频| 欧美一区二区三区精品电影| 中国日韩欧美久久久久久久久| 亚洲国产精品毛片| 久久一区二区三区国产精品| 欧美在线观看日本一区|