亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

為Nokia S60編寫移動游戲之二

2019-11-18 19:41:52
字體:
來源:轉載
供稿:網友

  把基于Series 60的智能電話作為一種游戲設備

  本章將深入研究Series 60和Symbian OS,描述它們作為一個游戲平臺的特性。此外,智能電話的需求和限制也將被討論。

  需求

  與許多其它用于游戲的設備不同,智能電話需要在游戲中或者任何其他的應用程序運行的時候能夠通知用戶各種系統事件。 應用程序需要考慮到可能的中斷,例如因為打進來的電話或者消息,并且它們需要根據情況進行處理。 應用程序還應該不消耗設備資源,例如過度的使用內存或者電量。

  通知用戶的大多數系統消息使用系統自己的對話框,稱為全局通知。 這個對話框具有比任何應用程序都要高的窗口優先權,因此它們出現在應用程序的前端。 在系統事件中,一個異常是打進來的電話造成電話通信應用程序變成最前端的應用程序而把被中斷的應用程序留作背景。 然而,所有的系統端事件具有一個公共特征,可以被一個應用程序捕捉。 當一個系統事件發生時,最前端的應用程序失去焦點。 這造成應用程序用戶接口類(CAknAppUI)的HandleForegroundEventL方法被調用。 通過覆蓋這個方法,應用程序可以執行需要的動作,例如暫停正在進行的游戲。

  應用程序需要注意電池使用量。 當一個電話在預定的時間內沒有使用的情況下,它會進入睡眠方式以便消耗最少的電量。 如果一個應用程序持續做后臺處理,例如在一個循環中查詢一個變量,電話可能不會進入休眠狀態。 所有的查詢應該在程序塊循環中執行,并且所有的計時器應該在游戲暫停的時候停止。 一旦一個計時器需要來維護和另一個終端的連接,這個計時器的頻率應該降到最小水平。 當在預先設定的時間間隔里一直沒有用戶活動的時候,應用程序還可以從一個系統端計時器中取得事件。 要做到這些可以使用e32std.h頭文件中可以找到的RTimer::Inactivity方法。 在電池供電的設備中,軟件需要對突然斷電有所準備。 電池可能會沒電,或者用戶可能把它從設備中拿出來。 如果重要的用戶數據被編輯的時候,就更應該注意這些情況了。 每隔一段時間這些數據就應該被保存,并且能夠在重新啟動之后恢復。 此外,應用程序應該對被損壞的數據有所準備,并且能夠安全地從這種情況下恢復。

  限制

  除了有限的存儲量之外,智能電話和PC相比有其他幾個限制。 首先,智能電話沒有像PC一樣高效的處理器。 智能電話基本都沒有數學處理器,因此時間單位計算應該使用整數實現。 Symbian OS作為一種游戲平臺還有一些約束。 例如,這個平臺不支持可寫的靜態數據,而靜態數據經常被用于在游戲中來最優化訪問廣泛使用的數據。

  智能電話還有相對限制的硬件。 顯示屏幕有有限的分辨度、尺寸和彩色深度。 小鍵盤只有有限數目的按鍵,并且按鍵的布局可能不便于玩游戲。 在不同硬件解決方案之間,鍵盤的布局可能會有很大的不同,因此游戲應該提供用戶重新定義按鍵的功能。 智能電話還沒有足夠的端口來支持各種游戲控制器,像方向盤和游戲桿,這些都是在PC環境中很常見的。 所有這些限制決定了哪些游戲可以被實現并且安裝到一部智能電話上,而不會降低它們的可玩性。 然而從長遠的觀點來看,智能電話中使用的技術將越來越精巧,新的特性和解決方案將被引入。
  內存

  在內存有限制的設備中,內存管理處于一種非常重要的地位。 這關系到運行時間內存使用和最后的編譯代碼長度。 大部分基于Symbian OS和Series 60的設備只有8 MB內存甚至更少。 除了內存以外,這種設備只有用于預先安裝的軟件和用戶數據區域的只讀存儲器,只讀存儲器用于安裝應用程序和系統的可寫入數據和持久數據文件。 此外,便攜式存儲卡,例如小型閃存( CF)卡或者多媒體卡( MMC),可能依靠硬件支持。

  內存使用最重要的規則是所有分配的存儲器都應該在在盡可能的早期釋放。 Symbian OS仿真程序提供一個宏用于內存檢驗,默認情況下所有應用程序都有圖形用戶界面。 如果這個宏不能釋放內存,這個宏將使應用程序變混亂,這樣就會出現內存泄漏。 在一個目標硬件中,OS的核心記錄每個線程的內存并且在線程退出的時候自動的釋放它。 這保證所有的內存都在應用程序退出的時候被釋放。 運行時間一長,應用程序和服務器可能出現一個問題。 它們在結束使用它們的時候,如果它們不釋放已經不需要的資源,那么就會有很多資源被系統保留起來而不能被應用程序所使用。

  當實現一個應用程序時,堆棧存儲器的使用值得注意。 在Symbian OS中,每個線程都有自己的存儲堆棧,不能在線程已經啟動以后增大。 Series 60中的應用程序的默認堆棧尺寸只有20kB,所以它應該謹慎使用。 仿真程序環境和可用的堆??臻g中的目標硬件之間還有分歧。 仿真程序中的堆棧尺寸不像在硬件中那樣受限制,因為取而代之的是使用Windows自己的堆棧。 這就是為什么所有的軟件都應該在開發早期在硬件上測試,并且使用它們最大尺寸的堆棧變量。 大多數的堆棧都會因為使用堆棧描述符而溢出。 這可以通過從堆棧分配描述符并且通過使用自動對象來避免。 還有,遞歸的使用可能是一個非常消耗堆棧的事情。 如果真的無法避免遞歸程序設計,那么傳遞的參數和遞歸內部的局部自動變量也應該盡量最小化。

  為了最小化編譯代碼的大小,應該遵循下面的方針:

  1. 除非有必要,否則不要導出方法。

  2. 不創建不必要的虛擬方法。

  3. 不過度使用TRAP宏。

  4. 避免重復代碼。

  5. 找到可分解的函數

  6. 使用公共的控件和組件

  為了能夠從一個動態鏈接庫外訪問函數或者數據,被導出的方法被列在一個動態鏈接庫導出表中。 雖然在Symbian OS中,這些方法是以序號而不是以名字來導出的,所有的不必要導出的方法都會導致導出表的大小增大。 這是為什么方法應該只在它們有目的的用于它們被引入的庫之外的時候,它們才被導出。 這同樣應用到記錄在動態鏈接庫中的虛擬函數表中的虛擬方法。

  TRAP宏的使用應該小心地設計。 這不意味著它們會過度使用,因為它們的負面影響是增大編譯的代碼的尺寸。 Symbian OS的應用框架提供的TRAP經常對于應用開發者來說已經足夠了,他們不需要編碼他們自己的TRAP。

  在列表中的最后三個條目是最常用的方法,以最小化所有平臺上的代碼尺寸,并且不需要被詳細的討論。

  由于游戲的圖形特性,位圖經常占用大量的內存使用量。 這應用于隨機存取存儲器和用戶數據區域使用量。 有助于減少使用量,而不減少位圖的數目的最有效的方法是減少它們的顏色數。 Symbian OS支持16777216種顏色的24位位圖,但是實際的最大顏色數受目標硬件限制。 這就是為什么所有的位圖都不應該轉化為比硬件設置最大顏色數更高。 小型的低細節的不需要許多顏色的位圖,應該參考上的規則轉化為比最大顏色數要低的顏色數。 例如8位顏色適合于大多數的子圖形。 而所有的mask都應該被轉化為1位的位圖。

  計時器

  對于大多數游戲來說,計時是必不可少的。 系統端提供的計時服務用于各種目的。 在更復雜的游戲中,游戲的場景經常更新,并且用戶的輸入在一秒中被讀很多次。 在更簡單的游戲中,計時被用于處理游戲玩家的回合或者評估一個游戲玩家是否成功的解決一個給定的問題等等。 大多數的游戲都需要來自系統的計時支持。

  在Symbian OS中,最不足的服務之一就是計時服務。 OS不支持低級計時中斷,它只提供一個有最大頻率為64 Hz的核心端計時器。 相同的時鐘頻率還被用于線程的循環調度。 仿真程序環境中,最大時鐘頻率是10 Hz,這會導致游戲的測試出錯。 系統的最大時鐘頻率可以使用UserHal::TickPeriod方法訪問,是用一種平臺無關性的方法來給出時鐘周期。 這個方法在e32hal.h頭文件中被引用。 圖3.1是Symbian OS計時器類的類圖。

圖3.1 Symbian OS計時服務的類圖

  核心端計時器可以使用RTimer類取得,這是一個到系統端服務器的操作。 它提供一個簡單的應用編程接口來請求三個不同的計時事件:一段給定時間之后的事件,給定時間的事件和一個完成一秒鐘的給定分段的事件。 這個應用程序編程接口需要TRequestStatus作為一個參數被傳送進去,交付給應用程序開發者來使用活動對象作為事件處理程序。 為了簡化RTimer的使用,Symbian OS提供一個抽象活動對象CTimer,封裝了RTimer的使用。 這可以使用一個簡單的封裝完成,應用程序開發者需要從CTimer中派生出這個類,然后覆蓋當一個請求完成時被調用的RunL方法。 然而,由于在計時服務中使用了活動的對象,真實計時事件處理可能延遲。 當一個計時器請求完成的時候,另一個活動的對象可能已經被執行,并且正在處理這個記時事件的活動的對象直到另一個活動的對象結束它的RunL的時候它才會被列入計劃。 這雖然不可避免,但是對于計時精度的影響可以通過讓所有的RunL方法盡可能短時間運行來達到最小化。 如果另一個帶有更高優先權的活動對象被列在前面的話,這個事件處理可能還是會被延遲。 這可以通過使處理計時事件的活動對象比其它活動對象具有更高的優先權來避免。

  Symbian OS還提供兩個CTimer導出類來重復的進行計時事件:CPeriodic和CHeartbeat。這兩個類都在一個事件發生時調用一個回調方法。 對于CPeriodic,事件的間隔可以以微秒給出,而對于CHeartbeat來說,事件的間隔僅僅以秒劃分,這兩個類都是被TTimerLockSpec枚舉定義的。 最小的分數是十二分之一。 在CPeriodic中,給定的間隔近似到最接近的系統計時分辨率。 CHeartbeat提供了一個方法來使計時器與系統計時器同步。 如果錯過了一個或多個記時事件,那么它的回調方法Synchronize將被調用,并且使用這種方法,它可以提供一個應用程序執行必要的恢復動作的可能性。 上面提到的計時類可以從e32std.h和e32base.h頭文件中找到。

  按鍵事件處理

  Symbian OS是一個事件驅動系統--所有的應用程序和服務器都可以被看作為事件處理程序。 象按鍵事件這樣的事件都是被活動對象操作的,使事件處理非搶先式計劃。 一個用戶按下一個鍵的事件流程的示例如圖3.2所示。

圖3.2按鍵事件流程

  當一個用戶按下一個按鍵時,鍵盤硬件生成一個中斷,被鍵盤驅動程序捕獲。 在分解按鍵事件之后,驅動程序把它發送到一個稱為窗口服務器的系統端線程中。 窗口服務器發送事件到窗口群具有焦點的應用程序中。 這是使用一個控制環境( CONE)來實現的,這是一個介于窗口服務器和用戶界面庫之間的應用編程接口。 CONE和窗口服務器在第四章中做出了解釋。

  在應用程序端中,按鍵事件是在窗口服務器調用的OfferKeyEventL方法處理的。 每按下一個鍵就會生成三個單獨的事件。 第一個事件是EEventKeyDown,這是當一個鍵被按下的時候生成的。 然后是EEventKey,當鍵被松開的時候生成了EEventKeyUp事件。 這些事件類型是被TEventCode枚舉定義的,被傳送到OfferKeyEventL作為第二個參數。 第一個參數是一個結構(struct)TKeyEvent,指定關于事件的更詳細的信息。 如果一個鍵按下的時間長于0.8秒,窗口服務器發送另一個EEventKey事件到應用程序,長時間按鍵事件。 如果這個鍵按下的時間比這個還長,那么窗口服務器每隔0.25秒鐘發送一次按鍵重復事件。 這些時間幀對于Series 60來說是缺省值,它們可以被應用程序修改。

  TKeyEvent有一個成員變量iRepeats,用于從按鍵重復事件中分離出長時間按鍵事件。 一旦這個變量不為零,應用程序必須知道當最后一次按鍵事件被接收的時候這個值為多少。 如果最后的事件的iRepeats等于零,那么一個長時間按鍵事件就被接收,而如果不為零的話,就接收一個按鍵重復事件。 iRepeats變量是一個32位帶符號整數,定義了自從最有一次處理的事件之后定義的事件數。 因為大部分的案件事件在某個地方被處理,所以這個變量不定義自從第一個按鍵事件之后的實際重復數。 如果它們想知道鍵到底被按下去多長時間,這就是為什么應用程序需要它們自己計算重復的次數。 TKeyEvent和TEventCode的定義可以在w32std.h頭文件中找到。

  經常需要按鍵事件的游戲應該設置它們自己的按鍵重復率。 按鍵重復期間可以使用窗口服務器的帶有兩個參數的SetKeyboardRepeatRate應用編程接口來更改。 第一個參數在第一次按鍵重復事件之前指定時間,這相當于一個長時間按鍵事件,而第二個參數指定后繼按鍵重復事件之間的時間。 設置時間框相等產生了一個線性的重復速度,也就是說第一次按鍵事件和后續按鍵事件之間的時間框相等。 因為重復速度是全系統范圍的設置,所以它們應該在另一個應用程序進入前臺的時候被改回默認值。

  默認情況下,在Series 60中大部分的按鍵被阻塞;僅有電源鍵和編輯鍵是非阻塞按鍵。 無論如何,按鍵覆蓋對于游戲來說是非常重要的,因為游戲中往往需要用戶能同時按下兩個鍵。 這就是為什么Series 60提供能用于禁止按鍵阻塞的應用編程接口。 應用程序用戶界面的基本類CAknAppUi提供SetKeyBlockMode方法,可用于禁止按鍵阻塞。 這個應用編程接口接受一個TAknKeyBlockMode枚舉作為一個參數,這個枚舉可以有兩個可能的值:EDefaultBlockMode和ENoKeyBlock。 按鍵覆蓋也是一個全系統的設置,應該在游戲不在前臺的時候被恢復到缺省值。
  聲音

  在Symbian OS中,播放和操作聲音是由媒體服務器處理的。 媒體服務器支持各種聲音文件格式,比如 wa、au和wve,并且提供一個應用編程接口以便應用程序能夠開發補充的文件格式插入式模塊。 媒體服務器的客戶端應用編程接口被分為三個不同的接口:音頻示例編輯器,音頻音調播放器和音頻示例播放器。 音頻示例編輯器接口提供了高級音頻操作方法,可以用來錄音、編輯和播放聲音。 音頻音調播放程序接口啟動應用程序來創建和播放合成的聲音。音頻示例播放程序接口可用于播放樣本數據文件。 媒體服務器接口的使用需要在同一線程中運行一個活動的調度程序。

  對于大多數游戲來說,音頻示例播放器接口提供了所有需要的特性來實現要求的音響效果。這個接口由MMdaAudioPlayerCallback和CMdaAudioPlayerUtility類組成。 MMdaAudioPlayerCallback是一個mixin類,提供回調方法來通知客戶端類樣本的初始化或者播放已經完成。 這就是為什么這個使用樣本播放程序接口的類需要從mixin類中繼承而來。 CMdaAudioPlayerUtility類提供了加載和播放樣本的方法,并且可以設置播放的音量。 這個類可以僅僅和單一樣本數據關聯,這樣一個應用程序有多少個不同的樣本數據文件,它就需要創建多少CMdaAudioPlayerUtility的實例。 下面的代碼是使用的CMdaAudioPlayerUtility類的示例。

∥創建一個幫本播放程序并且從一個文件裝入樣本
CMdaAudioPlayerUtility* samplePlayer =
CMdaAudioPlayerUtility::NewFilePlayerL(
KSampleFileName, *this );
∥播放樣本
samplePlayer->Play(); 

  在Series 60中,每個應用程序對于每個鍵都有一個默認的聲音。 這個聲音還可以取決于這個按鍵事件是否是短時間、長時間或者重復按鍵。 Series 60應用程序用戶界面類CAknAppUi提供對應用程序在資源文件中指定它們自己的按鍵聲音效果的支持。

RESOURCE AVKON_SKEY_LIST r_example_skey_list
{
list =
{
AVKON_SKEY_INFO { key=EStdKeyLeftArrow;
sid=EAvkonSIDNoSound;},
AVKON_SKEY_INFO { key=EStdKeyLeftArrow;
sid=EAvkonSIDNoSound;
type=ESKeyTypeLong;},
AVKON_SKEY_INFO { key=EStdKeyLeftArrow;
sid=EAvkonSIDNoSound;
type=ESKeyTypeRepeat;}
};

  可用的聲音標示符SIDs在avkon.hrh頭文件中指定。 在游戲中,如果一個鍵被長時間按下,重復聲音應該通過指定這個按鍵事件的聲音標識符為EAvkonSIDNoSound來禁止。 這是因為每當一個按鍵重復事件接收的時候播放重復聲音會消費大量處理時間。 如果一個游戲需要連續的聲音,應該使用音頻樣本播放器來代替。

  安裝

  在Symbian OS中,應用程序的安裝是使用安裝文件sis文件來完成的。 Sis文件包含要被安裝的文件以及安裝時需要的信息。 sis文件中的數據被壓縮以節省存儲器,并且最小化sis文件傳送到終端的時間。 應用程序的安裝可以直接從一臺安裝了Series 60 PC Suite的個人計算機上運行相應的sis文件來完成。 Sis文件還可以通過首先使用各種通信技術例如WAP、藍牙和Infrared Data Association(紅外線數據協會)來下載文件,然后在一個通信應用程序中打開它。

  Sis文件使用程序包文件pkg文件構造,讓必要的信息匯編為一個sis文件:

; MyGame.pkg
; Specifies an installation file for MyGame
;Languages
&EN
;Header
#{"MyGame"},(0x1000ABCD),1,0,0
; Required line for Series 60 devices. (Added by NOKIA)
(0x101F6F88), 0, 0, 0, {"Series60"/epoc32/release/thumb/urel/MyGame.app"-
"!:/system/apps/MyGame/MyGame.app"
"/epoc32/release/thumb/urel/MyGame.rsc"-
"!:/system/apps/MyGame/MyGame.rsc"

  上面的這幾行里,凡是前面帶有分號的,都是注解行。 第一個非注解行指定支持的語言變體。 一個sis文件可能包含多于一個的語言變體,雖然每次只能安裝一個變體。 第二行專留作一個程序包頭,指定應用程序的名稱和標識符,主要的和次要的版本號以及構造號。 在此之后,是Series 60 Product Uid。 這個指出這個應用程序可以安裝在哪個Series 60平臺版本和設備。 可以使用多個Series 60 Product Uid。 下面是大部分公共Series 60 Product Uid:

Nokia 76500x101F6F87
Nokia 36500x101F7962
Nokia N-Gage? Mobile Game Deck0x101F8A64
SX10x101F9071
Series 60 Platform v0.90x101F6F88
Series 60 Platform v1.00x101F795F

  下面的幾行定義將要被安裝的文件。 每行指定PC中的源路徑,以及在終端上的目標路徑。如果目標驅動器字母被指定為一個感嘆號,用戶可以在安裝時選擇驅動器。 程序包文件格式還支持一些可以被使用的可選參數,例如指定和語言有關的文件。 sis文件是使用一個稱為makesis的命令行工具匯編的,接收一個相應的pkg文件作為一個參數。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品在线看| 热re91久久精品国99热蜜臀| 91av在线精品| 国产丝袜一区二区三区免费视频| 亚洲精品www久久久久久广东| 国产有码在线一区二区视频| 欧美另类极品videosbest最新版本| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩视频免费播放| 亚洲一区二区久久久久久久| 成人性生交大片免费看视频直播| 久久久久久久久久久免费精品| 日韩视频免费在线观看| 正在播放欧美视频| 日韩中文字幕在线免费观看| 久久久91精品国产一区不卡| 久久人体大胆视频| 日韩成人中文字幕| 欧美一级淫片aaaaaaa视频| 国产精品丝袜高跟| 96国产粉嫩美女| 亚洲国产欧美一区二区三区同亚洲| 欧美一级淫片丝袜脚交| 68精品久久久久久欧美| 91久久在线视频| 国产中文日韩欧美| 国产精品极品美女在线观看免费| 性欧美暴力猛交69hd| 国产精品自产拍在线观看| 欧美日本精品在线| 国产精品丝袜一区二区三区| 久久久人成影片一区二区三区| 亚洲另类图片色| 久久香蕉国产线看观看网| 日韩在线视频一区| 91亚洲国产成人精品性色| 欧美一区二区三区四区在线| 欧美日韩在线观看视频| 中文字幕在线看视频国产欧美在线看完整| 欧美性理论片在线观看片免费| 日韩av电影在线播放| 国产成人精品免高潮在线观看| 亚洲国产99精品国自产| 丝袜情趣国产精品| 日韩美女免费视频| 97人人模人人爽人人喊中文字| 欧美激情一区二区久久久| 日韩成人激情影院| 亚洲精品久久久久久下一站| 国产在线视频一区| 精品欧美激情精品一区| 精品无人区乱码1区2区3区在线| 欧美日韩在线观看视频| 日韩高清电影免费观看完整| 欧美成人精品一区| 欧美一级免费视频| 正在播放亚洲1区| 日韩电影免费在线观看中文字幕| 亚洲跨种族黑人xxx| 日日狠狠久久偷偷四色综合免费| 国产精品99久久久久久白浆小说| 国产精品影院在线观看| 亚洲激情视频在线观看| 欧美一区视频在线| 欧美日韩国产精品一区二区不卡中文| 日韩激情片免费| 国产精品丝袜高跟| 亚洲国产成人精品久久久国产成人一区| 久久人人爽人人爽人人片av高请| 久久成人亚洲精品| 久久久久久久久91| 久久亚洲电影天堂| 亲子乱一区二区三区电影| 精品久久香蕉国产线看观看gif| 91在线视频免费| 久久亚洲国产成人| 亚洲精品一区二区久| 国产精品福利在线| 亚洲精品久久久久久久久| 国产亚洲精品成人av久久ww| 久久免费高清视频| 在线看福利67194| 国产精品自产拍高潮在线观看| 欧美一区深夜视频| 午夜免费日韩视频| 欧美性生交大片免网| 精品久久久久久久久久久久久| 91久久精品国产91久久| 亚洲国产成人久久| 中文字幕精品久久久久| 欧美日韩在线免费观看| 欧美在线一级va免费观看| 国产一区二区激情| 精品一区二区亚洲| 久久伊人91精品综合网站| 亚洲自拍偷拍在线| 色哟哟网站入口亚洲精品| 高清亚洲成在人网站天堂| 国产精品美女在线| 岛国av午夜精品| 91产国在线观看动作片喷水| 成人黄色片在线| 国产在线视频2019最新视频| 国产成人亚洲精品| 国产成人精品在线| 日韩久久精品成人| 午夜精品视频网站| 欧美成人免费大片| 九九九热精品免费视频观看网站| 亚洲男人天堂网| 日本成人精品在线| 欧美激情中文字幕乱码免费| 日韩一区二区福利| 亚洲91av视频| 欧美亚洲伦理www| 欧美在线观看www| 91久久国产精品| 国产成人jvid在线播放| 美日韩在线视频| 久久成人免费视频| 热99精品里视频精品| 国语自产精品视频在线看一大j8| 亚洲欧美一区二区三区情侣bbw| 中文国产亚洲喷潮| 欧美成人免费小视频| 在线播放亚洲激情| 亚洲日本aⅴ片在线观看香蕉| 色综合久久久久久中文网| 成人久久精品视频| 性色av一区二区三区| 久久影院模特热| 欧美性jizz18性欧美| 97国产一区二区精品久久呦| 91久久国产婷婷一区二区| 亚洲欧美国产精品久久久久久久| 精品视频在线播放色网色视频| 国产精品老牛影院在线观看| 日韩中文字幕在线观看| 亚洲美女免费精品视频在线观看| 一区二区三区视频免费在线观看| 国产精欧美一区二区三区| 欧美亚洲一级片| 一本色道久久88综合亚洲精品ⅰ| 91国产视频在线播放| 亚洲一区二区三区四区在线播放| 国产精品久久色| 国产精品久久久久久久av电影| 亚洲欧美中文日韩v在线观看| 国产成+人+综合+亚洲欧美丁香花| 亚洲精品在线观看www| 日韩欧美在线国产| 亚洲精品之草原avav久久| 国产精品久久久久久久久久东京| 成人亲热视频网站| 亚洲午夜av久久乱码| 狠狠躁夜夜躁人人爽天天天天97| 欧美精品在线看| 日本在线精品视频| 久久欧美在线电影| 亚洲精品电影久久久| 亚洲欧美精品伊人久久| 日韩中文娱乐网| 日韩欧美a级成人黄色| 欧美猛男性生活免费|