• <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>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項(xiàng)目:https://github.com/davyxu

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

            #

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

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

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

             

            先來熟悉下Portal游戲怎么玩

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

             

            現(xiàn)在討論3d實(shí)現(xiàn)方法,看圖

            GK}TW)$ESO4C{UDNS(PUBQA

            圖中,圓圈代表玩家,方塊代表2個(gè)門,從圓圈發(fā)出的直線代表玩家行進(jìn)方向,重力向下,側(cè)向圖

            這個(gè)圖表示在地面打開2個(gè)門,玩家從一個(gè)門進(jìn)入,進(jìn)入到另外一個(gè)世界

            要實(shí)現(xiàn)這個(gè)圖,需要建立4個(gè)世界

             

            ]DT4$O[HUJ1F04ZS_SMDEYS

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

            要實(shí)現(xiàn)圖,需要建立4個(gè)世界

             

             

            ]RVSNZKH19@I89__9KKUENS

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

             

            其實(shí)Portal的原理,我們早在叮當(dāng)(現(xiàn)在叫多啦A夢)的任意門就實(shí)現(xiàn)了,但是打開門的世界與進(jìn)入前的世界處于2個(gè)地方。當(dāng)在同一個(gè)地方開2個(gè)洞,就是portal的實(shí)現(xiàn)

             

            要實(shí)現(xiàn)Port有幾個(gè)難題

            1. 怎么進(jìn)入到另外一個(gè)世界

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

            但是要能進(jìn)入,那必須是幾何空間是通透的


             

            2. 到底構(gòu)建幾個(gè)世界?

            其實(shí)根據(jù)在游戲中的分析與一些資料的透露,建立2個(gè)世界即可

             

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

            實(shí)際看下來可以是,我進(jìn)入到另外一個(gè)世界,而另外一個(gè)世界進(jìn)入到我的世界

             

            4. 怎樣處理世界遞歸?

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

            類似于本文開頭的遞歸世界圖片,這個(gè)在Portal游戲中是有設(shè)置遞歸層級的,應(yīng)該是受到渲染限制的,因此世界創(chuàng)建的個(gè)數(shù)應(yīng)該與遞歸層級有關(guān)系。

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

            現(xiàn)在是網(wǎng)絡(luò)游戲當(dāng)紅的時(shí)代,因?yàn)槠淠J椒奖阗嶅X,玩家也喜歡交流。但畢竟真正的游戲感覺,動(dòng)作感還是單機(jī)游戲。怎樣讓單機(jī)游戲重振雄風(fēng)呢?

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

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

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

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

            1. 前期準(zhǔn)備工作,及編譯方法

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

            要開始使用時(shí),在5.1\lua下找到luadoc_start.lua文件,這個(gè)文件就是luadoc的啟動(dòng)文件

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

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

            這里注意:lua是已經(jīng)注冊到系統(tǒng)路徑的,如果你沒有安裝整合包,需要手動(dòng)加一下

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

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

             

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

            看下基本注釋結(jié)構(gòu):

            --- 繼承于某table的屬性及函數(shù)
            -- @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從---開始識別你的函數(shù)注釋,這個(gè)被放置于函數(shù)主要說明中
            @param用作參數(shù)說明,selfclass標(biāo)記是哪個(gè)參數(shù)的說明
            @return說明返回值
            @usage就是一些例子
            posted @ 2009-07-15 17:47 戰(zhàn)魂小筑 閱讀(785) | 評論 (0)編輯 收藏

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

            http://luaforwindows.luaforge.net/

             

            luaCom 支持COM調(diào)用

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

            LuaExpat 支持XML解析

            LuaFileSystem 文件系統(tǒng)訪問

            LuaLogging, 基于log4j的日志

            LuaProfiler 性能測試工具

            LuaSocket 不用說了吧,網(wǎng)絡(luò)庫,支持HTTP,FTP,SMTP, MIME, URL & LTN12協(xié)議

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

            LuaZip 支持zip讀取及打包

            LuaInteface .NET的lua包

            wxLua 支持lua調(diào)試及使用wxWidgets UI庫

            LOOP支持OO方式的lua

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

            魔獸的UI插件結(jié)構(gòu)

            1.使用lua+XML作為配置

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

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

            3. 每個(gè)插件組,需要一個(gè)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.一個(gè)插件組里可以擁有多個(gè)lua文件,都共享一個(gè)獨(dú)立的全局空間

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

            根據(jù)分析:每次魔獸啟動(dòng)時(shí),都會掃描一次插件目錄,并更新這個(gè)列表,但是原有的插件讀取狀態(tài)仍然保留,類似于:

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

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

            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.暫時(shí)沒有找到魔獸UI的核心API是否用純腳本提供的證據(jù),但是可以推斷,按照暴雪的實(shí)力,應(yīng)該是全lua api寫成。

             

             

            構(gòu)建安全的lua沙箱

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

            先看下我的UI環(huán)境及l(fā)ua嵌入架構(gòu):

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

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

            3. 可以將整個(gè)系統(tǒng)分為內(nèi)核模式和用戶模式。

                內(nèi)核模式:可以使用完整的API訪問及權(quán)限。

                用戶模式:被沙箱保護(hù),無法訪問一些危險(xiǎn)的API,例如io

             

            這里,我們使用lua_setfenv進(jìn)行沙箱構(gòu)建,首先我們必須將創(chuàng)建每個(gè)沙箱對應(yīng)的table

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

            之后使用lua_loadfile載入需要放進(jìn)沙箱的代碼

             

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

            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

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

            最近開源的Mono .NET框架被警告遠(yuǎn)離微軟,因?yàn)橐齺硪淮笈鏅?quán)的問題。同時(shí)也在verycd上發(fā)現(xiàn)一個(gè)非常不錯(cuò)的想法,用Mono C#做腳本引擎

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

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

            ?

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

            轉(zhuǎn)自我的cnblogs

            最近在搜索AngleScript bug時(shí),突然發(fā)現(xiàn)一個(gè)新的輕量級OO腳本語言Squirrel 翻譯過來就是松鼠的意思

            來看下這個(gè)腳本的樣子:

            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. 動(dòng)態(tài)類型

            3. Delegation代理支持

            4. 支持類,及繼承

            5. 高階函數(shù)功能

            6. Generator

            7. 纖程(Coroutines)

            8. 尾遞歸(tail recursion)

            9. 異常捕獲

            10. 引用計(jì)數(shù)方式的垃圾回收(有點(diǎn)過時(shí))

            11. 弱引用

            12. 6k行編譯器及虛擬機(jī)代碼

            13. 可選的16位字符串

            14. 支持64位cpu

            總體觀感,這種腳本語言語法結(jié)構(gòu)類似C++及l(fā)ua的雜合體,很多地方像lua。OO部分又像Python

            這里是一個(gè)完整文檔說明,可以詳細(xì)了解其vm接口及api調(diào)用。

            不過到目前為主,未看到有成熟的商業(yè)項(xiàng)目使用

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

            2008年時(shí),閑來無事,開始研究Lua Debugger,發(fā)現(xiàn)目前的很多debugger都很簡單。諸如LuaIDE帶的,只能調(diào)試簡單腳本,無法掛接到工程項(xiàng)目;LuaPlus的RemoteLuaDebugger寫的倒是不錯(cuò),但是代碼編譯很嚴(yán)重,而且依賴LuaPlus。因此結(jié)合這2個(gè)debugger的優(yōu)點(diǎn)。自己寫出了一套純粹的遠(yuǎn)程調(diào)試Lua調(diào)試器

            luadebugger

            特性:

            1. 基于一套簡單的網(wǎng)絡(luò)庫,完全的遠(yuǎn)程調(diào)試

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

            3. 如果客戶端沒有代碼,或者沒有指定代碼路徑。自動(dòng)從遠(yuǎn)程服務(wù)器下載后顯示。服務(wù)器可以將這個(gè)作為一個(gè)可選項(xiàng)

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

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

            6. 最重要的一點(diǎn),這個(gè)調(diào)試庫可以動(dòng)態(tài)載入,并提供給任何C++程序調(diào)試,無論你使用怎樣的lua架構(gòu),都可以使用這個(gè)調(diào)試器進(jìn)入代碼調(diào)試

            最近的UI編輯器中使用這個(gè)調(diào)試器解決了很多問題,因此準(zhǔn)備將這個(gè)Debugger功能加強(qiáng),使用C++CLI封裝后,換做C#做界面,并讓調(diào)試lua代碼和C++代碼一樣

            這里還有一個(gè)商用的Lua調(diào)試器,寫的還很不錯(cuò)http://www.unknownworlds.com/decoda/

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

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

                  我的lua封裝非常簡單,支持C++類成員函數(shù)調(diào)用上也是在luaplus基礎(chǔ)上改造而來的:

                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 );
                }
                
             

            檢查發(fā)現(xiàn),貌似是lua_newuserdata的問題,將其換為malloc,問題解決了。

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

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

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

            最近遇到一個(gè)vs2008 C++中斷點(diǎn)無法工作的問題,具體表現(xiàn)為:

            1. 某個(gè)修改后,斷點(diǎn)無法工作,之前版本依然正常

            2. 只是某個(gè)文件中斷點(diǎn)無法工作

            3. 斷點(diǎn)打在 引用另外DLL中的類對象A

            文件結(jié)構(gòu):

            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; // 斷點(diǎn)打在這里

            Run.exe

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

            這里發(fā)現(xiàn)A根本不會被C runtime在執(zhí)行main之前構(gòu)造,因此斷點(diǎn)無法打到

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

            開始用排除隔離法確定問題位置,最后發(fā)現(xiàn)這樣一個(gè)規(guī)律:

            只要在Manager.cpp里構(gòu)造一個(gè)Button

            Button insB;

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

            因此推斷CRT層的全局構(gòu)造是需要一個(gè)鏈表來推動(dòng)的

            因?yàn)镸anager需要構(gòu)造,因此CRT肯定會掃描這個(gè)CPP對應(yīng)OBJ鏈接到exe里的段,讓這個(gè)段里的全局構(gòu)造函數(shù)都初始化,但是Button因?yàn)闆]有使用,因此也不會構(gòu)造。這樣局部掃描應(yīng)該是出于效率.

            解決這個(gè)問題還有一個(gè)方法就是全部使用靜態(tài)鏈接方式,這樣構(gòu)造代碼都放到最后的exe中,就不會出現(xiàn)這樣的問題

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

            僅列出標(biāo)題
            共26頁: First 18 19 20 21 22 23 24 25 26 
            久久99国产精品久久99| 一97日本道伊人久久综合影院| 色播久久人人爽人人爽人人片aV| 久久综合九色综合97_久久久| 2021少妇久久久久久久久久| 久久婷婷五月综合97色一本一本| 亚洲AV成人无码久久精品老人| 精品综合久久久久久98| 伊人久久精品无码av一区| 奇米影视7777久久精品人人爽| 免费精品久久天干天干| 思思久久精品在热线热| 久久久无码一区二区三区| 久久国产色AV免费观看| 精品免费tv久久久久久久| 久久国产免费观看精品| 国产一区二区精品久久凹凸| 久久精品国产亚洲精品| 亚洲国产成人久久综合野外| 久久久久久久精品妇女99| 精品久久久无码21p发布| 国内精品久久久久影院日本| 99久久www免费人成精品| 久久毛片免费看一区二区三区| 久久久久久久精品成人热色戒| 久久亚洲熟女cc98cm| 久久久久国产一级毛片高清版| 久久亚洲av无码精品浪潮| 亚洲va中文字幕无码久久| 狠狠色噜噜狠狠狠狠狠色综合久久 | 久久AⅤ人妻少妇嫩草影院| 亚洲欧美一级久久精品| 久久99精品久久久久婷婷| 国内精品久久久久久中文字幕| 国产色综合久久无码有码| 久久精品这里热有精品| 亚洲日韩中文无码久久| 久久久久亚洲爆乳少妇无| 久久丫精品国产亚洲av| 三级韩国一区久久二区综合 | 久久天天躁夜夜躁狠狠|