麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > 媒體動畫 > 正文

Authorware類和函數:authorware自帶系統函數與自己設定函數

2024-09-08 19:24:55
字體:
來源:轉載
供稿:網友

authorware提供的系統函數

    authorware提供的變量是用來存儲模塊信息,authorware所提供的函數是用來完成特定的任務。
    函數使用的位置是:
    1.【運算】設計按鈕的對話框中。
    2.作為設計按鈕的裝飾。
    3. 用于對話框的相關項的設置。
    通過使用authorware所提供的系統函數,讀者可以設計基于終端用戶交互時獲取的信息來進行判斷調用的程序模塊。這樣,在終端用戶和計算機之間便形成了人機的對話的環境。
    使用【window】菜單中的【functions】命令選項(快捷鍵為ctrl+shift+f),彈出圖6-32所示的authorware的【function】函數對話框。該對話框中的相關內容在下面我們將系統地學習。

 

圖6-32 【functions】函數對話框

    (1)【category】:函數類型列表:在該下拉列表(如圖6-33)中是authorware所提供的系統函數和讀者自定義的函數類型的列表。
    authorware函數分為19種類型,讀者在使用函數時,最好能知道函數所屬的類,如果能知道函數所屬的類。則我們可以快捷地使用函數類型列表,從該類函數的函數名列表中我們可以迅速地尋找到所需的authorware函數的位置。
    下面請讀者來學習autorware提供的所有系統函數的類型:
    a.【character】:字符管理函數:這些authorware所提供的函數主要是用來處理文本內容及字符串的處理。
    b.【file】:文件管理函數:這些authorware所提供的函數能使讀者可以方便地創建和維護外部文件。
    c.【framework】:框架管理函數:這些函數使讀者可以實現在框架結構內部的某些特定功能,例如在框架結構內實施一個對某一關鍵詞的查找等特定功能。
    d.【general】:一般目的函數:這些函數執行一些系統普通級的任務。例如刪除一個顯示對象,播放媒體信息等等。
    e.【graphic】:繪圖函數:這些函數決定顯示的對象如何在展示窗口中顯示。例如在展示窗口畫方框或圓。并為方框或圓設置填充模式和顏色。
    f.【icons】:設計按鈕管理函數:利用這些函數來管理流程線上的設計按鈕。例如使用這類函數顯示或刪除設計按鈕或在一個【顯示】設計按鈕中改變一個顯示對象所處的層級別。
    g.【jump】:跳轉控制函數:跳轉函數不僅能夠從一個設計按鈕跳轉到另一個設計按鈕中,而且還能夠跳轉到一個外部文件中。例如我們可以設置:當最終用戶在一定時間內沒有反應時,authorware程序跳轉去執行某一特殊的設計按鈕中的內容,或跳轉執行某一特定的外部程序模塊,以便實現特殊的自動演示功能。
    h.【language】:編程語言函數:  authorware提供的這些函數用來執行特殊的語言編程操作。例如if-then 語句、repeat while等語句。
    i.【list】:列表函數(該類函數是autorware4.0新增的函數類型):使用該類函數,可以對相關對象按照一定的規則排序,或按照特定的規則建立索引。
    j.【math】:數學運算函數:這些函數能完成復雜的數學運算,從簡單的加法到隨機數的生成。autorware可以執行大多數我們所需要的數學運算。
    k.【network】:網絡管理函數:對于要在國際互聯網上運行的模塊,我們使用這類函數來實現某些特定的功能。例如:訪問外部文件,或從網絡上下載內容到本地硬盤上,都是通過使用該類函數來實現的。
    l.【ole】:ole管理函數:ole處理函數用來處理展示窗口中的ole對象。authorware 4.0支持所有標準的ole通信。
    m.【platform】:平臺管理函數: 平臺管理函數用來獲取以后xcmds或dll要使用的信息。例如一個平臺函數將返回發生器類型,以便確定authorware當前是否在執行應用程序。
    n.【time】:時間管理函數:該類函數根據不同的規則將日期轉化為數字格式,方便我們的程序設計中對日期的比較,或者顯示系統的日期和時間。
    o.【video】:視頻管理函數:該類函數用來管理程序設計中引入的視頻,包括視頻的播放、暫停、尋找特定幀等等對視頻內容進行操作的特殊功能。該類函數詳細使用方法參見【視頻的引入】中視頻函數的使用。
    p.【xtras】:xtras函數:該類函數可以控制和使用xtras文件,或者獲取xtras文件的相關信息。
    q.【xtra activex】:activex控件函數;
    r.【xtra fileio】:xtra文件輸入輸出控制函數。
    除了上面我們學習的19大類函數外,還有其它兩個選項:
    ①【all】全部:選擇該選項,則在函數名列表中按照字母順序顯示authorware所提供的所有的系統函數的名稱。
    ②定制:定制函數類型列表是以讀者所開發的程序模塊文件名為標志。選擇該類型選項,在函數名列表中將顯示所有用戶自己創建的和使用的xcms(macintosh)或dll(windows)生成的所有函數。
    (2) 函數名列表:一旦讀者選定了某種函數類型,則在類型菜單下面的列表框中的內容就變成該類函數的所有函數名的列表。讀者可以在該顯示框中選擇函數,單擊一個函數名,【functions】函數對話框中的相關內容會相應改變。
    (3) 【referenced by】:引用:一旦讀者選定了函數后,在引用區域顯示框中將顯示所有使用該函數的設計按鈕。
    (4) 【show icon】:顯示設計按鈕命令按鈕:單擊該命令按鈕,使用讀者所選中函數的設計按鈕在流程線上高亮顯示。

提示:
    雙擊函數名列表中的該函數,可以達到同顯示設計按鈕命令按鈕相同的功能。
    (5) 【description】:描述窗口:在該窗口中具體描述了函數的語法規則和參數含義,為讀者使用該函數提供了詳細的步驟。
    (6) 【load】命令按鈕:單擊該命令按鈕,使讀者可以定位及輸入外部函數。這些外部函數可以是cms(macintosh)、dll或ucd(windows),或者其它包含用戶自行設計的代碼的應用程序。
    (7) 【rename】命令按鈕:使用該命令按鈕,讀者可以修改在函數名列表中選擇的函數。

注意:
    對于authorware所提供的系統函數來說,該命令按鈕無效,該命令按鈕只能修改用戶自定義的函數。
    (8) 【unload】:卸載命令按鈕:當一個用戶自定義的函數在程序模塊中的任何一個地方都不再使用時,讀者可以卸載或刪除它,要刪除一個不再使用的自定義函數,只需在函數名列表中選擇該函數,然后單擊【delete】刪除命令按鈕來刪除該函數即可。
    (9) 【paste】粘貼命令按鈕:同變量的粘貼命令按鈕相同,讀者可以使用該命令按鈕將函數名列表中選中的函數粘貼到打開的【運算】設計按鈕對話框或可以接受函數的區域或外部對象中。
    當一個函數被粘貼到應用位置時,它包含了為確保函數能夠正確運行所需的所有域的占位符。
    前面我們學習了authorware【functions】對話框中相關選項的含義和使用方法,在今后的學習中,我們還要使用到該對話框來實現特殊的功能。而且,在程序的調試過程中,【functions】函數對話框同【variables】變量對話框一樣,可以作為一個獨立的浮動窗口出現在windows窗口上,讀者可以隨時通過該對話框來了解自己所使用的函數語法的正確性。從而,可以加快程序的設計和調試。

函數的參數和返回值

    函數是具有特殊的語法規則,用來實現特定任務的程序。所以,當我們使用一個函數時,必須要遵循正確的語法規則。在語法規則中最重要的是要正確地使用參數,函數的參數是讀者提供給函數為完成某一特定任務所需要的輸入信息。幾乎所有的系統函數都需要輸入參數。
    在authorware所提供的眾多函數中,參數的使用和函數的返回值的類型有很大的差別。
    1. 參數的類型
    首先,讓我們來介紹一下參數的類型:
    (1) 帶雙引號的參數:如果將字符串作為一個函數的一個參數,則在輸入該字符串作為參數時,必須為該字符串加上雙引號。例如函數presskey("keyname"),如果我們希望設置該按鍵為字符串enter,則我們在使用該函數的時候,要為字符串enter加上一個雙引號,使用實例為:presskey("enter");如果我們用一個變量keyname來代替字符串enter,即keyname=“enter”,則我們在使用該函數時,變量不能再加雙引號,應該設成presskey (keyname),否則authorware會錯將該變量名作為字符串對待。
    (2) 任選項參數:在authorware的系統函數中,有許多函數帶有幾個參數,而在實際的使用過程中,函數的有些參數不一定每一個都必須使用,而是根據實際任務的情況選用不同的參數。例如:jumpfile("filename"[, "variable1, variable2, ...", ["folder"]])函數是一個具有任選項參數的函數。使用該函數有兩種語法規則:
    jumpfile("filename")
    jumpfile("filename"[, "variable1, variable2, ...", ["folder"]])
    如果authorware的程序僅僅是從一個應用模塊跳轉到另一個應用模塊(如examp1.a4p)。則可以使用第一種語法,該函數設置為jumpfile(“examp1”)。如果在examp1.a4p文件中有兩個變量與variable1和variable2同名,現在要將另外兩個值(如username和userid)傳遞給這兩個參數,則可以使用第二種語法方式。該函數設置為:jumpfile("examp1", " username,userid")。
    2. 函數的返回值
    在authorware所提供的系統函數中,有些有返回值,而有些函數是沒有任何返回值。有返回值的函數占大多數。
    例如:beep( )函數只是實現一個響鈴的功能,所以沒有任何返回值。
    getline("string", n [, m, delim])函數的返回值是一個字符串。

函數的使用位置和使用方法

    在【運算】設計按鈕對話框中插入函數:

圖6-34 在運算對話框中選擇插入函數的位置

    在流程線上的【運算】設計按鈕對話框中我們可以插入函數,具體的步驟如下:
    (1) 在【運算】設計按鈕對話框中現在要插入函數的位置,如圖6-34所示。用鼠標單擊對話框中要插入函數的位置,光標在該位置閃爍,表示處在等待插入的狀態。
    (2) 使用authorware中的【window】菜單中的【functions】命令選項(快捷鍵為ctrl+shift+f),彈出authorware的【functions】函數對話框。

圖6-35 插入函數后的【運算】設計按鈕對話框

    (3) 在函數類型列表中選擇要插入函數所屬的函數類型,如果不知道函數的類型,則在函數類型列表中選擇【all】選項。這里,我們選擇【all】選項。
    (4) 在函數名列表中用鼠標單擊要插入的函數,使其高亮處在被選中狀態。此時,在描述區域顯示框中顯示該系統函數的語法規則和使用方法的簡單描述。在這里我們選擇“circel”函數。
    (5) 單擊【paste】命令按鈕,將所選擇的函數插入到【運算】設計按鈕對話框中,插入后如圖6-35所示。
    (6) 將插入后的函數中的參數用讀者所使用的變量代替。
    (7) 如果讀者需要插入另外的函數,則不需要關閉【functions】函數對話框,讀者只需要重新在【運算】設計按鈕對話框中選擇新的插入位置,重復步驟(3)至(6)的操作即可。
    (8) 關閉【運算】設計按鈕對話框,結束函數的插入。

注意:
    關閉【運算】設計按鈕對話框后,authorware有可能會彈出新建變量對話框,這是因為讀者在設定函數的參數時,使用了新的變量,讀者需要在新建變量對話框中設置這一新的變量。
    注意:函數的使用位置和方法基本上同變量的使用位置和方法,重要的是讀者要特別留意函數中各參數的使用,還要注意函數返回值的意義和在程序設計中的應用。

使用自定義函數

    由于特殊任務的需要,在authorware所提供的系統函數不能滿足需求的情況下,用戶需要引入一些自己定義的函數來實現特定的任務,這些函數我們稱為authorware引入的自定義函數。
    創建自定義函數有專門的介紹,在這里,我們先學習如何使用自定義函數。
    在使用自定義函數之前,必須要加載這個自定義函數。之所以要加載自定義函數,目的是使authorware能知道存放該函數的地點,從而能夠直接從磁盤上讀取該函數。當一個自定義函數加載后,就可以象使用authorware所提供的系統函數一樣來使用自定義函數。因此,使用自定義函數有兩步;
    (1) 加載自定義函數。
    (2) 將自定義函數插入到需要使用的地方。
    下面請讀者來學習這兩個使用自定義函數的步驟:
    加載自定義函數:
    在authorware中,可以以很多方式來加載所需要的自定義函數。綜合起來有下面三種方式。而事實上,三種方式最終都要使用【load functions】對話框,不同之處是打開【load functions】對話框的方式不同,所以事實上有兩種:
    (1) 用【functions】對話框來加載自定義函數。
    ①使用authorware中的【window】菜單中的【functions】命令選項(快捷鍵為ctrl+shift+f),彈出如圖6-36所示的authorware的【function】函數對話框。

    ② 在【category:】函數類型下拉列表中選擇【untitled】選項。
    ③ 用鼠標單擊圖4-36所示的【load】命令按鈕,則屏幕上會彈出圖6-37所示的對話框,在此來選擇自定義函數所在的自定義函數文件。

圖6-37 定位自定義函數對話框

    ④ 選擇需要加載的自定義函數所在的文件,單擊【打開】命令按鈕,authorware會彈出如圖6-38所示的引入文件中所包含的自定義函數的列表。

圖6-38 自定義函數列表

    ⑤ 在圖6-38所示的對話框中,在左邊自定義函數列表區域中選擇要加載的函數名,則該函數的使用方法便在該對話框的【name:】顯示框中出現。單擊對話框中的【load】命令按鈕,加載所選擇的自定義函數。

提示:
    在windows系統中,自定義函數文件擴展名為dll,它是一個動態連接庫中的文件。
    ⑥ 則讀者可以觀察到在【functions】函數對話框的函數名列表中出現圖6-39所示的自定義函數,該函數名的出現,表示我們已經將該自定義函數加載到authorware中。

圖6-39 加載自定義函數后的【functions】函數對話框

    ⑦ 將自定義函數插入到需要的位置的方法同系統函數的插入方法相同,讀者可以自行實踐。
    (2) 在【運算】設計按鈕對話框、對話框的正文輸入框或正文顯示對象中直接加載自定義函數。步驟如下:
    ① 在合適的位置直接輸入自定義函數名及其參數。
    ② 關閉【運算】設計按鈕對話框、對話框或用于創建正文顯示對象的設計按鈕,此時,彈出圖6-37所示的【load function】定位自定義函數對話框。
    ③ 其它的設置方法參見(1)中的操作步驟(4)~(7)。
    使用自定義函數:
    當加載了一個自定義函數后,在authorware中該自定義函數的使用就完全和系統函數相同了。

提示:
如果讀者在作品中使用了自定義函數,則在最后發行該應用程序作品的時候,必須要包括存儲該自定義函數的文件。關于作品的最終打包與發行我們會在后續的實例中詳細介紹。

創建自定義函數

    由于特殊任務的需要,authorware所提供的系統函數不能滿足需求的情況下,用戶需要引入一些自己定義的函數來實現特定的任務,這些函數我們可以稱為authorware引入的自定義函數。
    對于所引入的自定義函數有以下兩種:
    具有返回值的函數。
    沒有返回值,只執行某種操作的函數,我們可以稱之為命令。
    在該部分內容中我們學習下述要點:
    什么時候使用自定義函數;authorware應用程序的開發過程中,使用外部的自定義函數是最后的手段。
    如何創建自定義函數:自定義函數文件可以使用多種編程語言或編譯器來建立。
    當引入的自定義函數不遵循authorware的約定時的處理:    當authorware認為動態連接庫(dll)并沒有遵循authorware的約定時,將在設置的過程中加入更多的步驟。

    1. 什么時候使用自定義函數
    使用authorware的好處是用戶不必是一個經過專門訓練的編程人員,就可以創建高級的應用程序。在實際的使用過程中,讀者會偶爾遇到authorware所不能解決的問題或不支持的功能,在不考慮對執行效果的影響和時間的需求上,我們可以求助于引入外部代碼-自定義函數來實現這些。
    筆者提醒初學者,在編程過程中,要真正地抵制authorware自定義函數便利性的誘惑。新的authorware編程者由于下述的兩個原因而習慣于使用外部代碼-自定義函數。
    (1) 傳統的編程背景的影響:具有傳統編程經驗的新的authorware編程者有一種依賴于他們已經知道的東西的趨勢,筆者也一樣。在authorware的編程過程中,一碰到復雜的控制、制作一個動畫等比較復雜的操作時,總是趨向于用已經知道的工具來尋求幫助,而不去仔細的研究authorware是否能實現這些功能。
    (2) 忽略了authorware編程的實質:有很多編程人員只注重autorware的編程規則,而不去開發和領會authorware的編程實質,對于編程規則只是表面的使用,而不能對authorware的編程規則融會貫通,并在其規則的基礎上進行進一步的創新,實現新的功能。
    不注重autorware編程的實質,一旦碰到較復雜的問題,就迅速地求助于外部的文件代碼-自定義函數來實現特定的功能。

提示:
    讀者在今后程序的設計過程中,要充分利用authorware的編程規則,并在其基礎上進行創新,盡量少地使用外部代碼。盡量少地引入自定義函數。
    2. 如何創建自定義函數
    在該部分內容中我們將介紹創建authorware自定義函數的一些基礎知識。在這里,首先我們對在windows環境下創建自定義函數的一些基本規則向讀者簡單地介紹一下:

內容一:dll和ucd:
    對于windows系統來說,自定義函數是以動態連接庫(dll)文件格式存儲的,因此,存儲自定義函數的文件和應用程序模塊是分開的,所以自定義函數文件是外部文件。在打包和最終發行作品時,必須包含使用了其函數的自定義函數文件。
    盡管authorware有強大的功能,但其并不支持dll文件的編寫,如果要創建dll文件,則要借助于其它種類的編程語言來進行windows下的編程。這已超出了本書的范圍,我們就不再這里詳細介紹了。具體dll文件的創建參見其它編程語言的書籍(c、c++語言等)。
    雖然我們在這里不詳細介紹dll文件的創建,但是,我們要在這里向讀者介紹創建dll文件時要注意的事項:在創建一個自定義函數的dll文件時,讀者必須在該文件中包含加載和使用一個自定義變量時所需要的特定信息:
    函數存放的位置
    函數名
    函數的參數個數和參數類型
    函數的返回值
    當authorware加載一個自定義函數時,是用一個被稱為調用轉換的標準格式來顯示這些信息的。因此,在創建一個自定義函數時,必須包含上述信息,以便于authorware準確地調用函數。
    在我們使用自定義函數時,通常會遇到下面兩種情況:
    (1) dll符合authorware的調用轉換標準格式:authorware加載自定義函數所需的信息已經直接插入到dll中,所以當authorware選擇該dll文件后,該自定義函數就已經被直接加載到authorware中。
    (2) dll不符合authorware的調用轉換標準格式:因為dll不符合authorware的調用轉換標準格式,所以必須由用戶在加載該自定義函數時手工給出自定義函數的信息,否則,當調用該自定義函數時,authorware會提示用戶輸入相關信息。提示對話框如圖6-40所示。
    對于對windows編程不熟悉的用戶來說,使用dll是比較困難的。為了方便用戶的使用,authorware提供了一種對dll文件的透明方式加載(ucd)。當加載一個ucd文件時,讀者會發現一個dll文件中可以使用的函數列表,用戶只需象粘貼一個系統函數一樣,將一個想使用的自定義函數粘貼到要插入的位置。

內容二:自定義函數的創建規則:
    (1) 函數名的格式:dll文件和調用它的程序模塊是相互獨立的文件,因此,在程序模塊調用dll文件時,必須指定準確的搜索路徑。在authorware中,識別一個自定義函數有三種方式。下面我們以自定義函數hotclick()(數字標識為30)為例來說明這三種識別方式:
    ① 自定義函數原先的函數名:hotclick:當使用這種形式時,autorware將尋找名為hotclick的函數,并用這個名稱進行加載。
    ② 存儲函數名的變量:hclick= hotclick:當使用該形式時,authorware尋找名為hotclick的函數,然后將它命名為hclick。

注意:
    當一個自定義函數名與系統函數或已定義的自定義函數名相同時,這種形式是避免函數名沖突的有效方法。
    ③ 被稱為該函數原型的數字標識:hclick=@30:當使用該形式時,authorware就直接通過自定義函數的數字標識來選擇自定義函數。因此在使用hotclick自定義函數時可以用hclick來代替。

注意:
    使用該方式,可以使authorware迅速地調用要使用的自定義函數,大大地提高程序執行的速度。

圖6-40 為自定義變量重新命名

提示:
    加載自定義函數后,讀者可以在【functions】函數對話框中的函數名列表中看到自定義函數名,讀者可以使用該對話框中的【rename】命令按鈕來彈出圖6-40中所示的【rename function】對話框來為自定義變量重新命名。
    (2) 函數參數列表的格式:用戶可以使用參數列表的形式來輸入函數的參數。如果自定義函數的參數不止一個時,參數之間要用逗號隔開。在用列表形式來輸入函數參數時,參數的數量和參數的類型必須和原型函數中所定義的內容相一致。

    表6-1所示的是authorware中所有有效的參數類型。

表6-1  authorware中有效的參數類型

參數類型

含義

等效于windows編程中的參數類型

char

有符號byte

char

byte

無符號byte

unsigned char、byte

short

有符號整數

int、shoot、boot

word

無符號整數

unsigned  word  handle

long

有符號整數

long long

dword

無符號長整數

dword unsigned long

float

浮點數

float

double

雙精度型浮點數

double

point

遠程指針

far   lppoint

string

以零結束的字符串遠程指針

 

void

空函數

void void

 

表6-2  參數類型之間的轉換規則

要求的參數類型

整型

實型

字符串

char byte short word

取最低的字節

轉換為整型后,再取最低字節

轉換為整型后,再取最低字節

long  dword

不變

轉換為有符號常整型

轉換為有符號常整型

float

轉換為浮點型值

按浮點型值判斷

轉換為浮點型值

double

轉換為雙精度浮點型值

不變

轉換成雙精度浮點型值

pointer

不變

截斷成為符號長整型

轉換成指向字符串的遠程指針

string

轉換為指向數值格式化字符串的遠程指針

轉換成指向數值格式化字符串的遠程指針

轉換成指向字符串的遠程指針


    如果用戶輸入的參數類型與自定義函數中要求的參數不一致,則authorware會自動將輸入的參數類型按照表6-2中的轉換方式來進行轉換。

    (3) 函數的返回格式:如表6-3所示為自定義函數的返回類型列表:

表6-3  自定義函數有效返回值類型

參數類型

含義

等效于windows編程中的參數類型

char

有符號byte

char

byte

無符號byte

unsigned char,byte

short

有符號整數

int,shoot、boot

word

無符號整數

unsigned  word  handle

long

有符號整數

long long

dword

無符號長整數

dword unsigned long

float

浮點數

float

double

雙精度型浮點數

double

point

遠程指針

far   lppoint

string

指向以零結束的字符串

 

void

無返回值

void void

    (4) 加載不符合authorware調用轉換格式的自定義函數時的設置:當讀者在【functions】對話框中使用【load】命令按鈕來加載自定義函數時,如果dll文件的格式不符合authorware調用轉換格式的話,則authorware會自動彈出如圖6-41所示的對話框來要求用戶來輸入所加載函數的相關信息。包括如下內容:
    函數名
    參數名
    參數列表
    函數返回值
    函數相關描述等信息。
    在該對話框中,函數的描述是可選的輸入區域,其它的輸入區域是必須填寫的。否則自定義函數無法加載。
    在【function name】正文輸入框中輸入函數名;
    在【arguments:】正文輸入框中輸入參數的列表;
    在【return:】正文輸入框中輸入返回值的類型;
    在【description】正文輸入區域中輸入對函數的相關描述,該選項可選。
    設置好該對話框后,單擊【load】命令按鈕加載自定義函數。

圖6-41 輸入自定義函數相關信息對話框

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲午夜视频 | 国产精品久久久久久久久久东京 | 日韩精品中文字幕一区二区 | av电影在线网站 | 欧美一级做一级爱a做片性 久久久资源网 | 亚洲第一页夜 | 91成人在线网站 | 欧美色视频免费 | 亚洲第一页中文字幕 | 国产精品午夜一区 | 精品偷拍久久 | 日韩视频一区二区三区四区 | 免费黄色小视频网站 | 久久国产一二区 | 久草热久草视频 | 亚洲性视频 | 精品中文字幕久久久久四十五十骆 | 一级@片| 欧日韩 | 免费黄色在线 | 亚洲网站在线观看视频 | 国产精品久久久久久久久久久久久久久久 | 哪里可以看免费的av | 成人免费视频视频在线观看 免费 | 黄色试看视频 | 国产深夜福利视频在线播放 | 青青草成人影视 | 毛片在线免费观看完整版 | 久久免费视频在线 | 成人在线视频黄色 | 最新一级毛片 | 亚洲小视频在线播放 | 在线视频 亚洲 | 亚洲一二区视频 | 日本a级一区 | 久久午夜国产 | 在线高清中文字幕 | 黄wwww | 羞羞视频在线免费 | 色综合欧美 | 国产精品高潮视频 |