Windows Phone開發(fā)工具初體驗(yàn)
既然把Windows Phone Emulator起來(lái)了,我們就順便參觀下Windows Phone的新界面吧。點(diǎn)左邊的Back鍵,會(huì)將應(yīng)用程序的Debugger斷掉,不知道程序是否退出了。點(diǎn)中間的Win Button,會(huì)回到主界面。
不過(guò)主界面上只有IE一個(gè)圖標(biāo)。Windows Phone模擬器中還沒(méi)有包括其他的系統(tǒng)功能,比如電話、電子郵件、搜索等。模擬器也沒(méi)有辦法模擬重力感應(yīng)、Location定位服務(wù)。希望到Windows Phone開發(fā)工具正式發(fā)布時(shí),這些系統(tǒng)功能都可以被支持。
IE的用戶體驗(yàn)非常好,一開始新手發(fā)蒙,沒(méi)找到地址欄,后邊就非常順利了。無(wú)論是頁(yè)面縮放時(shí)的平滑動(dòng)畫,還是輸入時(shí)切換到適當(dāng)大小的設(shè)計(jì),都非常順手。特別是Multi-Tab的設(shè)計(jì),感覺非常舒服。特意試了Google Map,顯示一切正常。智能手機(jī)時(shí)代,有一個(gè)好的瀏覽器,其實(shí)就成功了一半。
哦,還有一點(diǎn),我在Windows Phone Emulator里沒(méi)有做任何配置,就可以上網(wǎng)了。
XNA 4.0
在移動(dòng)開發(fā)界,XNA還不是一個(gè)響亮的名字,但是在游戲開發(fā)界,Xbox 360上的XNA則是泰山北斗級(jí)的開發(fā)技術(shù)。XNA不僅僅是一個(gè).NET的游戲開發(fā)平臺(tái),還包括了很多支持Xbox Live服務(wù)的功能,比如,Avatars技術(shù)支持在游戲中顯示用戶設(shè)計(jì)的形象。希望這項(xiàng)技術(shù)能夠和同名電影一樣,改變移動(dòng)游戲開發(fā)的歷史。
Windows Phone支持的是XNA 4.0,與Zune HD上的XNA 3.1有啥區(qū)別?支持3D游戲!目前我們看到的這個(gè)XNA 4.0預(yù)覽版只支持Windows Phone開發(fā),不支持Windows和Xbox 360的游戲開發(fā)。
Silverlight for Windows Phone是典型的事件驅(qū)動(dòng)型應(yīng)用程序。而XNA是由時(shí)間驅(qū)動(dòng)的應(yīng)用程序,這也是游戲開發(fā)技術(shù)的典型特點(diǎn)。每隔固定時(shí)間,系統(tǒng)會(huì)觸發(fā)Update事件,使程序得以更新。
不那么多廢話了,創(chuàng)建個(gè)XNA 4.0的新工程吧!
選擇Windows Phone Game就好了。IDE環(huán)境下沒(méi)有界面編輯器,需要程序員通過(guò)代碼來(lái)實(shí)現(xiàn)UI。XNA程序的結(jié)構(gòu)非常簡(jiǎn)單,程序員只需要實(shí)現(xiàn)幾個(gè)簡(jiǎn)單的方法,就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的XNA程序了。這些方法包括Initialize初始化方法、LoadContent加載文件、Update更新內(nèi)容和Draw繪制等方法。下面是示例代碼片段:
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
texture1 = Content.Load
texture2 = Content.Load
soundEffect = Content.Load
spritePosition1.X = 0;
spritePosition1.Y = 0;
spritePosition2.X = graphics.GraphicsDevice.Viewport.Width - texture1.Width;
spritePosition2.Y = graphics.GraphicsDevice.Viewport.Height - texture1.Height;
sprite1Height = texture1.Bounds.Height;
sprite1Width = texture1.Bounds.Width;
sprite2Height = texture2.Bounds.Height;
sprite2Width = texture2.Bounds.Width;
}
LoadContent方法中使用Content.Load方法來(lái)加載資源文件,這些文件也是作為資源被加載到XNA程序中的。
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Move the sprite around.
UpdateSprite(gameTime, ref spritePosition1, ref spriteSpeed1);
UpdateSprite(gameTime, ref spritePosition2, ref spriteSpeed2);
CheckForCollision();
base.Update(gameTime);
}
Update方法負(fù)責(zé)更新元素的位置,進(jìn)行碰撞檢測(cè)。如果后退鍵被按下,則退出程序。
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
// Draw the sprite.
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
spriteBatch.Draw(texture1, spritePosition1, Color.White);
spriteBatch.End();
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.Opaque);
spriteBatch.Draw(texture2, spritePosition2, Color.AliceBlue);
spriteBatch.End();
base.Draw(gameTime);
}
Draw方法對(duì)更新后的元素進(jìn)行繪制。
我們的第一個(gè)XNA程序會(huì)顯示兩張圖片,這兩張圖片會(huì)在屏幕中運(yùn)行,運(yùn)行到邊緣時(shí),會(huì)反彈回來(lái)。
評(píng)論