精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從構思到發布 開發Windows Phone 7小游戲

原創
移動開發
本文介紹了Windows Phone 7平臺游戲開發過程的整個周期,從游戲構思開始,到游戲發布到Windows Phone Marketplace結束,這個過程的任何細節都不會遺漏。

【51CTO譯文】引言

到底能多快地為運行Windows Phone 7的現代化手機開發一款功能完備的游戲?為此你需要具備什么條件?又會面臨什么樣的難題?

我們將在開發小游戲期間力圖解答上述問題。為了營造一種實際的環境,這個功能完備的應用程序開發后將提交到Windows Phone Marketplace。

我們將審查游戲開發過程的整個周期,從游戲構思開始,到游戲發布到Marketplace結束,這個過程的任何細節都不會遺漏。

游戲構思

我們不會仿效其他游戲。我們考慮的是開發一款新穎、有趣、絢麗的游戲——是專門為使用方向感應器和觸摸屏的手機而開發的。你只要將手機往不同的側邊傾斜,就可以在方向感應器的幫助下操縱小球,好像小球就在方形盒子里面滾動。

畫面上有多個彩球。它們試圖撞到白球,給白球著上自己的顏色。

用戶只要用指尖點一下彩球,就可以擊碎彩球。你點一下球后,就會變成色彩鮮艷的飛濺物,然后會消失,之后新的球會出現。每擊碎一個球,就能得到更高的分數。用戶能玩的關卡數量沒有限制。

玩家的目標應該是得到盡可能高的分數。

為了讓玩家可以使用方向感應器(而不僅僅擊碎球),為游戲添加了更多的球(黑球)。除非黑球被著上別的顏色,否則不會被擊碎。

2D圖形對這款游戲來說綽綽有余。此外,需要播放音樂,與方向感應器和觸摸屏進行交互。

開發環境

為了針對Windows Phone 7開發應用程序,我們需要Visual C# 2010簡易版和Windows Phone開發者工具(Windows Phone Developer Tools)。兩者都是免費產品。

然后進入到微軟網站,下載和安裝下列工具:

Windows Phone開發者工具無法安裝到Windows XP上,不過你可以采取這個辦法。然而,手機模擬器可能無法在Windows XP上運行,因而***還是安裝Windows 7。

如果你已經擁有Visual Studio 2010,***在上面安裝Windows Phone開發者工具,因為Visual C# 2010 簡易版用起來明顯更不方便。

技術選擇:XNA對決Silverlight

安裝了Windows Phone開發者工具后,可以選擇用Studio來創建新的項目類型:Windows Phone應用程序(Windows Phone Application)和Windows Phone游戲(Windows Phone Game)。

哪一個更適合我們呢?

***個項目是面向Windows Phone 7的Silverlight應用程序。相應地,它可以訪問幾乎所有的類,這些類在通常的Silverlight中得到表示。它有XAML和控件以及Studio中的設計器等。

第二個項目是XNA 4.0.應用程序。它沒有任何控件;不過,它有游戲周期,可以快速訪問硬件圖形的功能特性。

從名稱和技術描述來判斷,我們需要的是XNA。Silverlight有沒有可能也適合開發游戲?用Silverlight for Windows Phone簡單測試一下,就會發現這項技術的局限性:數百個同時運動的小圖像讓手機進入幻燈片模式。如果我們用XNA進行同樣的測試,一切都快速運行(擁有數量更多的圖像)。

這就是為什么我們用XNA來開發游戲。遺憾的是,沒有控件;但目前看來控件也沒什么用處。

上手XNA

我們不妨用Studio來創建Windows Phone游戲項目。該項目與游戲類一同出現:

public class Game1 : Microsoft.Xna.Framework.Game

不妨定義用戶在玩游戲期間如何握持手機。假設一只手握持手機(旋轉手機即可操縱白球)、另一只手點彩球更為舒適。這意味著,我們需要縱向游戲模式。我們為游戲構建器添加了這種模式。

  1. public Game1()  
  2.  
  3. {  
  4.  
  5. graphics = new GraphicsDeviceManager(this);  
  6.  
  7. Content.RootDirectory = "Content";  
  8.  
  9. graphics.SupportedOrientations = DisplayOrientation.Portrait;  
  10.  
  11. graphics.PreferredBackBufferWidth = 480;  
  12.  
  13. graphics.PreferredBackBufferHeight = 800;  
  14.  
  15. graphics.IsFullScreen = true;  
  16.  

 然后在這個類中,我們最感興趣的是兩項功能:Update(更新)和Draw(繪制)。 

  1. protected override void Update(GameTime gameTime)  
  2.  
  3. {  
  4.  
  5. // Allows the game to exit(允許游戲退出)  
  6.  
  7. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)  
  8.  
  9. this.Exit();  
  10.  
  11. // TODO: Add your update logic here(TODO:在這里添加更新邏輯)  
  12.  
  13. base.Update(gameTime);  
  14.  
  15. }  
  16.  
  17. protected override void Draw(GameTime gameTime)  
  18.  
  19. {  
  20.  
  21. GraphicsDevice.Clear(Color.CornflowerBlue);  
  22.  
  23. // TODO: Add your drawing code here(TODO:在這里添加繪制代碼)  
  24.  
  25. base.Draw(gameTime);  
  26.  

***項功能專門用于游戲邏輯處理。我們會得到用戶動作(從方向感應器到觸摸屏)方面的數據,并算出所有游戲物體的新位置。

第二項功能專門用于繪制屏幕上的游戲物體。

有必要說明:這兩項功能執行的總時間不該超過游戲周期的一次迭代。這在手機上相當于33毫秒,因為游戲周期的頻率是每秒30幀。如果功能執行的時間超過這個值,游戲速度就會很慢,一些幀就會被遺漏,或者更糟糕的是,游戲會忽略用戶動作。

這個游戲實際上是實時應用程序。它對垃圾收集器(Garbage Collector)的動作會有怎樣的反應?***是避免垃圾收集器突然干預的情況,那樣我們可以順利地處理物體,不用在每次迭代時創建成千上萬物體。一般來說,我們不需要經常創建物體,因為游戲世界的所有物體相對來說歷時長久。我們會使用已有物體的結構或鏈接作為特征參數。這樣一來,垃圾收集器不會阻止我們做所需的動作。

我們不妨試著編譯和啟動應用程程序。在幾臺電腦上,你可能會看到表明XNA無法在模擬器上啟動的消息。這樣一來,你可能要創建Windows游戲項目,并附加來自Windows Phone游戲項目的文件(Add As Link,即添加為鏈接)。同樣這些XNA代碼可以在手機和Windows(以及XBOX 360)上運行。

***,有一個窗口填滿了紫色。這是由于GraphicsDevice.Clear(Color.CornflowerBlue)功能執行的結果。

游戲類中有一個SpriteBatch對象類。我們在繪制時需要這個對象。它含有處理2D圖形和文本的所有必要方法。

不過我們仍缺少最重要的方面:游戲內容。#p#

游戲內容

游戲內容是游戲必不可少的不同資源,比如紋理(用于繪制的圖像)、字體(輸出文本時需要)和聲音。

我們在創建Windows Phone游戲項目的同時,還創建了名稱是“Content”的另一個項目。我們應該為這個項目添加圖像和聲音文件。

此外,我們應該設定用于這個項目中文本輸出的所有字體。

在Content.Load(assetName)函數的幫助下,將內容裝入到程序很簡單。游戲類中擁有Content屬性。我們連同內容添加到項目中的資源名稱應該設成assetName。通常來說,這僅僅是沒有擴展名的文件名。要使用的內容類型(Texture2D、SpriteFont或SoundEffect)應該設成T。

內容裝入不是一種快速操作,這就是為什么我們在游戲開始時會裝入所有內容,以便需要時可以使用。

現在一切已準備好,我們可以開始開發游戲了。

游戲邏輯

所有游戲邏輯都可以放入到GameController這個單獨的類中。現在,游戲類中的Update功能看起來如同這樣:

  1. protected override void Update(GameTime gameTime)  
  2.  
  3. {  
  4.  
  5. // Allows the game to exit(允許游戲退出)  
  6.  
  7. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)  
  8.  
  9. this.Exit();  
  10.  
  11. GameController.Update(gameTime);  
  12.  
  13. base.Update(gameTime);  
  14.  

注意:我們把GameTime類的對象發送到GameController.Update。它擁有ElapsedGameTime屬性,該發展表明自上一次調用Update功能上以來過去了多長時間。這個時間通常是固定的,相當于手機上的33毫秒。不過,***不要依靠它,而是在所有計算中都使用發送的值。

我們在需要計算游戲世界物體的運動時,將使用ElapsedGameTime。比如說,如果我們需要計算白球的新位置(受手機傾斜的影響),它看起來會這樣:

position += (float)(acceleration * gameTime.ElapsedGameTime.TotalSeconds);

小球和飛濺物(它們一出現)的半徑按這種方式來計算:

radius += (float)(GrowSpeed * gameTime.ElapsedGameTime.TotalSeconds);

所有計算會用不同的類來進行。每個類都有各自相似的Update(gameTime)功能。GameController.Update會調用它們。#p#

繪制圖形

繪制圖形發送到GameController類。游戲類中的Draw功能現在看起來這樣:

  1. protected override void Draw(GameTime gameTime)  
  2.  
  3. {  
  4.  
  5. GraphicsDevice.Clear(Color.Black);  
  6.  
  7. spriteBatch.Begin();  
  8.  
  9. GameController.Draw(spriteBatch);  
  10.  
  11. spriteBatch.End();  
  12.  
  13. base.Draw(gameTime);  
  14.  

注意:我們只將SpriteBatch對象類發送到GameController.Draw。它只用于繪制。我們這里不需要GameTime,因為所有必要的計算已經在Update功能中進行。

隨后,GameController.Draw會從得到游戲世界邏輯的類調用相似的Draw(spriteBatch)功能。

繪制本身看起來相當簡單:

spriteBatch.Draw(texture, position, color);

這時我們只能顯示準備好的紋理。繪制2D基本圖形(直線、長方形和橢圓形等)的功能并不由XNA來提供。

可以通過從內容裝入紋理來得到紋理:

Texture2D texture = Content.Load(assetName);

紋理已經被裝入了;所有位置已被計算出來;不過,我們可以“調整”顏色!如果我們需要原始紋理顏色,就要有Color.White。

如果我們需要另一種顏色,應該用這種顏色布局來繪制紋理。如果我們要用阿爾法通道(alpha channel)來設定顏色,那么就能透明地繪制紋理。那樣,我們就能輕松自如地顯現和隱匿物體以及顏色變化(這些正是我們在游戲中需要的)。

為了混合兩種顏色,我們使用Color.Lerp函數。為了增加阿爾法通道,應使用Color.FromNonPremultiplied 函數。

另外還有spriteBatch.Draw函數的其他變種,允許變化和擴展文本,這也是我們的游戲所需要的。

文本輸出

文本輸出就跟圖形輸出一樣簡單:

spriteBatch.DrawString(spriteFont, text, position, color);

你可以通過從內容裝入SpriteFont類的對象來得到對象:

SpriteFont spriteFont = Content.Load(assetName);

你還可以在這里以同樣的方式設置字體顏色。如果你用阿爾法通道設置顏色,文本將是透明的。

如果你用浮動位置設置文本輸出的坐標,那么文本在顯示時可能會有點失真。這就是為什么在流暢的文本移動沒必要時,我們要將坐標舍入到整數。

spriteBatch.DrawString函數有其他變種,允許改變和擴展文本。有必要記住:這種運動會引起文本表述錯誤。之所以會出現這種情況,是因為XNA并不處理原始向量字體,但能處理柵格表示;項目一編譯好,就會創建柵格,隨后添加到內容中。#p#

觸摸屏

為了定義用戶在何處點擊屏幕,應該從Microsoft.Xna.Framework.Input.Touch.TouchPanel類得到數據:

  1. foreach (var item in TouchPanel.GetState())  
  2.  
  3. {  
  4.  
  5. if (item.State == TouchLocationState.Pressed  
  6.  
  7. || item.State == TouchLocationState.Moved)  
  8.  
  9. {  
  10.  
  11. // Get item.Position(得到item.Postion)  
  12.  
  13. }  
  14.  

 因此,我們就能得到用戶觸摸的所有屏幕點。不過,我們需要關于屏幕觸摸一次性動作(點擊、在屏幕上移動手指時)的數據。這些數據是跟蹤屏幕按鈕(比如暫停按鈕)觸摸所必可不少的。為了得到這些數據,應使用手勢支持。

在游戲開始時,應該表明我們需要支持手勢(點擊):

TouchPanel.EnabledGestures = GestureType.Tap;

然后,我們可以在游戲周期的每次迭代得到手勢:

  1. while (TouchPanel.IsGestureAvailable)  
  2.  
  3. {  
  4.  
  5. GestureSample gesture = TouchPanel.ReadGesture();  
  6.  
  7. if (gesture.GestureType == GestureType.Tap)  
  8.  
  9. {  
  10.  
  11. // Get guesture.Position(得到guesture.Position)  
  12.  
  13. }  
  14.  

方向感應器

為了得到關于手機傾斜的數據,就要使用Microsoft.Devices.Sensors.Accelerometer類。遺憾的是,我們無法直接從方向感應器得到數據,因為它只支持事件模式。這就是為什么應該使用創建對象和訂閱事件的附屬類:

  1. accelerometer = new Microsoft.Devices.Sensors.Accelerometer();  
  2.  
  3. accelerometer.ReadingChanged += AccelerometerChanged;  
  4.  
  5. accelerometer.Start(); 

在事件處理器中,我們會記住加速值,并保存起來,以便以后使用:

  1. private void AccelerometerChanged(object sender, AccelerometerReadingEventArgs e)  
  2.  
  3. {  
  4.  
  5. vector = new Vector3((float)e.X, (float)e.Y, (float)e.Z);  
  6.  

加速向量含有三個軸(X軸、Y軸和Z軸)的信息,但我們先只需要頭兩個軸(用于手機的縱向模式)。這就是為什么在我們的坐標系中返回加速的屬性看起來這樣:

  1. public Vector2 Acceleration  
  2.  
  3. {  
  4.  
  5. get  
  6.  
  7. {  
  8.  
  9. return new Vector2(vector.X, -vector.Y);  
  10.  
  11. }  
  12.  

是的,這個加速會被施加于白球。#p#

播放聲音

可以在SoundEffect類的對象中Play函數的幫助下,播放XNA中的聲音。這個類的對象可以從內容裝入:

SoundEffect sound = Content.Load(assetName);

只要這么處理,就可以播放聲音了。

窗口

許多東西已準備好:白球通過方向感應器來運動,其余球會追白球;一旦撞上,就會變成飛濺物,會計算分數,隨后播放聲音。看起來像是一切準備就緒?不,沒有這么簡單。

現在我們需要創建窗口;開始窗口(主菜單)、暫停對話窗口和游戲結束窗口(顯示得分數和記錄)。

面向Windows Phone的XNA沒有窗口,這就是為什么我們得自己創建窗口。不過,實際創建起來比較簡單。

用Parent、Children、Bounds、Visible和Enabled這些主要功能以及Update和Draw兩個函數創建一個基本控件就夠了。然后,應該創建幾個子類:Window、Button和Label等。

之后,就很容易在窗口中顯示元素。

保存游戲狀態

手機上的游戲可以隨時暫停,只要點擊Home按鈕或借助其他任何外部事件。這就是為什么我們要注意隨時保存游戲狀態,等游戲啟動后,可以進一步恢復這個狀態。

不妨使用System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings類來保存狀態(及設置)。這個類實現了IDictionary接口。我們不妨把所有游戲世界物體(但愿物體數量不多)的的當前狀態概括到這個詞典中,并調用IsolatedStorageSettings.ApplicationSettings.Save()函數。

退出游戲時,游戲會保存起來。為此,不妨覆蓋游戲類中的OnExiting函數:

  1. protected override void OnExiting(object sender, EventArgs args)  
  2.  
  3. {  
  4.  
  5. GameController.SaveState();  
  6.  
  7. base.OnExiting(sender, args);  
  8.  

游戲恢復以類似方式進行。應用程序啟動時,我們收到來自IsolatedStorageSettings.ApplicationSettings的數據,恢復所有游戲世界物體。

應用程序的激活和停用

我們的這個應用程序并不總是處于活動狀態。有時它可能被停用了(比如來電時),需要再次激活。

為了跟蹤這些事件,不妨覆蓋游戲類中的OnActivated函數和OnDeactivated函數。

在應用程序停用期間,我們讓游戲處于暫停模式,那樣用戶回來后,關于恢復游戲的對話消息會出現。

此外,為了不浪費處于停用狀態的手機的計算資源,我們在游戲類中Update函數的開頭添加下列代碼: 

  1. if (!IsActive)  
  2.  
  3. {  
  4.  
  5. SuppressDraw();  
  6.  
  7. return;  
  8.  

#p#啟動畫面

我們的游戲(確切地說,是游戲內容)在幾秒鐘內裝入,在這個裝入期間只顯示黑色屏幕。我們應該向用戶表明應用程序在運行中。為此,應該繪制一個漂亮的啟動畫面(splash screen),在游戲啟動時顯示:

splash screen

如果你只是往Silverlight應用程序里面添加針對Windows Phone的SplashScreenImage.jpg文件,啟動畫面會自動顯示。

不過這對XNA項目來說行不通。

我們得改動內容的裝入。首先,我們為啟動畫面做好紋理,然后在***次調用Draw函數的過程中繪制紋理。然后,我們裝入其余內容,啟動游戲。直到其余內容都裝入,啟動畫面才顯示。

現在,這個游戲看起來漂亮多了。

手機中的游戲位置

為了讓我們的游戲出現在手機中的Games部分(只要點擊手機開始屏幕上的XBOX LIVE按鈕,就能訪問它),需要編輯項目中的WMAppManifest.xml文件。應該在這個文件中,而不是在Genre="Apps.Normal"這一行中編寫Genre="Apps.Games"。

另外我們把游戲名稱和描述放入到同一個文件(分別是Title和Description屬性)。刪除不必要的需求(section)。在這個部分中,我們只留下方向感應器支持。這個版本的游戲不需要其他部分。

該項目應該有兩幅圖片:GameThumbnail.png和Background.png。

Games部分的游戲顯示區需要***幅圖片。手機的開始屏幕需要第二幅圖片。這兩幅圖片的大小都應該是173×173像素。

試用模式

由于我們開發的這個游戲將是收費游戲,需要添加試用模式支持。試用功能已經內置到平臺中,在Microsoft.Phone.Marketplace.LicenseInformation類的幫助下完成:

  1. var license = new Microsoft.Phone.Marketplace.LicenseInformation();  
  2.  
  3. return license.IsTrial(); 

由于該函數相當慢,我們不會在每次游戲周期迭代時調用它。相反,我們只會在應用程序激活時才調用它(在游戲類的OnActivated函數中,結果將作為變量來保存)。

如果應用程序在試用模式下啟動,那么在試用幾分鐘后,就會出現提供游戲購買(或開始新游戲)的窗口。

點擊購買按鈕時,我們就會調用、在Windows Phone Marketplace中顯示應用程序:

  1. var market = new Microsoft.Phone.Tasks.MarketplaceDetailTask();  
  2.  
  3. market.Show(); 

購買后,用戶可以回到應用程序,繼續玩游戲。

后退按鈕

一切幾乎已準備好,我們要把應用程序發送到Windows Phone Marketplace。在發布之前,該應用程序經過微軟的認真測試;幾天后,微軟給出了結論:拒絕接受。原因出在哪里?

問題出在我們在Update函數中留下的代碼。

  1. protected override void Update(GameTime gameTime)  
  2.  
  3. {  
  4.  
  5. // Allows the game to exit(允許游戲退出)  
  6.  
  7. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)  
  8.  
  9. this.Exit();  
  10.  
  11. ...  
  12.  

后退(Back)這個硬件按鈕必須以某種方式來工作,也就是讓用戶回到前一個屏幕。如果用戶在應用程序的開始屏幕(主游戲菜單)上,可以使用該按鈕來退出應用程序。如果處在暫停模式下,該按鈕可以讓用戶回到游戲中。

在我們這個情況下,后退按鈕總是調用應用程序退出。不妨清除這個代碼,讓后退按鈕能夠正確工作,再次發送給微軟進行審查。重復審查所用時間比較少。#p#

結果

是的,這個應用程序得到了接受!現在,該游戲出現在Windows Phone Marketplace中了。

我們在游戲開發上總共花了兩周時間(發布到Marketplace又花了兩周時間)。***,我們擁有了一個漂亮而誘人的游戲:

游戲

***WP7游戲網站的編輯人員評論了這款游戲

提交一周后,這個游戲就躋身于Windows Phone Marketplace***的100款收費游戲中。

我們從這次游戲開發中能夠得到什么樣的結論?答案是:為Windows Phone 7開發游戲其實簡單得很!

51CTO觀點

諾基亞日前與微軟正式簽訂Windows Phone 7合作協議,并放棄Symbian系統的研發業務,這足以表明Windows Phone操作系統將成為諾基亞主要的智能手機平臺。諾基亞與微軟的強強聯手將會給開發者帶來良好的開發環境,學習Windows Phone平臺對開發者來說會是個不錯的選擇。

原文出處

【51CTO.com獨家特稿,非經授權謝絕轉載,合作媒體轉載請注明原文作者及出處!】

【編輯推薦】

  1. 微軟發布WP軟件包 吸引iOS開發人員
  2. 如何在Windows Phone 7 3D開發中使用紋理貼圖
  3. 使用IronRuby開發Windows Phone 7應用程序
  4. 獨立開發者分享手機游戲開發經驗
  5. SocialTimes:手機社交游戲開發秘籍

 

責任編輯:佚名 來源: 51CTO.com
相關推薦

2010-08-10 09:11:12

Windows PhoNXA

2011-01-13 14:29:54

2010-08-10 13:21:41

Windows PhoWindows Pho

2010-12-16 10:06:31

Windows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho

2010-08-06 15:44:28

Windows PhoWindows PhoSilverlight

2010-08-24 09:32:41

Windows PhoWindows Pho

2010-07-21 09:11:57

Windows PhoWindows PhoWindows Pho

2011-01-07 09:04:14

更新內容Windows Pho

2012-03-18 19:44:11

Windows Pho

2010-12-14 18:48:49

微軟

2011-06-07 11:35:38

Windows Pho

2012-08-16 10:35:50

Windows Pho

2012-06-25 14:45:50

2010-06-06 15:54:54

Windows Pho

2010-09-02 13:05:51

Windows PhoWindows Pho

2010-04-08 17:40:23

Windows Pho

2010-09-10 09:05:03

XNAWindows Pho

2010-08-13 08:21:11

Windows Pho

2010-03-09 10:51:15

Windows Pho
點贊
收藏

51CTO技術棧公眾號

丁香一区二区三区| 久久久久国产精品夜夜夜夜夜| 日本www在线观看视频| 丝袜美腿亚洲一区| 色偷偷综合社区| 狠狠爱免费视频| 黄色网页在线观看| 成人免费毛片app| 国产精品色视频| 久久精品美女视频| 精品国产精品国产偷麻豆| 91精品91久久久中77777| 一区二区三区av在线| 国产一区二区三区中文字幕| 五月婷婷综合激情| 久久品道一品道久久精品| 日本精品在线视频| 欧美性生给视频| 国产午夜精品一区在线观看 | 国产精品超碰97尤物18| 国产伦精品一区二区| 日韩黄色一级视频| 你懂的成人av| 中日韩美女免费视频网站在线观看| 久久久久亚洲av无码专区首jn| 伊人色综合一区二区三区影院视频| 国产精品久久久久久一区二区三区| 激情小说网站亚洲综合网| 国产又粗又猛又黄| 亚洲在线视频| 性欧美办公室18xxxxhd| 成年人一级黄色片| 中日韩免视频上线全都免费| 91精品国产高清一区二区三区蜜臀 | 91制片厂毛片| 欧美日韩国产v| 亚洲成人1区2区| 日本a级片在线观看| 国产裸舞福利在线视频合集| 床上的激情91.| 国产成人一区二区三区电影| 久久免费激情视频| 亚洲精品韩国| 欧美乱妇高清无乱码| 五月天精品视频| 99久久婷婷国产综合精品青牛牛 | 最新国产精品| 久久精品免费播放| 无码人妻精品中文字幕| 日本一区二区高清不卡| 有码中文亚洲精品| 久久只有这里有精品| 欧美三级午夜理伦三级小说| 亚洲精品不卡在线| 亚洲欧美日韩色| 美女国产精品久久久| 777奇米四色成人影色区| 黄色成人免费看| 国精产品一区一区三区mba下载| 亚洲乱码精品一二三四区日韩在线| 亚洲国产一区在线| 在线免费看黄网站| 亚洲欧美日韩国产中文在线| 亚洲啊啊啊啊啊| aa在线视频| 亚洲日本在线观看| 成人av在线不卡| 大桥未久在线播放| 午夜成人免费电影| www.超碰com| 老司机成人影院| 欧美日韩亚洲一区二区| 波多野结衣天堂| 九九热这里有精品| 日韩情涩欧美日韩视频| 亚洲免费一级视频| 日韩一级视频| 欧美二区乱c少妇| 熟女人妻一区二区三区免费看| 欧美精品三级在线| 精品国产不卡一区二区三区| 亚洲国产果冻传媒av在线观看| 视频一区在线观看| 久久久精品在线| 精品亚洲永久免费| 一区二区91| 国产精品99导航| 国产视频在线一区| 99久久伊人网影院| 亚洲精品8mav| 丰满大乳少妇在线观看网站| 亚洲午夜精品网| 激情五月婷婷久久| 日韩精品三区| 日韩欧美国产电影| 色婷婷在线影院| 亚洲精品小说| 日本成熟性欧美| 国产男男gay体育生白袜| 成人国产亚洲欧美成人综合网| 久久99精品久久久久久青青日本| 成年人视频在线观看免费| 亚洲欧美日本韩国| 免费日韩中文字幕| 欧美日本三级| 亚洲精品永久免费精品| 丰满少妇被猛烈进入一区二区| 免费亚洲一区| 亚洲影院污污.| 国产69久久| 无吗不卡中文字幕| 日韩精品在线播放视频| 欧美日韩国产免费观看视频| 欧美精品激情在线| 中文字幕av久久爽| 国产一区二区三区香蕉| 欧美一区二区三区四区在线观看地址 | 国产视频网站一区二区三区| 国产一区二区三区在线看| youjizz亚洲女人| 亚洲五月综合| 国产精品视频免费在线观看| 三级视频网站在线| 亚洲午夜久久久| 污污视频在线免费| 日韩电影不卡一区| 美女性感视频久久久| 奴色虐av一区二区三区| 免费观看日韩av| 久久青青草综合| 国产99re66在线视频| 精品区一区二区| 国产福利视频网站| 日韩成人dvd| 日本中文不卡| 欧美电影免费观看高清完整| 日韩精品日韩在线观看| 青青草av在线播放| 不卡的看片网站| 一区二区三区一级片| 日本免费成人| 国产亚洲欧美日韩美女| 国产污视频网站| 久久夜色精品一区| 国产精品wwwww| 国产伦精品一区二区三区视频| 欧美中文在线免费| 欧美孕妇孕交| 欧美色视频日本版| 黄色av网址在线观看| 亚洲一区二区免费看| 国产一区二区三区四区五区加勒比| 暧暧视频在线免费观看| 欧美精品一区二区久久久| 国产午夜视频在线播放| 成人av电影在线观看| 欧美在线一区视频| 亚洲精品小区久久久久久| 日本道色综合久久影院| 国产精品一二三区视频| 欧美日韩一二三区| 91 在线视频| 国产成人免费视频网站高清观看视频| 青青青在线观看视频| 美女午夜精品| 日本不卡免费高清视频| 在线免费看黄网站| 日韩精品中文字幕在线不卡尤物| 国产网友自拍视频| 91亚洲国产成人精品一区二三| 成熟丰满熟妇高潮xxxxx视频| 亚洲理论电影片| 国产成人欧美在线观看| 男人在线资源站| 欧美精品1区2区3区| 免费在线看黄网址| 菠萝蜜视频在线观看一区| 精品中文字幕av| 精品在线99| 91视频免费在线| 欧美aa在线| 中文国产成人精品| 亚洲精品无遮挡| 一本色道综合亚洲| 日韩成人短视频| www.欧美亚洲| 黄色一级免费大片| 国产一区二区三区91| 亚洲一区二区三区四区在线播放| 色多多在线观看| 久久色精品视频| 性感美女一级片| 在线观看亚洲a| 久久久久久激情| 国产日产精品1区| 天天久久综合网| 新狼窝色av性久久久久久| 欧美精品一区二区性色a+v| 天天躁日日躁狠狠躁欧美| 国产日韩av高清| 国产色婷婷在线| 中文字幕日韩欧美在线视频| 婷婷伊人综合中文字幕| 在线观看91av| 五月婷婷视频在线| 一级日本不卡的影视| 欧洲av一区二区三区| 国产成人精品亚洲日本在线桃色| 污片在线免费看| 免费在线播放第一区高清av| 日本在线视频www色| 凹凸成人精品亚洲精品密奴| 精品国产一区二区三| 日韩成人在线电影| 97视频色精品| 麻豆视频在线观看免费| 亚洲欧洲在线播放| 成 人 免费 黄 色| 欧美久久久久久久久久| 亚洲欧美自拍视频| 亚洲一区电影777| 天堂av免费在线| 国产精品亲子乱子伦xxxx裸| 影音先锋黄色资源| 国产精品自产自拍| 无尽裸体动漫2d在线观看| 久久最新视频| 欧美a v在线播放| 在线观看一区| 一区精品在线| 久久午夜影院| 国产一区二区黄色| 无人区在线高清完整免费版 一区二 | 国产区二精品视| 亚洲国产中文在线二区三区免| 国产中文欧美精品| h1515四虎成人| 欧美激情2020午夜免费观看| 四季久久免费一区二区三区四区| 久久久999国产| 日本中文字幕在线播放| 中文在线不卡视频| av在线播放av| 中文字幕综合在线| 国产高清免费在线播放| 永久免费毛片在线播放不卡| 无遮挡动作视频在线观看免费入口| 亚洲色图美腿丝袜| 欧美理论在线观看| 精品久久久久一区| 精品欧美在线观看| 精品国产乱码久久久久久免费 | 国产激情欧美| 国产精品福利网站| 97成人资源| 57pao国产精品一区| a国产在线视频| 国内精品美女av在线播放| 欧美激情护士| 国产精品www色诱视频| 欧美视频免费看| 69174成人网| 久久国产精品免费一区二区三区| 超碰在线观看97| 欧美午夜18电影| 欧美日韩在线精品一区二区三区| 任你弄精品视频免费观看| 精品日韩美女| 亚州国产精品| 亚洲免费久久| 亚洲一区二区三区无吗| 精品日韩在线播放| 国产欧美精品| 亚洲综合欧美激情| 麻豆极品一区二区三区| 国产一区二区三区蝌蚪| 亚洲三级视频网站| 久久精品久久精品| 亚洲成年人av| 久久精品水蜜桃av综合天堂| 成人无码精品1区2区3区免费看 | 精品999在线播放| 无码国产精品96久久久久| 中文字幕欧美日韩在线| 精品自拍一区| 97精品一区二区视频在线观看| 亚洲成人一区在线观看| 亚洲最大的av网站| 亚洲人成亚洲精品| 天堂v在线视频| 国产婷婷精品| 涩多多在线观看| 不卡区在线中文字幕| 精品一区二区在线观看视频| 一级特黄大欧美久久久| 中文字幕天堂在线| 精品第一国产综合精品aⅴ| 99精品老司机免费视频| 欧美国产视频一区二区| 日本黄色一区| 久久精品国产精品青草色艺| 中出一区二区| 亚洲中文字幕无码专区| 狠狠色丁香久久婷婷综| 国产精品入口麻豆| 亚洲女人的天堂| 69国产精品视频免费观看| 欧美不卡在线视频| 欧美一区二不卡视频| 久久精品国产亚洲| 二区三区不卡| 国产视频一区二区三区四区| 国产精品久久久久久| 国产一区二区视频免费在线观看| 久久电影国产免费久久电影 | 精品国产va久久久久久久| 亚洲午夜未满十八勿入免费观看全集| 欧美极品另类| 国产精品久久久久久久久久ktv| 性欧美lx╳lx╳| 黄网站欧美内射| 成人免费av在线| 国产精品成人免费观看| 欧美狂野另类xxxxoooo| 青青久草在线| 久久精品视频99| 亚洲二区av| 一区二区免费在线视频| 丝袜美腿亚洲色图| 成人免费无遮挡无码黄漫视频| 精品久久久国产精品999| 日本黄色一区二区三区| 九九久久久久久久久激情| 国外成人福利视频| 婷婷久久伊人| 免费在线观看成人| 99久久99久久精品免费看小说.| 色就色 综合激情| 韩国中文字幕hd久久精品| 欧美黑人性视频| 国产精品45p| 老汉色影院首页| 国产激情91久久精品导航 | 免费av在线播放| 91久久久精品| 欧美日韩午夜| 无码人妻精品一区二区三| 亚洲国产精品综合小说图片区| 怡红院男人天堂| 一区二区三区久久精品| 手机av在线| 久久亚洲国产精品日日av夜夜| 国产亚洲高清视频| 三上悠亚影音先锋| 丰满岳妇乱一区二区三区| 可以免费看污视频的网站在线| 日本一区二区不卡| 精品欧美激情在线观看| 国产精品天天av精麻传媒| 91免费精品国自产拍在线不卡| 亚洲图片在线视频| 最近2019中文字幕在线高清| 亚洲成人精品综合在线| 成人在线视频一区二区三区| 91在线一区二区三区| 欧美日韩a v| 久久成人国产精品| 农村少妇一区二区三区四区五区| 无码专区aaaaaa免费视频| 国产亚洲精品中文字幕| 在线观看免费国产视频| 国产一区二区久久精品| 中文字幕日本一区| 99在线免费视频观看| 久久综合狠狠综合| 在线免费观看一区二区| 欧美激情性做爰免费视频| 国产乱论精品| 草草久久久无码国产专区| 欧美高清在线精品一区| 精品黑人一区二区三区在线观看 | 久久久www成人免费毛片| 日韩电视剧免费观看网站| 91p九色成人| 亚洲一区二区精品在线| 成人高清视频免费观看| 99热在线观看免费精品| 久久精品国产欧美激情| 亚洲毛片免费看| 欧美国产在线一区| 亚洲福中文字幕伊人影院| av在线首页| 国产精品日韩专区| 99在线|亚洲一区二区| 国产又黄又粗又猛又爽的 | 91官网在线| 国产日韩欧美一区二区| 久久er精品视频| 二区视频在线观看| 欧美第一淫aaasss性|