




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章基于VisualC++2010開發(fā)windowsphone7應(yīng)用WindowsPhone7是Microsoft的新一代資能電話平臺,它允許用戶安裝并使用一些高級應(yīng)用程序,并賦予開發(fā)人員創(chuàng)建此類應(yīng)用程序的能力。WindowsPhone7應(yīng)用程序采用我們熟悉的工具來開發(fā),比如VisualStudio2010,Silverlight和XNA?因此,開發(fā)人員利用現(xiàn)有技能即可創(chuàng)建功能豐富的智能電話應(yīng)用程序。作為一個安全的平臺,WindowsPhone7應(yīng)用程序可以利用通過云提供的很多服務(wù)和資源。配置開發(fā)Windowsphone7的開發(fā)調(diào)試平臺WindowsPhone7開發(fā)環(huán)境的搭建,我們需要到微軟的網(wǎng)站下載WindowsPhoneDcvclopci?工具集。(/downloads/dctails.aspx?FamilylD=2338b5dl-79d8-46af-b828-380b0f854203&displaylang=en)這個版本包含了四個軟件,All-in-one,不需要一個個下載。VisualStudio2010ExpressfbrWindowsPhoneCTPWindowsPhoneEmulatorCTPSilverlightfbrWindowsPhoneCTPXNA4.0GameStudioCTP需要注意的是這軟件需要安裝在Vista或者Windows7下面,不再支持WindowsXPc搭建wp7時,需要VistaorWindows7系統(tǒng),打開VS2010后,存在一些變化,一方面WindowsPhone提供了兩種不同的開發(fā)平臺:SilverlightforWindowsPhone和XNA4.0,但從另一方面而言,以前WindowsMobile的C++和.NETCompactFramework都用不上了。所以,以前的WindowsMobile程序員也要經(jīng)歷一個痛苫的轉(zhuǎn)型過程。搭建Windowsphone7的開發(fā)平臺.安裝VS2010正式版:(這部分可以省略).卜載并安裝新版的WindowsPhone開發(fā)工具WPDTCTP裝好后開始菜單中多了“MicrosoftVisualStudio2010ExpressfbrWindowsPhone”建議用正式版的VS2010。.打開VS2010正式版File->New->Project…如下
圖5.1圖5.1出?*?JciienUbrwy(44^■Swrcii!■—fcdT—Q]18 "Z"?w。圖5.2按照如上VisualC++下多了SilverlightforWindows和XNAGameStudio4.0,這就說明安裝成功了。1.新建一個測試工程:a)新建一個Application,將其命名為HclloWrold;b)vsualC++->SilverlightfbrWindows->WindowsPhoneApplication;c)添加一個TextBlock修改Text屬性為uHelloWorldWindowsPhone7W;d)按F5快捷鍵運行:VS2010彈出一個Windowsphone模擬器。pagetitle圖535.1.2編寫第一個WindowsPhone7程序1.啟動VisualStudio2010ExpressfbrWindowsPhone圖5.4.打開歡迎頁面,這里有一些鏈接可以下載WindowsPhone7相關(guān)的文檔和視頻。555.
圖.新建一個WindowPhoneApplication項R?叫做HclloWorldWindowsPhonco.(iJSMainPage.xmalfKlTextBlocktextBlockPageTitle和textBlockListTitleCodeSnippet.<!—TitleGridisthenameoftheapplicationandpagetitle—>.<Gridx:Name=NTitleGrid,'Grid.Row=M0M>.<TextBlockText=MHelloworldapplication"x:Name="textBlockPageTitle"Style=M{StaticResourcePhoncTextPageTitle1Style}'7>.<TextBlock Text-,SayHelloWorldH x:Name="textBlockListTitle" Style=H{StaticResourcePhoncTextPageTitle2Style}M/>.</Grid>.增加一個按鈕CodeSnippet.<!-ContentGridisempty.Placenewcontenthere—>.<Gridx:Name=,,ContentGrid"Grid.Row=Ml">.<ButtonContent=MSayHi"Height=,,70MHorizontalAlignment=,'LeftHMarginal44,65,0,0"Name="buttonr,VcrticalAlignmem="Top”Width=M160"Click="buttonl_Click”/>.</Grid>.增加按鈕處理事件CodeSnippet.privatevoidbuttonl_Click(objectsender,RoutedEventArgse).{.textBlockListTitle.Text="SayHi!M;4」一個demo程序就完成了。.點擊F5啟動Emulator進(jìn)行調(diào)試WindowsPhoneEmulator-c圖5.7
進(jìn)入我們編寫的程序:圖5.8點擊按鈕WindowsPhone7的開發(fā)環(huán)境部署非常的簡單,開始WindowsPhone7的旅途吧!SilverlightforWindowsPhoneSilvcrlightforWindowsPhone雖然相對發(fā)行較晚,但所有WindowsPhone上的應(yīng)用必須用Silverlight來寫。Silverlight最大的優(yōu)勢在于與ExpressionBlend的無縫整合,可以快速設(shè)計出非常漂亮的用戶界面,將程序員從繁瑣的UI開發(fā)中解放出來。而且SilvcrlightforWindowsPhone不再是Silverlight的子集,而是支持Silverlight的全部功能。這樣的好處是,已有的Silverlight程序很容易移植至ljWindowsPhone手機(jī)上。在程序菜單的XNAGameStudio4.0下打開VS2010,創(chuàng)建一個新工程,在VisualCH■下找到三個模板,選擇"WindowsPhoneApplicationM。| >74 同h| >74 同h二工pagetitle圖5.10點擊OK后,會直接進(jìn)入IDE的主界面:圖5.11左邊是工具欄,可以拖拽控件到UI設(shè)計器上,與XAML界面對應(yīng)。此時拖拽了一個Button和一個TextBox上去。雙擊Button,進(jìn)入了代碼編輯器。namespaceWindowsPhoneApplication1(publicpartialclassMainPagc:PhoncApplicationPage(publicMainPage()(InitiaIizeComponcnt();SupportcdOricntations=SupportedPageOricntation.Portrait|SupportedPageOrientation.Landscape;}privatevoidbuttonI_Click(objectsender,RoutedEventArgse){MessageBox.Show("Hello,WindowsPhone/*+textBoxl.Text);編輯完成后,直接按F5,WindowsPhoneEmulator會被啟動。程序運行起來就是下面這個樣子。McssagcBox彈Hl來后,會有一個大大的Error標(biāo)題,看起來McssagcBox在WindowsPhone里主要是用來顯示錯誤的。另外就是輸入法,帶有明顯iPhone的痕跡,不過對電容屏的支持看來不是問題了。pagetitleXNA4.0在移動開發(fā)界,XNA還不是一個響亮的名字,但是在游戲開發(fā)界,Xbox360上的XNA則是泰山北斗級的開發(fā)技術(shù)。XNA不僅僅是一個.NET的游戲開發(fā)平臺,還包括了很多支持XboxLive服務(wù)的功能,比如,Avatars技術(shù)支持在游戲中顯示用戶設(shè)計的形象。希望這項技術(shù)能夠和同名電影一樣,改變移動游戲開發(fā)的歷史。WindowsPhone支持的是XNA4.0,與ZuncHD上的XNA3.1有啥區(qū)別?支持3D游戲!目前我們看到的這個XNA4.0預(yù)覽版只支持WindowsPhone開發(fā),不支持Windows和Xbox360的游戲開發(fā)。SilverlightforWindowsPhone是典型的事件驅(qū)動型應(yīng)用程序。而XNA是由時間驅(qū)動的應(yīng)用程序,這也是游戲開發(fā)技術(shù)的典型特點。每隔固定時間,系統(tǒng)會觸發(fā)Update事件,使程序得以更新。不那么多廢話了,創(chuàng)建個XNA4.0的新工程吧!圖5.13選擇WindowsPhoneGame就好了。IDE環(huán)境下沒有界面編輯器,需要程序員通過代碼來實現(xiàn)ULXNA程序的結(jié)構(gòu)非常簡單,程序員只需要實現(xiàn)兒個簡單的方法,就可以實現(xiàn)一個簡單的XNA程序了。這些方法包括Initialize初始化方法、LoadContcnt加載文件、Update更新內(nèi)容和Draw繪制等方法。下面是示例代碼片段:protectedoverridevoidLoadContent()//CreateanewSpriteBatch,whichcanbeusedtodrawtextures.spritcBatch=newSpritcBatch(GraphicsDevice);texture1=Content.Load<Texture2D>('*winphonc");texture2=Content.Load<Texture2D>(Hwinphonc");soundEffect=Content.Load<SoimdEfIect>(nWindowsDing");spritePositionl.X=0;spritePosition1.Y=0;spritcPosition2.X=graphics.GraphicsDevice.Viewport.Width-texture1.Width;spritePosition2.Y=graphics.GraphicsDevice.Viewport.Height-texture!.Height;sprite1Height=textureLBounds.Height;sprite1Width=texture1.Bounds.Width;sprite2Height=texture2.Bounds.Height;sprite2Width=texture2.Bounds.Width;JLoadContent方法中使用Content.Load方法來加載資源文件,這些文件也是作為資源被加載到XNA程序中的。protectedoverridevoidUpdate(GameTimegameTime){//Allowsthegametoexitif(GamcPad.GetStatc(Playerindex.One).Buttons.BackButtonStatc.Prcssed)this.Exit();//Movethespritearound.UpdateSprite(gameTime,refspritePosition1,refspriteSpeedI);UpdateSprile(gameTime,refspritePosition2,refspriteSpeed2);CheckForCollision();base.Update(gameTime);1Update方法負(fù)責(zé)更新元素的位置,進(jìn)行碰撞檢測。如果后退鍵被按"則退出程序。protectedoverridevoidDraw(GameTimegameTime){GraphicsDevice.Clear(Color.ComflowerBlue);//TODO:Addyourdrawingcodehere//Drawthesprite.spriteBatch.Begin(SpriteSortMode.BackToFront,BlendStatc.AlphaBlend);spritcBatch.Draw(texture1,spritePosition1,Color.White);spritcBatch.End();spritcBatch.Begin(SpritcSortModc.BackToFront,BlendStatc.Opaque);spritcBatch.Draw(texture2,spritcPosition2,Color.AliccBlue);spriteBatch.End();base.Draw(gameTime);}Draw方法對更新后的元素進(jìn)行繪制。我們的第一個XNA程序會顯示兩張圖片,這兩張圖片會在屏幕中運行,運行到邊緣時,會反彈問來。圖調(diào)試技巧我們來談?wù)務(wù){(diào)試,以及一些可供我們用來優(yōu)化應(yīng)用程序的工具。?Application.Currcnt.Host.Scttings如果打開你的App.xaml文件,會看到有這樣的語句://Showgraphicsprofilinginformationwhiledebugging,if(System.Diagnostics.Debugger.IsAttached)(//Displaythecurrentframeratecounters.Application.Current.Host.Settings.EnableFrameRateCounter=true;//Showtheareasoftheappthatarcbeingredrawnineachframe.Application.Currcnt.Host.Settings.EnableRedrawRegions=true;//Enablenon-productionanalysisvisualizationmode,//whichshowsareasofapagethatarebeingGPUacceleratedwithacoloredoverlay.Application.Current.Host.Settings.EnableCacheVisualization=true;}這段代碼打開了一些工具,當(dāng)你調(diào)試時它們可以提供大量的程序中正在發(fā)生的信息。EnablcFramcRatcCountcr這是唯一一個默認(rèn)被打開的工具,它允許你在程序運行時監(jiān)視應(yīng)用程序的幀速率。你會注意到所有這些工具都被包含在一個if語句中(Debugger.IsAttached),這是因為你并不會在最終的產(chǎn)品程序中使用它們。這些工具是專用于調(diào)試的。檢驗調(diào)試器還是解鎖菜單,測試你的試用版程序這類事情的好方法。當(dāng)你調(diào)試時可以打開某些東西,而在其他狀態(tài)下不用去管它們.電影業(yè)的標(biāo)準(zhǔn)是每秒24幀,你可能不需要這么多,除非是在你的程序中有復(fù)雜的動畫或移動。在W汰ipedia上有-一篇關(guān)于"視覺暫留"(PersistenceofVision,指當(dāng)人眼所看到的影像消失后,人眼仍能繼續(xù)保留其影像0.1-0.5秒左右的圖像的現(xiàn)象)的非常優(yōu)秀的文章。
圖5.15EnableRedrawRegions打開這個調(diào)試設(shè)置來看看在你的應(yīng)用程序中矩形會在哪兒被重繪。當(dāng)打開后你可以看到被重繪的內(nèi)容因為重繪區(qū)域是蘭色的。在獲得較低幀速率時這一點變得非常重要,你可能不知道為什么。這是因為應(yīng)用程序?qū)⑵聊恢械囊徊糠诌M(jìn)行了重繪,即使它很不明顯。sd-1」①sd-1」①66nq①p圖5.16EnablcCachcVisualization另一種重疊色,EnablcCachcVisualization向你展示頁面中哪些區(qū)域使用了GPU加速功能。你口J能會期待視頻和動畫能充分利用它,但我想你會在GPU處理圖像的頻率上感到驚訝。-B-B」①66nq①p圖5.17基于VisualC++2010開發(fā)windowsphone7的計算器搭建好WindowsPhone7的環(huán)境后,我們首先來看一個個簡單的計算器的開發(fā)。首先打開:MicrosoftVisualStudio2010ExpressfbrWindowsPhoneFile->NewProject->VisualC#->SilverlightforWindowsPhone->,然后給solution叫個名字這里我是叫WphoneDemo,新建后打開MainPage.xmal的文件,在布局方面為了使界面簡潔所以我把TitleGrid刪除,把ContentGrid上下左右居中,然后在里面添加相應(yīng)的按鈕,就拖卜.控件就OK了。需要注意的是要把文本框設(shè)置成只讀這樣可以避免輸入數(shù)字以外的字符。接卜來簡單說明卜MainPage.xmal.cs中的邏輯代碼。首先定義一個操作符的枚舉:privateenumOperateNoPlus,Minus,Multiplied,Divide,Mod然后是保持操作符的變量:privateOpcratcNocalcOpcrat;以及兩個操作值的變量:privateintfristValuc=0;privateintsecondValue=0;數(shù)字按鈕的代碼:privatevoidbtnO_Click(objcctsender,RoutedEventArgsc)(if(this.isZero(this.txtResult))(this.txtResult.Text=w0";)else(this.txtResult.Text+="0”;}!其他鍵類似。操作符按鈕代碼:privatevoidbtnPlus_CIick(objectsender,RoutedEventArgse){if(!string.IsNullOrEmpty(this.txtResult.Text.Trim()))(this.fristValue=int.Parse(this.txtResult.Text.Trim());this.txtResult.Text=}this.caleOperat=OpcrateNo.Plus;)等號代碼:privatevoidbtnResult_Click(objectsender,RoutedEventArgse)(if(!string.IsNullOrEmpty(this.txtResult.Text.Trim()))(this.secondValue=intParse(this.txtResult.Text.Trim());switch(this.caleOperat)(caseOperateNo.Plus:this.txtResult.Text=(this.fristValue+this.secondValue).ToString();this.fristValue=int.Parse(this.txtResult.Text.Trim());break;caseOpcratcNo.Minus:this.txtResult.Text=(this.fristValue-this.secondValue).ToString();this.fristValue=int.Parse(this.txtResult.Text.Trim());break;caseOperateNo.Multiplied:this.txtResult.Text=(this.fristValue*this.secondValue).ToString();this.fristValue=int.Parse(this.txtResult.Text.Trim());break;caseOperateNo.Divide:if(0!=this.secondValue)this.txtRcsult.Text=(this.fristValue/this.secondValuc).ToString();this.fristValue=int.Parse(this.txtResult.Text.Trim());break;caseOperateNo.Mod:if(0!=this.secondValue)this.txtRcsult.Text=(this.fristValue%this.secondValue).ToString();this.fristValue=int.Parse(this.txtResult.Text.Trim());break;default:break;)運行后的效果如圖所示:圖5.18基于VisualC++2010開發(fā)windowsphone7小游戲GameStudio游戲基礎(chǔ)這個游戲內(nèi)置了多層關(guān)卡。每個關(guān)卡通過情節(jié),游戲角色,環(huán)境等關(guān)聯(lián)起來。這個簡單的案例中,每個關(guān)卡可以看成一個獨立的完整游戲。一個關(guān)卡通常包含3個種狀態(tài):Loading-在此狀態(tài)下,系統(tǒng)加載資源,設(shè)置和關(guān)卡相關(guān)的變量,計算游戲世界(游戲世界是所有游戲過程發(fā)生的地方),并執(zhí)行在游戲?qū)嶋H開始之前必須執(zhí)行的任何其他任務(wù)。Update-在此狀態(tài)下,系統(tǒng)需要更新游戲世界狀態(tài)。通常,這意味著計算(玩家(們)和敵人)的新位置,更新血量、彈藥和其他狀態(tài),重新計算分?jǐn)?shù)和其他游戲邏輯。這種狀態(tài)出現(xiàn)在整個游戲引擎處于活動狀態(tài)的時間。Draw-在此狀態(tài)卜.,系統(tǒng)將繪制計算的輸出的圖形設(shè)備更新狀態(tài)的更改。這種狀態(tài)出現(xiàn)在整個游戲引擎處于活動狀態(tài)的時間。在XNAFramework中,后面兩個狀態(tài),對于PCo或者Xbox360的頻率可以達(dá)到為每秒60次,而在對于Zune,ZuneHD或者WindowsPhone7可以多達(dá)30秒每次WindowsPhone7XNA游戲開發(fā)實例整個步驟分五個部分,教大家完成一個有XNA編寫的winphone手機(jī)游戲。XNAGameStudio游戲基石出XNAFramework資源XNAGameStudio游戲循環(huán)
XNAGameStudio游戲輸入游戲邏輯大家按照教程的五個部分完成就可以做出一個像下圖展示的winphone游戲了。圖5.19異形游戲在winphone上運行的效果XNAGameStudio游戲基礎(chǔ)在這個環(huán)節(jié),你將利用XNAGameStudio創(chuàng)建自己的第一個WindowsPhone游戲。這個游戲51然很簡單,但是我們會不斷地添加新的功能來完善它。Note:雖然我這里用的是MicrosoftVisualStudio2010ExpressforWindowsPhone,但是同樣適用于安裝了WindowsPhoneDeveloperTools的MicrosoftVisualStudio2010。.打開Micros。仕VisualStudio2010ExpressfbrWindowsPhone?從Start|AllPrograms|MicrosoftVisualStudio2010Express|MicrosoftVisualStudio2010ExpressforWindowsPhone.VisualStudio2010:開打VisualStudio2010從Start|AllPrograms|MicrosoftVisualStudio2010..IntheFilemenu,chooseNewProject.在File菜單,選擇NewProject.在File菜單,點擊new,然后選擇Projecet.在NewProject對話框,選擇XNAGameStudiogameWindowsPhone分類中,選擇WindowsPhoneGame(4.0);然后設(shè)置name為AlicnGamc設(shè)置solutionname為Begino圖5.20在MicrosoftVisualStudio2010ExpressfbrWindowsPhone中,創(chuàng)建一個新的WindowsPhone游戲應(yīng)川程序項目.在資源解決方案管理器中,查看由WindowsPhone應(yīng)用程序模板生成的解決方案的結(jié)構(gòu)。任何VisualStudio解決方案都是是相關(guān)項目的一個容器;在這種情況下,它包含一個名為AlienGame的XNAGameStudiogamefbrWindowsPhone項El和一個名為AlienGameContent的相關(guān)游戲資源項目。SolutionExplorer ▼C3XQ3SoliMion'Be9m(2projects)//AfienGame?MPropertiesD4Refevences.ContentReferencesWB^ckyrouncLpng■Game.icogG?mel.csdG?mcThumbn?ii.png④Pr09ram.csj《AlienGameContent(Content)
7References圖5.21在解決方案資源管理器中展示AlienGame應(yīng)用Note:解決方窠資源管理器允許您查看項,并執(zhí)行一個解決方案或項目中的項管理任務(wù)。顯示解決方案資源管理器,按CTRL+W、或者在視圖菜單中選擇?OtherWindows|SolutionExplorer。.生成的項目包括一個默認(rèn)的游戲?qū)崿F(xiàn),這個實現(xiàn)包含基本XNAGameStudio游戲循環(huán)。它位于在Game1.cs文件中。.打開Gamel.cs文件。我建議將其默認(rèn)名稱修改成為可以反映你想法的游戲名稱。.在這里我們將游戲的主類(默認(rèn)命名為Gamel)重命名為AlienGame,?將其重命名,右鍵單擊類名稱,選擇Refactor|RspaceAlienGame(1 ///<suamary>///Thisisthemaintypeforyourgame///</sumary>publicclass , M?CIV ?〃Remme- f2Graph-icOrgwwtlhmji ,“ExtractMethods CtrkRM圖5.22重命名主游戲類.在重命名對話框中,在Newname字段中輸入AlienGame,然后點擊確定。圖5.23給主游戲類命名.檢查由VisualStudio提供的更改建議,并點擊Apply.
圖5.24對主游戲類實施變更.我們將文件名進(jìn)行修改來匹配新的類名。在解決方案資源管理器中右鍵點擊Gamel.cs并選擇Rename。給這個類?個新名字AlienGame.cs。圖5.25將主游戲類文件重命名.GameThumbnail.png包含應(yīng)用程序在手機(jī)設(shè)備快速啟動屏幕上顯示的圖標(biāo)。你可以在解決方案資源管理器中雙擊他,就是利用你的機(jī)器中的圖片修改軟件來修改這個圖片,如繪圖板。Note:在VisualStudio2010中,在解決方案資源管理器中雙擊這個icon文件,會打開VisualStudio中內(nèi)置的面片修改器XNAGameStudiogame開發(fā)的WindowsPhone應(yīng)用程序通常利用由基礎(chǔ)平臺或其他庫提供的服務(wù)。若要使用此功能,應(yīng)用程序需要引用相應(yīng)的程序集,實現(xiàn)這些服務(wù)。.要顯示由項目引用的程序集,展開在解決方案資源管理器中的References節(jié)點,并檢查列表。我們會發(fā)現(xiàn)他包含XNAFramework程序集和?WindowsPhoneplatform的特殊程序集。圖5.26項目引用的程序集目前,該應(yīng)用程序沒有更多的內(nèi)容,但它已準(zhǔn)備好做第一次測試運行。在這一步,我們準(zhǔn)備調(diào)試程序,并將該應(yīng)用程序?qū)⑵洳渴鸬絎indowsPhoneEmulator,然后執(zhí)行它,來了解一個典型的開發(fā)周期。.在Debug菜單,選擇Windows|Output來打開Output窗口。.在Debug菜單中選擇BuildSolution或者按下SHIFT+F6組合,在解決方案中編譯項目。VisualStudio2010:選擇Build菜單中的BuildSolution或者按下CTRL+SHIFT+B在解決方案中編譯項目。.觀察Output窗口并查看調(diào)試過程中產(chǎn)生的追蹤消息,包含一條追蹤的結(jié)果信息。TOC\o"1-5"\h\zOutput *OXShowoutputfratn:Budd / J,Buildstarted:Project:AlienGawe,Configuration:DebugWindowsPhone ?AlienGM*->C:\WP7TralningKit\Labs\Ga?eOevelop^ntwithXNA\Source\exi_AllenG??e\Begln\AllenG?ae\iBeginapplicationaanifestgenerationApplication??nifestgenerationcompletedsuccessfullyBeginX?ppackaging ICreatingfileAlienGane.xapAddingAlienGaM.dllAddingk*$AppM?ni<?st.xalAddingApf^anifest.x?alAddingG?m?Thuabnail.pngXappackagingcoapletedsuccessfully??????????Build:1succeededorup'tO'date,Gfailed,0skipped??????????E ?圖5.27在VisualStudio中調(diào)試應(yīng)用程序您應(yīng)該不會在現(xiàn)階段觀察任何錯誤,但如果項目包含編譯錯誤這些將在輸出窗口中顯示。若要對付這些類型的錯誤您可以利用錯誤列表窗口。此窗口顯示錯誤、警告,并可以進(jìn)行排序的列表中的編譯器產(chǎn)生的消息和篩選器基于錯誤的嚴(yán)重性。此外,您可以雙擊自動打開有關(guān)源代碼文件并定位到錯誤的來源列表中的項。.要打開ErrorList窗口,在view菜單中,點擊OtherWindows并選擇ErrorList。VisualStudio2010:打開ErrorList窗口,在view菜單中選擇ErrorListoError1stOlEnof|j0Wimm9$0MessagesDe$cnpbon We bneCdurnnProject*11I;opected lAhenGernea 146lAl^nGifne圖5.28ErrorList窗口顯示錯誤在調(diào)試過程中
.確認(rèn)部署目標(biāo)為WindowsPhoneEmulator。做法為,找到工具欄上StartDebugging按鈕旁的SelectDevice,確認(rèn)WindowsPhone7Emulator選項在SelectDevice下拉菜單中處于選中的狀態(tài)。CAhenGame-MicrosoftVisualStudio2010ExpressforWindowsPhoneFileEditViewProjectDebugTookWindowHelpJ3」,」dJA-J?0?u?I??|JDebug .:rjQA.q|.一CWindowsPhone7Emuli?_Fj?J-立口,HoAhenGame.esX! ,(Default)WindowsPhone7Emulator[弋AlienGame.AlenG?meWindow!Phone7Devke?|?AJenG?meEflusinRSystem;圖5.29選擇目標(biāo)設(shè)備來部署應(yīng)用Note:當(dāng)你通過VisualStudio部署你的應(yīng)用時,你可以選擇部署在真機(jī)或者仿真程序.按f5鍵在WindowsPhoneEmulator中啟動該應(yīng)用程序。請注意,一個設(shè)備仿真程序窗口將出現(xiàn),而且出現(xiàn)一個短暫的停頓,這時VisualStudio在設(shè)置仿真環(huán)境和部署圖像。一旦準(zhǔn)備好仿真程序顯示開始頁,此后不久您的應(yīng)用程序?qū)@示在仿真器窗口中。應(yīng)用程序?qū)@示一個簡單的藍(lán)色屏幕,沒有任何其他所示。對于一個早期階段中的應(yīng)用程序,這是正常現(xiàn)象。圖5.30在WindowsPhoneEmulator上運行應(yīng)用在您創(chuàng)建的用戶界面和程序的應(yīng)用程序邏輯之前,沒有什么可以在應(yīng)用上做的。.請按下SHIFT+F5或者和點擊工具欄上Stop按鈕,來切斷調(diào)試并且結(jié)束調(diào)試會話。這個時候要不關(guān)閉仿真程序窗口。七AlienGameJMenGame三usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingMicrosoft.Xna.Framework;圖5.31結(jié)束調(diào)試會話Note:在啟動調(diào)試會話時,它將要用?段來時間設(shè)置仿真環(huán)境和啟動應(yīng)用程序.為了簡化您的調(diào)試體驗,避免關(guān)閉仿真程序。這樣一旦運行仿真程序,只需要很少的時間停止當(dāng)前會話,編輯源代碼,然后構(gòu)建和部署新的圖片,為您的應(yīng)用程序啟動新的調(diào)試會話。5.3.2XNAFramework游戲資源這個環(huán)節(jié)我們將利用XNA將提供的大量的聲音、圖片和聲音各種資源管理起來,使游戲開發(fā)過程更加容易。在此任務(wù)中,您將添加這些資源到游戲中。同時還提供了大量的代碼文件,以處理在游戲中的菜單和屏幕變化的復(fù)雜性。您需要將游戲中添加這些文件。您現(xiàn)在正在構(gòu)建這個游戲。這個游戲?qū)⒊尸F(xiàn)一些圖形。在此任務(wù)中,您將添加一些資源,應(yīng)用程序和一些現(xiàn)有的游戲邏輯(ScreenManager)。Note:所有游戲資源請在下載壓縮包的assets目錄下找:Source\\Assets\\Code-所有C#文件Source\\Assets\\Media-所有的字體、圖片和聲音7.…無后廠疏一目二…"力.媒加二恒運%二…甫.而亍頁丁「松期工二…加…,我.位一值而Source\\Assets\\Media\\Images\\Icons文件夾下的兩個文件復(fù)制到AlienGame項目中,覆蓋原文件。Game.icoGameThumbnail.png.重新打開VisualStudio2010?并打開AlienGame項目。大多數(shù)游戲使用的藝術(shù)表現(xiàn)模式為模型、網(wǎng)格、子畫面、紋理、影響、地形、動畫等等形式。這種藝術(shù)資產(chǎn)可以在許多不同的方式創(chuàng)建和存儲在許多不同的文件格式里。他們在游戲開發(fā)過程中經(jīng)常更改。內(nèi)容管道被設(shè)計來幫助您輕松地和自動在游戲中管理這些藝術(shù)資產(chǎn)。美工可以生成一個汽車的模型,并導(dǎo)入到XNAGameStudio游戲項目中。而開發(fā)人員可以直接用過這個汽車模型的名字通過ContcntManagcr.Load調(diào)用。這個簡單的流程讓設(shè)計人員聚焦在創(chuàng)建資源,而開發(fā)人員聚焦在使用他們,大家再也不用擔(dān)心之間的關(guān)聯(lián)和轉(zhuǎn)化。XNA內(nèi)容管道是很容易集成到XNAGameStudio項目中。您只需將資源添加到您的項目和當(dāng)您編譯數(shù)據(jù)導(dǎo)入并轉(zhuǎn)換中使用內(nèi)容的導(dǎo)入程序的XNB(XNA二進(jìn)制文件)。為適當(dāng)?shù)钠脚_生成此XNB文件。內(nèi)容導(dǎo)入程序是作為程序集實現(xiàn)的。除了由XNAGameStudio提供的標(biāo)準(zhǔn),你還可以使用自定義和第三方開發(fā)的一些標(biāo)準(zhǔn)的內(nèi)容導(dǎo)入程序包括以下文件類型(部分列表):AutodeskFBXfonnat(.fbx)DirectXEffectfileformat(.fx)Fontdescriptionspecifiedina.spritefbntfileTexturefile.Thefollowingtypesaresupported:.bmp,.dds,.dib,.hdr,.jpg,.pfm,.png,.ppm,and.tgaGameaudiospecifiedintheMicrosoftCross-PlatfbrmAudioCreationTool(XACT)format(.xap).這里為大家準(zhǔn)備了一些多媒體文件,包括字體,聲音和圖像。我們將下列資源添加到AlienGameContent項目中:所有的字體在Source\\Assets\\Media\\Fonts</strong>文件夾中所有的圖片在Source\\Assets\\Media\\Images\\Content文件夾中所有的音效在Source\\Assets\\Media\\Sounds文件夾中.添加現(xiàn)有項目,右鍵點擊AlienGameContent工程名,并選擇Add|ExistingItems:
圖5.32向工程中添加現(xiàn)有項目.定位到文件位置,然后選擇文件。在某些情況下,您可能會看不到的所有文件。在這種情況卜需要更改文件選擇對話框中的篩選器,以顯示在目錄中的所有文件:圖5.33更改文件類型篩選器,以顯示該文件夾中的所有文件.所產(chǎn)生的AlienGameContent項目應(yīng)如下所示:?心ijjidl?心ijjidl/心JIKddl,”圖5.34添加了內(nèi)容以后的項目結(jié)構(gòu).添加一個新的項目文件夾-右鍵點擊AlienGame,選擇Add|NewFolder。圖5.35添加新項目文件夾.將文件夾命名成ScreenManager。這個文件夾將被用來存放提供的源文件。這些文件用以幫助管理創(chuàng)建游戲屏幕、菜單,和它們之間的更改的復(fù)雜內(nèi)容。Note:這段代碼實現(xiàn)創(chuàng)建XNAGameStudio菜單和屏幕的標(biāo)準(zhǔn)方法。.打開SourceWAssetsWCodeWScreenManager文件夾,添加所有現(xiàn)有ScreenManager文件。.將SourceWAssetsWCode文件夾中ParticleSystem.cs添加到AlienGame根目錄。.最終AlienGame項目結(jié)構(gòu)如下SolutionExplorer ▼QXaNSolutionAlienGame'(2projects)jAKenGime?&Properties“Referencesa/ContentReferences■。ScreenManager⑵G?meS<re?n.cslnputState.es<?MenuEntry.es<?Menukreen.es
S<reenM?n?ger.c$<?AlienG?me.c$白App.configGame.ico,j|GameThumbnail.png<0ParticleSystem.es<?Program.esNAlienGameContent(Content)圖5.36最終AlienGame項目結(jié)構(gòu).添加一個新類到AlienGame項目,命名為Backgroundscreen:」?!?*??-SowsPhone.」?!?*??-SowsPhone.
/se.e);由(圖5.37給項目中添加?個新類.打開新的類,并添加以下使用申明:(代碼段-XNA游戲-Backgroundscreen使用申明)usingAlienGameSample;usingMicrosoft.Xna.Framework.Graphics;usingMicrosoft.Xna.Framework;.從GameScreen類中派生的新類,(GameScreen類添加到ScreenManager文件夾中):classBackgroundScrecn:GameScreen(}.添加下面的類變量,以后用于加載資源:(代碼段-XNA游戲-BackgroundScrecn-屏幕背景類變量)Texture2Dtitle;Texture2Dbackground;.定義類的構(gòu)造函數(shù),如下所示:(代碼段-XNA游戲-BackgroundScrecn構(gòu)造函數(shù))publicBackgroundScreen()(TransitionOnTime=TimcSpan.FromSeconds(O.O);TransitionOfTTime=TimeSpan.FromSeconds(0.5);}.GameScreen類定義了一些核心的游戲功能,根據(jù)之前所描述的:LoadContcnt,更新,及繪圖。重寫了基類LoadContent功能(代碼段-XNA游戲-BackgroundScreenLoadContent方法)publicoverridevoidLoadContent()(title=ScreenManager.Game.Content.Load(HtitleM);background=ScreenManager.Game.Content.Load(,,backgroundw);此代碼段從游戲資源中通過名稱來加載內(nèi)容。.創(chuàng)建一個LoadingScreen〈/strong>類,這個類,在游戲資源加載的時候,將屏幕展示出來。Note:創(chuàng)建一個新類,在在解決方案資源管理器中,右鍵單擊AlienGame項目,然后選擇Add|Classo.添加以下使用申明(usingstatements)到LoadingScrccn類:(代碼段-XNA游戲開發(fā)-LoadingScreen使用申明)usingAlienGameSampIe;usingSystem.Threading;usingMicrosoft.Xna.Framework;.從GameScreen基類(像你之前類所做的),派生一個新類,并添加構(gòu)造函數(shù),如下所示:(代碼段一XNA游戲開發(fā)一LoadingScreen構(gòu)造函數(shù))classLoadingScreen:GameScreen{publicLoadingScreen。{TransitionOnTime=TimeSpan.FromSeconds(O.O);TransitionOffTime=TimeSpan.FromSeconds(O.O);):.添加一個類變量來保存將用來加載該組件的線程:(代碼段一XNA游戲開發(fā)一裝屏幕類變量)privateThreadbackgroundThread;.創(chuàng)建一個方法去加載這些內(nèi)容。這個方法是xna標(biāo)準(zhǔn)加載過程的一部分。(代碼段一XNA游戲開發(fā)一</em>LoadingScreenBackgroundLoadContent方法)voidBackgroundLoadContcnt(){ScrcenManager.Game.Contcnt.Load<object>("alien_hit");ScreenManagcr.Game.Content.Load<object>("alicn1**);ScreenManagcr.Game.Content.Load<object>('background1');ScreenManager.Game.Content.Load<object>("badguy_blue");ScreenManager.Game.Content.Load<object>(,,badguy_greenM);ScreenManager.Gamc.Content.Load<object>("badguyorange1');ScreenManager.Game.Content.Load<object>("badguyred");ScreenManager.Game.Content.Load<object>("bullet");ScreenManager.Game.Content.Load<object>(Mcloud1");ScreenManagcr.Game.Content.Load<object>(Mcloud2,');ScreenManager.Game.Contem.Load<object>("fke");ScrecnManager.Game.Content.Load<object>(,'gamefbnt,');ScrcenManager.Game.Contcnt.Load<object>(Mground");ScreenManager.Game.Contcnt.Load<object>("hills*');ScreenManagcr.Game.Content.Load^bjec^C'laser");ScreenManagcr.Game.Content.Load〈object>("mcnufbnt");ScreenManager.Game.Contern.Load<object>("moon");ScreenManager.Game.Content.Loadvobject>("mountains_blurred");ScreenManager.Game.Content.Load<object>(Mplayer_hit");ScreenManager.Game.Content.Load〈object>("scorefbnl");ScreenManager.Game.Content.Load<object>(Msmoke");ScreenManager.Game.Content.Load<object>("sunH);ScreenManager.Game.Content.Load<object>("tankH);ScreenManager.Game.Content.Load<object>("tank_fireM);ScreenManager.Game.Content.Load<object>("tanktire");ScrcenManager.Game.Content.Load^bjec^C^tanktop");ScrccnManagcr.Game.Contcnt.Load^bject^^title1');ScreenManager.Game.Content.Load<object>("titlefbntM);}.重寫基類LoadContent方法,并作為一個新線程,實現(xiàn)資源的異步加載開始加載程序的方法:Note:在我們簡單的游戲中,加載資源將瞬間完成,但在更復(fù)雜的游戲,這種方法將使用顯示進(jìn)度指示器或閃屏(splashscreen)。(CodeSnippet-GameDevelopmentwithXNA-加載ScreenLoadContent方法)publicoverridevoidLoadContent()(if(backgroundThread=null){backgroundThread=newThread(BackgroundLoadContent);backgroundThread.Start。;}base.LoadContent();:.重寫基類更新方法,等待LoadContent完成并跳轉(zhuǎn)到MainMcnu屏幕(在接下來的步驟中添加):(代碼段-XNA游戲--LoadingScreenUpdate方法)publicoverridevoidUpdatefGameTimegameTime,boolotherScreenHasFocus,boolcoveredByOtherScreen){if(backgroundThread!=null&&backgroundThread.Join(10){backgroundThread=null;this.ExitScreen();ScrcenManager.AddScreen(ncwMainMenuScreenO);ScrcenManager.Game.ResetElapsedTime();}base.LIpdate(gamcTime,otherScreenHasFocus,coveredByOtherScreen);).現(xiàn)在添加一個新的類并將其命名為MainMenuScrccno添加以下使用申明:(代碼段-XNA游戲-MainMenuScreen使用申明)usingAlienGameSample;.從McnuScrecn基類派生新類。此類也定義定義到ScrccnManagcr文件夾中,并便于與菜單和菜單項顯示/交互所需的所有典型功能。.創(chuàng)建MainMcnuScrccn類構(gòu)造函數(shù):(代碼段-XNA游戲-MainMenuScreen構(gòu)造函數(shù))classMainMenuScrecn:MenuScreen(publicMainMenuScreen():base(HMain")(//Createourmenuentries.MenuEntrystartGameMenuEntry=newMcnuEntry(MSTARTGAME");MenuEntryexitMenuEntry=newMenuEntry(HQUIT**);//Hookupmenueventhandlers.startGameMenuEntry.Selected+=StartGameMcnuEntrySelected;exitMenuEntry.Selected+=OnCancel;//Addentriestothemenu.MenuEntries.Add(startGameMenuEntry);MenuEntries.Add(exitMenuEntry);}).Intheconstructoryousubscribedfbrtwoevents,whichwillfirewhentheuserselectsthemenuitems.Createtheeventhandlermethodstohandlethoseevents:在構(gòu)造函數(shù)中應(yīng)用了,當(dāng)用戶選擇了(CodeSnippet-GameDevelopmentwithXNA-MainMenuScreeneventhandlers)voidStartGameMenuEntrySelected(objectsender,EventArgse){}protectedoverridevoidOnCanceI()(ScrecnManagcr.Game.Exit();).打開AlienGame.es文件,并添加以下使用申明:(代碼段-XNA游戲-AlienGame使用申明)usingAlienGameSample;.添加以下類變量:(代碼段-XNA游戲--AlienGame變量)ScreenManagerscrccnManagcr;.刪除由VisualStudio創(chuàng)建的變量spriteBatchSpriteBatchspriteBatch;.刪除除了類的構(gòu)造函數(shù)和變量申明以外的全部內(nèi)容。.初始化主游戲類后,您需要加載游戲資源,并向用戶顯示的菜單的一些背景。菜單屏幕會需要一個加載過程。在另外我們建議您定義你圖形設(shè)備首選的方案。要達(dá)到這個目標(biāo)更改構(gòu)造函數(shù)方法根據(jù)下面的代碼片斷:(代碼段-XNA游戲--AlienGame構(gòu)造函數(shù))publicAlienGameOgraphics=newGraphicsDeviccManager(this);//SettheWindowsPhonescreenresolutiongraphics.PrcfcrrcdBackBuflbrWidth=480;graphics.PrcicrrcdBackBuffcrHeight=800;Content.RootDircctory="Content";//Framerateis30fpsbydefaultforWindowsPhone.TargetElapsedTime=TimeSpan.FromSeconds(1/30.0);//CreateanewinstanceoftheScreenManagerscreenManager=newScreenManager!this);Components.Add(screenManager);//AddtwonewscreensscreenManager.AddScreen(newBackgroundScreen());screenManager.AddScreen(newLoadingScreenO);.編譯并運行應(yīng)用程序。程序加載后,主菜單將出現(xiàn)圖5.38應(yīng)用程序的主菜單.停止調(diào)試,返回到應(yīng)用程序編輯環(huán)節(jié)。在這個環(huán)節(jié),你給游戲添加了一些資源,并創(chuàng)建了些screen,在加載游戲的時候去加載內(nèi)容,還創(chuàng)建了一個主菜單。XNAGameStudio游戲循環(huán)在這部分中您將重點兩剩余部分的游戲——重寫Update和Draw功能。有些大大可能看過相關(guān)微軟的訓(xùn)練包.打開BackgroundScreen.cs文件。.重寫基類Update方法如卜.:(CodeSnippet-GameDevelopmentwithXNA-BackgroundScreenUpdatemethod)publicoverridevoidUpdatc(GamcTimcgameTime,boolothcrScreenHasFocus,boolcovcredByOthcrScrccn){base.Update(gameTime,otherScreenHasFocus,false);:.重寫基類方法繪制。繪圖方法將繪制圖形設(shè)備上使用。Microsoft.Xna.Framewok.Graphics命名空間中的SpriteBatch類。一組sprites被繪制的時候使用同樣的設(shè)置。改變Draw方法來匹配卜面的代碼段:(CodeSnippet-GameDevelopmentwithXNA-BackgroundScreenDrawmethod)publicoverridevoidDraw(GameTimcgameTime)SpriteBatchspriteBatch=ScrecnManager.SpriteBatch^ZMakethemenuslideintoplaceduringtransitions,usinga//powercurvetomakethingslookmoreinteresting(thismakes//themovementslowdownasitnearstheend).floattransitionoffset=(float)Math.Pow(TransitionPosition,2);spriteBatch.Begin();//DrawBackgroundspriteBatch.Draw(background,newVector2(0,0),newColor(255,255,255,TransitionAlpha));//DrawTitlespriteBatch.Draw(title.newVector2(60,55),newColor(255,255,255,TransitionAlpha));spriteBatch.End();}.按F5編譯并運行該應(yīng)用程序。圖5.39修改了updatae和Draw后的運行效果.停止調(diào)試(SHIFT+F5),并返回到編輯應(yīng)用程序。 6.將一個附加類添加到應(yīng)用程序,并將其名稱設(shè)置為GameplayScreen。 Note:要創(chuàng)建一個新的類,在解決方案資源管理器中右鍵單擊AlienGame項目并選擇Add|Class.““一丁南笳以話談帝市期薪亮(CodeSnippet-GameDevelopmentwithXNA-GameplayScreenusingstatements)usingAlienGameSample;usingMicrosoft.Xna.Framework;usingMicrosoft.Xna.Framework.Graphics;usingMicrosoft.Xna.Framework.Audio;usingSystem.IO.IsolatedStorage;usingSystem.IO;.從GameScreen派生:classGameplayScreen:GameScreen{).添加以下類變量(將在比賽中使用它們)。后面我們使用這些變量,處理游戲邏輯、用戶輸入和繪圖:(CodeSnippet-GameDevelopmentwithXNA-GameplayScreenvariables)//GamePlayMembersRectangleworldBounds;boolgameOver;intbascLevelKillCount;intlevelKillCount;floatalienSpawnTimer;floatalicnSpawnRatc;floatalienMaxAccuracy;floatalienSpeedMin;floatalienSpeedMax;intalienScore;intnextLife;inthitStreak;inthighScore;Randomrandom;////RenderingMembers//Texture2Dcloud1Texture;Texture2Dcloud2Texture;Texture2DsunTexture;Texture2DmoonTexture;Texture2DgroundTexture;Texture2DtankTexture;Texture2DalienTexture;Texture2Dbadguyblue;Texture?Dbadguy_red;Texture2Dbadguy_green;Texture2Dbadguy_orange;Texture2DmountainsTexture;Texture2DhillsTexture;Texture2DbulletTexture;Texturc2DlaserTexture;SpriteFontscoreFont;SpriteFontmenuFont;Vector2cloud1Position;Vector2cloud2Position;Vector2sunPosition;//Levelchanges,nighttimetransitions,etcfloattransitionFactor;//O.Of=day,l.Of=nightfloattransitionRate;//>O.Of=daytonightParticleSystemparticles;////AudioMembers//SoundEflectalienFired;SoundEfleetalienDicd;SoundEflectplayerFired;SoundEflectplayerDied;//ScreendimensionconstsconstfloatscreenHeight=800.0f;constfloatscreenWidth=480.0f;constintleftOffset=25;constinttopOflset=50;constintbottomOffset=20;.游戲類構(gòu)造函數(shù)定義(在游戲屏幕和其他屏幕在游戲中的)之間的扉幕轉(zhuǎn)換的速度和大小一—在處理游戲的所有操作的地方。添加此類構(gòu)造函數(shù),如下所示:(CodeSnippet-GameDevelopmentwithXNA-GameplayScreenConstructor)publicGameplayScreen()(random=newRandom。;worldBounds=newRectangle(O,0,(int)screenWidth,(int)screenHeight);gameOver=true;TransitionOnTime=TimeSpan.FromSeconds(O.O);TransitionOfTTime=TimeSpan.FromSeconds(O.O);:.現(xiàn)在讓我們來創(chuàng)建內(nèi)容的加載和卸載功能重寫基類的LoadContent和UnloadContent的方法。添加LoadContent代碼段::(CodeSnippet-GameDevelopmentwithXNA-GameplayScreenLoadContentmethod)publicoverridevoidLoadContent()(cloud1Texture=ScrecnManager.Game.Content.Load<Texture2D>(*'cloud1**);cloud2Texture=ScreenManagcr.Game.Content.Load<Texture2D>("cloud2");sunTexture=ScreenManager.Game.Content.Load<Texture2D>("sunH);moonTexture=ScreenManager.Game.Content.Load<Texture2D>(Mmoon,,);groundTexture=ScreenManager.Game.Content.Load<Texture2D>("ground");tankTexture=ScreenManager.Gamc.Content.Load<Texture2D>(,'tank");mountainsTexture=ScrcenManager.Game.Content.LoadvTexture2D>("mountains_blurrcd");hillsTexture=ScreenManager.Game.Content.Load<Texture2D>(*,hiilsH);alienTexture=ScrcenManager.Game.Content.Load<Texture2D>("alien1");badguybluc=ScrecnManagcr.Game.Content.Load<Texturc2D>("badguyblue");badguyre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 巴西駕照測試題及答案
- 畢業(yè)旅行測試題及答案
- 道德素養(yǎng)試題及答案
- 導(dǎo)游考試題目答案
- 初中環(huán)保試題及答案
- 初級注安師試題及答案
- 大學(xué)中期測試題及答案
- 數(shù)字化背景下的保安工作計劃
- 秘書在危機(jī)管理中的作用計劃
- 煥發(fā)工作熱情的年度計劃
- 2023年USAPA美國匹克球協(xié)會官方規(guī)則翻譯版
- 新一代國際結(jié)算系統(tǒng)需求規(guī)格說明書(匯款)V1.0
- 掃描電子顯微鏡SEM
- 煤礦測量規(guī)程
- 七年級下冊英語第三次月考試題
- 涉密人員錄用審查表
- GB/T 39559.2-2020城市軌道交通設(shè)施運營監(jiān)測技術(shù)規(guī)范第2部分:橋梁
- GB/T 19106-2013次氯酸鈉
- 2023年江西省三支一扶真題及答案解析
- 中國鋁業(yè)遵義氧化鋁有限公司氧化鋁工程分解分級槽基礎(chǔ)工程 施工組織設(shè)計
- 初中信息技術(shù)-算法基礎(chǔ)知識教學(xué)教學(xué)課件
評論
0/150
提交評論