在智能手机行业,Windows Mobile智能操作系统的市场正在被iPhone和Android蚕食。iPhone最先将多点触摸引入IT行业,iPhone以及苹果网络应用程序商店获得巨大的成功,乔布斯因为iPhone走出低谷。许多程序员都在苹果网店成功淘金。Google推出的Android也不断发展壮大。移动互联网的发展一日千里,微软这个IT业强悍的巨无霸已经落后了,为了抢占未来移动互联网,看着自己不争气的Windows Mobile,,在MWC 2010大会发布了Windows Phone 7智能操作系统,自己推出的 Windows 7取得巨大的成功,微软希望7成为其幸运数字,希望新推出的Windows Phone 7智能操作系统能像PC操作系统Windows7一样横行天下。
Windows Phone 7得到了全世界多家手机/硬件厂商和电信运营商的大力支持,这其中包括:高通、戴尔、LG、三星、Garmin-Asus、HTC、HP、索尼爱立信以及东芝等等,还有包括沃达丰、T-Mobile、Verizon、AT&T、Orange、Sprint等等运营商。LG、三星、华硕已经分别推出基于Windows Phone 7的手机。
目前全世界仅有25%的WM手机用户通过手机访问互联网,Windows Phone 7投入使用之后将会产生巨大的改变,这款操作系统的全新用户体验将会努力争取另外75%的用户来使用手机访问互联网。Windows Phone 7的出现就是模仿iPhone,上网功能及其丰富。Windows Phone 7将会和之前的WM系统有所不同,它将为用户提供更为整体的体验,从而提升用户的对于微软的依赖度。最为突出的两点就是Windows Phone 7加入了Xbox Live和Zune的服务,这将使手机成为整个微软产品系列的中心。用户可以通过Windows Phone 7来使用更多的微软服务。Windows Phone 7将整体操作体验的中心转移至用户,用户可以根据自己的需要来设置主界面上的内容,用户还可以通过手机来实现社交网络的信息互通。同时Windows Phone 7加入对电容屏幕和多点触控的支持,这一切都将大大提升用户体验。
Windows Phone 7还加入了对于微软Bing的支持,除了加入专用的搜索按键之外,还能够通过Bing来实现对手机的定位和导航。还能通过Exchange实现通讯录、邮件以及日程表等等常用资料的同步。Windows Phone 7的游戏能力也是非常强悍,运行游戏相当流畅,Windows Phone 7系列的手机可以上通过重力感应和触控屏幕来进行游戏。Windows Phone 7的Xbox Live功能相当强大。
微软通过最新一代手机操作系统Windows Phone 7,将旗下Xbox LIVE游戏、Zune音乐与独特的视频体验、Bing搜索等等整合至手机中,以抢占未来的移动互联网市场。Windows Phone 7甚至支持Adobe Flash ,吸取Windows Vista因为不兼容而失败的教训。
介绍完了Windows Phone 7的新特性,我们步入正轨,我们将体验我们自己开发Windows Phone 7应用程序。我们要像那些在iPhone上淘金的程序员一样在Windows Phone 7上淘金。
微软MIX10大会正式推出了Windows Phone 7 Series 应用和游戏开发工具与Windows Phone 7 Series在线应用商店Windows Phone Marketplace,用户可以使用信用卡购买自己需要的应用程序。新的应用商店将支持运营商计费和广告商投放手机广告,另外还将支持先试后买服务。Windows Phone Marketplace共有应用、游戏、音乐、视频播客等多个分类,并有已安装程序可升级提醒,用户可以在应用商店中浏览类别和名称、查看评级、评论、截图、价格等信息。购买后的应用程序可以设置快捷方式至快速启动桌面。微软透露将于5月发布详细的 Windows Phone 7 系列应用商店政策和指导原则。对于开发者来说,要想在Windows Phone 7软件商店中发布软件,首先要做的就是向微软缴纳99美元的费用,用来开通专用的开发者账户,当然,软件开发者会获得软件的利益分成。现在有包括微软游戏工作室、EA移动在内的多家重量级软件开发商正在为Windows Phone 7 Series开发软件。
Windows Phone 7开发工具下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&displaylang=en
Windows Phone 7 Series 开发工具包括 Visual Studio 2010 Express for Windows Phone、Expression Blend 4 for Windows Phone、Windows Phone 设备模拟器和 XNA Game Studio 4.0。不过这个东西是在线安装,网速慢的程序员们,可得有点耐心!
微软Windows Phone 7开发主页:
http://developer.windowsphone.com/
MIX 2010 Keynote视频:
http://www.microsoft.com/presspass/events/mix/videoGallery.aspx
打开VS 2010后, Windows Phone 7提供了两种不同的开发平台:Silverlight for Windows Phone和XNA 4.0, Windows Mobile程序员要心碎了,现有的Windows Mobile应用将不能在Windows Phone 7 手机上运行.微软基于Windows phone 7开发将与Windows Mobile完全不同。“以前Windows Mobile的C++和.NET Compact Framework都用不上了。所以,以前的Windows Mobile程序员也要经历一个痛苦的转型过程。
我们来体验Windows Phone 7的开发快感吧!
Silverlight for Windows Phone
Silverlight for Windows Phone险些沦为一个微软的笑柄,一些Windows Mobile程序员抱怨,诺基亚Symbian上的Silverlight都出来了,Windows Mobile上的Silverlight在哪里?呵呵,这次Silverlight for Windows Phone来了,而且所有Windows Phone上的应用必须用Silverlight来写。由于目前还是测试版,暂时不支持中文,所以用英文演示。
1.启动Visual Studio 2010 Express for Windows Phone
2.创建一个WindowsphoneCSDN项目
3.创建成功后,插入一个textBox控件,插入一个Webrowser控件,插入一个按钮控件命名为GO,
4.双击按钮控件,添加如下代码
5.按下F5启动模拟器开始调试,看看那Windows 7的上网特性,用CSDN专家打造的简单型浏览器。这个是竖着看。
然后翻个个,有重力感应,所以自动切换画面,速度还很快!
可能移动开发者不知道XNA的含义,XNA是开发基于Xbox 360上的游戏的著名开发工具。如今,Windows Phone一开始支持的就是XNA 4.0,相比Zune HD上的XNA 3.1有什么区别?XNA 4.0支持3D游戏! 曾经有不少程序员都曾经因为开发小游戏成功得在iPhone上淘金,我们也要尝试着开始在Windowsphone 7上淘金了。
1.创建项目WindowsphoneCSDN,计划搞一个图形对撞的小游戏示范
2.打开解决方案管理器,选择GameThumbnail.png,将其复制到WindowsphoneCSDNContent 节点(也可以复制自己自行定制的图片,像素为64*64为最佳),并在Windows目录搜索Windows Ding.wav或者自己自行录制一个wav文件,作为游戏的声音文件,并将其作为资源添加到WindowsphoneCSDNContent节点下。
3.在WindowsphoneCSDN命名空间下的类,Game1初始化函数Game1()添加下列代码,定义图形的位置,速度,高度,宽度,还定义变量
Texture2D texture1;
Texture2D texture2;
Vector2 spritePosition1;
Vector2 spritePosition2;
Vector2 spriteSpeed1 = new Vector2(50.0f, 50.0f);
Vector2 spriteSpeed2 = new Vector2(100.0f, 100.0f);
int sprite1Height;
int sprite1Width;
int sprite2Height;
int sprite2Width;
SoundEffect soundEffect;
4. 重载LoadContent方法,每个图形都被赋予一个在屏幕上的高度和宽度,计算每个初始位置。
protected override void LoadContent()
{
//创建一个新的SpriteBatch,可以用来绘制纹理
spriteBatch = new SpriteBatch(GraphicsDevice);
spriteBatch = new SpriteBatch(GraphicsDevice);
texture1 = Content.Load<Texture2D>("GameThumbnail");
texture2 = Content.Load<Texture2D>("GameThumbnail");
soundEffect = Content.Load<SoundEffect>("Windows Ding");
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;
}
5. 重载Draw方法
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
//绘制图形.
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.Gray);
spriteBatch.End();
base.Draw(gameTime);
}
6. 重载update方法,并添加UpdateSprite方法,CheckForCollision方法
protected override void Update(GameTime gameTime)
{
// 程序退出
if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
ButtonState.Pressed)
this.Exit();
// 移动图形
UpdateSprite(gameTime, ref spritePosition1, ref spriteSpeed1);
UpdateSprite(gameTime, ref spritePosition2, ref spriteSpeed2);
CheckForCollision();
base.Update(gameTime);
}
void UpdateSprite(GameTime gameTime, ref Vector2 spritePosition, ref Vector2 spriteSpeed)
{
// 根据时间缩放移动图形
spritePosition +=
spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
int MaxX =
graphics.GraphicsDevice.Viewport.Width - texture1.Width;
int MinX = 0;
int MaxY =
graphics.GraphicsDevice.Viewport.Height - texture1.Height;
int MinY = 0;
// 检查反弹
if (spritePosition.X > MaxX)
{
spriteSpeed.X *= -1;
spritePosition.X = MaxX;
}
else if (spritePosition.X < MinX)
{
spriteSpeed.X *= -1;
spritePosition.X = MinX;
}
if (spritePosition.Y > MaxY)
{
spriteSpeed.Y *= -1;
spritePosition.Y = MaxY;
}
else if (spritePosition.Y < MinY)
{
spriteSpeed.Y *= -1;
spritePosition.Y = MinY;
}
}
//检查图形边界是否重叠
void CheckForCollision()
{
BoundingBox bb1 = new BoundingBox(new Vector3(spritePosition1.X - (sprite1Width / 2), spritePosition1.Y - (sprite1Height / 2), 0), new Vector3(spritePosition1.X + (sprite1Width / 2), spritePosition1.Y + (sprite1Height / 2), 0));
BoundingBox bb2 = new BoundingBox(new Vector3(spritePosition2.X - (sprite2Width / 2), spritePosition2.Y - (sprite2Height / 2), 0), new Vector3(spritePosition2.X + (sprite2Width / 2), spritePosition2.Y + (sprite2Height / 2), 0));
if (bb1.Intersects(bb2))
{
soundEffect.Play();
}
}
7.直接运行,见效果,听音效
其实Windows Phone 7不是 Windows Mobile的升级,这是一个全新的智能手机操作系统。Windows Phone的功能可能没有Windows Mobile丰富,但是他赢得喝彩,靠的只有四个字——用户体验。 相信微软的努力,一定能挽回用户的心,微软也将在未来的移动嵌入式市场这块大蛋糕分得一大块。我们这些错过了iPhone上创富的程序员,一定不能错过Windows Phone 7. Windows Phone 7还有一段较长的路要走,我们且行且努力!
本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!