XNA輸入輸出處理_第1頁(yè)
XNA輸入輸出處理_第2頁(yè)
XNA輸入輸出處理_第3頁(yè)
XNA輸入輸出處理_第4頁(yè)
XNA輸入輸出處理_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、XNA游戲開(kāi)發(fā)常用輸入及輸出處理本課要點(diǎn)nXNA用戶輸入處理nXNA碰撞檢測(cè)nXNA聲音輸出3輸入類型 XNA中的用戶輸入可以由多種設(shè)備組合而成:鍵盤、鼠標(biāo)、Xbox 360手柄、Xbox 360周邊設(shè)備和Windows Phone觸摸屏和加速器。注意鼠標(biāo)輸入在Xbox 360和Windows Phone上不可用。本節(jié)課將講解如何為游戲添加對(duì)鍵盤,鼠標(biāo)的支持。在之前的課程中,我們討論了輪詢和事件注冊(cè)。兩者之間的不同在處理輸入設(shè)備的時(shí)候最明顯。傳統(tǒng)的Windows程序員習(xí)慣于對(duì)事件進(jìn)行注冊(cè),比如某個(gè)鍵被按下或著鼠標(biāo)移動(dòng)。在這個(gè)編程模型中,應(yīng)用程序執(zhí)行一些功能,然后當(dāng)它空閑時(shí),消息泵將消息送入應(yīng)用

2、程序并且事件被處理。在游戲開(kāi)發(fā)中,沒(méi)有所謂的空閑時(shí)間,所以允許開(kāi)發(fā)者進(jìn)行事件注冊(cè)的開(kāi)銷過(guò)大。取而代之是由開(kāi)發(fā)者對(duì)輸入設(shè)備進(jìn)行輪詢以得知玩家是否對(duì)這些設(shè)備進(jìn)行了操作。4鍵盤輸入if(Keyboard.GetState( ).IsKeyDown(Keys.A) 鍵盤輸入是通過(guò)Microsoft.XNA.Framework.Input命名空間中的Keyboard類來(lái)處理的。Keyboard類有一個(gè)叫做GetState的靜態(tài)方法,用KeyboardState結(jié)構(gòu)的形式返回鍵盤目前的狀態(tài)。 5控制精靈自由移動(dòng)KeyboardState keyboardState = Keyboard.GetState(

3、 ); if (keyboardState.IsKeyDown(Keys.Left) playerPosition.X -= speed; if (keyboardState.IsKeyDown(Keys.Right) playerPosition.X += speed; if (keyboardState.IsKeyDown(Keys.Up) playerPosition.Y -= speed; if (keyboardState.IsKeyDown(Keys.Down) playerPosition.Y += speed;為什么不用If else提高效率?如何確保按一次空格發(fā)射一枚炮彈?6

4、默認(rèn)情況下當(dāng)鼠標(biāo)劃過(guò)XNA游戲窗口時(shí)鼠標(biāo)指針是隱藏的。如果您想在窗口中顯示鼠標(biāo),只要設(shè)置Game類的IsMouseVisible屬性為true就可以了。不管鼠標(biāo)光標(biāo)是否可見(jiàn),GetState調(diào)用返回的MouseState結(jié)構(gòu)體都表示鼠標(biāo)當(dāng)前的狀態(tài)。 MouseState結(jié)構(gòu)體中重要的屬性鼠標(biāo)輸入本課要點(diǎn)nXNA用戶輸入處理nXNA碰撞檢測(cè)nXNA聲音輸出8碰撞檢測(cè)實(shí)現(xiàn)碰撞檢測(cè)最簡(jiǎn)單和快速的方式是通過(guò)包圍盒算法。本質(zhì)上,當(dāng)用一個(gè)包圍盒算法時(shí),您需要在屏幕上的每個(gè)物體周圍“畫”一個(gè)盒子,然后檢查這些盒子是否相交。如果相交,就有碰撞。實(shí)際游戲通常使用一個(gè)比實(shí)際幀尺寸稍微小一點(diǎn)的矩形,這樣將得到更加精

5、確的碰撞檢測(cè):ringsRect.Intersects(skullRect);9使用多個(gè)包圍盒或者象素檢測(cè)將得到更加精確的碰撞檢測(cè)效果,但是性能會(huì)下降10像素檢測(cè),對(duì)屏幕坐標(biāo)上同一點(diǎn)的兩個(gè)對(duì)應(yīng)紋理中的亮度通道進(jìn)行比較,只有兩個(gè)都不透明時(shí)才發(fā)生碰撞,檢測(cè)精準(zhǔn)但是效率最差本課要點(diǎn)nXNA用戶輸入處理nXNA碰撞檢測(cè)nXNA聲音輸出12使用XACT“跨平臺(tái)音效制作工具”英文全稱Microsoft Cross Platform Audio Creation Tool,后文會(huì)使用它的英文縮寫簡(jiǎn)稱XACT13在代碼中使用XACT聲音文件要從XACT項(xiàng)目文件中讀取數(shù)據(jù)到對(duì)象中讓您可以在XNA中播放聲音,您需

6、要添加以下成員變量到Game1類的頂部:AudioEngine audioEngine; WaveBank waveBank; SoundBank soundBank; Cue trackCue; 第一個(gè)變量代表一個(gè)稱為聲音引擎(sound engine)。這個(gè)對(duì)象會(huì)用來(lái)創(chuàng)建WaveBank和SoundBank對(duì)象,并且是XNA聲音的核心對(duì)象。WaveBank和SoundBank對(duì)象相當(dāng)于XACT文件的波形庫(kù)和聲音庫(kù)部分。Cue對(duì)象用來(lái)從聲音庫(kù)中取出獨(dú)立的cue來(lái)播放。14在代碼中使用XACT聲音文件一旦您添加了這些變量,就需要初始化它們。添加以下代碼到Game1的LoadContent方法中

7、:audioEngine = new AudioEngine(ContentAudioGameAudio.xgs); waveBank = new WaveBank(audioEngine, ContentAudioWave Bank.xwb); soundBank = new SoundBank(audioEngine, ContentAudioSound Bank.xsb);內(nèi)容管道為每個(gè).xap文件(XACT項(xiàng)目文件)產(chǎn)生了一個(gè).xgs文件。為項(xiàng)目文件中的每個(gè)聲音庫(kù)產(chǎn)生一個(gè).xsb文件,為每個(gè)波形庫(kù)產(chǎn)生一個(gè).xwb文件。這些文件通過(guò)代碼加載到各自對(duì)應(yīng)的對(duì)象中。注意聲音庫(kù)和波形庫(kù)對(duì)象同樣需

8、要聲音引擎對(duì)象傳入到它們的構(gòu)造方法中。最后,注意傳入構(gòu)造方法的參數(shù)是實(shí)際的路徑和文件名,而不是XNA中大多數(shù)資源用到的資源名。 trackCue = soundBank.GetCue(start);trackCue.Play();15在代碼中使用XACT聲音文件您需要做的最后一個(gè)修改,是每幀調(diào)用AudioEngine對(duì)象的Update方法,讓AudioEngine對(duì)象能夠與游戲保持同步。您可以在Game1類的Update方法中進(jìn)行這項(xiàng)工作。如果忘記調(diào)用AudioEngine.Update,將會(huì)導(dǎo)致聲音變得不同步而產(chǎn)生問(wèn)題。添加以下代碼到Game1類的Update方法中,位于base.Updat

9、e的調(diào)用之前: audioEngine.Update(); 16簡(jiǎn)易聲音播放當(dāng)使用HiDef設(shè)置為Xbox 360和PC平臺(tái)開(kāi)發(fā)游戲時(shí),利用XACT提供的好處是明智的選擇。不過(guò),“Reach”模式的游戲設(shè)置不支持XACT,所以XNA 4.0框架提供了一組簡(jiǎn)化的音頻API,讓開(kāi)發(fā)者可以在使用“Reach”的游戲設(shè)置時(shí)播放聲音。您同樣也可以在“HiDef”模式中使用簡(jiǎn)化API,如果您不需要XACT提供的額外特性的話。XNA 4.0音頻API支持.wav,.wma和.mp3類型的文件17簡(jiǎn)易聲音播放如果希望對(duì)音效有更多的控制權(quán),諸如在結(jié)束之前循環(huán)、停止聲音播放的能力,您需要調(diào)用SoundEffectInstance對(duì)象。它被SoundEffect類所調(diào)用的一個(gè)叫CreateInstance的對(duì)象捕獲了。通過(guò)SoundEffectInstance,您可以循環(huán)播放聲音、調(diào)節(jié)音量、停止和恢復(fù)聲音播放甚至更多。 Sou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論