Windows Phone 7 学习流水攻略(一)

学而不思则罔,思而不学则殆。

从上周开始看Charles Petzold的《Programming Windows Phone 7》。书中的内容颇为丰富,受益匪浅。

但也因为书中涵盖内容太多,需要做的笔记也很多,所以索性写博客按章节把内容总结出来。

目的有两个:

第一,对所学知识做一个总结。

第二,便于以后按章节查找具体内容,毕竟书是英文版,如果要找相应内容面对长得差不多的英文还是要翻一阵的。

 

好了,从前言开始吧!

前言,大体介绍了安装开发环境需求(Windows 7系统,VS2010),书中的内容,一些资源的索引,本书针对的人群(对C#和.NET有经验)等。

其中作者针对那些没有学习过C#和.Net的C++程序员(like me),推荐了他的一本书《.NET第0章:C或C++程序员必须知道的C#和.NET Framework》(.NET Book Zero: What the C or C++ Programmer Needs to Know about C# and the .NET Framework),我还真是好好看了一遍他推荐的这本书,从C/C++的程序员角度入手解释C#和.NET,算是启蒙书。

书分三个部分:第一部分(1-6章)介绍Silverlight和XNA的共同部分,第二(7-18章)、第三(19-23章)部分分别介绍Silverlight和XNA下的开发。

(国外的朋友写书喜欢留伏笔,前面大概说说,后面扩展,所以有些章节只是知识的索引大头在后面,中间的跨度可能有好几章)

 

第一章,Hello, Windows Phone 7。

一,介绍Silverlight和XNA上两个框架的异同。

Silverlight偏流程,由事件触发流程。XNA偏游戏开发,主要是玩循环的。

个人理解,XNA就是类似于纯的Windows API开发,当然也封装过了,为了省你的事给你架了一套处理图像处理机制。不然双缓冲,事件处理啥的就还得你做。

Silverlight就是高级版的MFC(其实更像Flash),利用XAML布局,C#写后台。

 

二,介绍硬件按键

告诉你屏幕上那几个难看的按键都是干嘛用的。在后面的开发中,你会发现其实这几个按键具体触发的事件等。

还有告诉你现在手机有可能出现的分辨率会是啥样的。另外告诉你屏幕的特性——屏幕Theme颜色越暗越省电。

 

三,介绍硬件传感器和服务

什么Wifi,摄像头,加速度传感器,位置服务(GPS),FM收音机,Push同步(Push Notifications,减少网络交互用的,必要时才做连接的服务)

 

四,破处之旅

告诉你VS里面怎么找到建立工程的入口。

 

五,第一次和Silverlight搞

告诉你怎么改程序标题,怎么运行(调试)程序,怎么在模拟器上玩的爽(调整模拟器屏幕大小)。

 

六,一个Silverlight程序中包含的基本文件

两对配对的开发文件:

App.xaml和App.xmal.cs

还有

Main.xaml和Main.xmal.cs

.xmal是前台文件.cs是对应的后台文件。

App那一对是程序运行的入口文件和全局的配置文件。

Main那一对是第一“夜”的服务内容。

其中说到xaml生成的中间文件.g.cs(其实也是个cs文件)在obj/Debug目录下,这个文件可了不起了,是你xaml编译后生成的cs文件,其中包含了你在.cs文件中用到的变量声明。然后,利用了C#可以利用Partial将类份文件编译的语言特性,将声明和.cs文件揉起来。但是这个文件是自动生成的,不要做修改,因为如果你修改了下次重编的时候还会变回去,要是想修改就看看你的xaml文件有没写错吧!!

接着,分别介绍了xaml基本标签的含义,如<phone:PhoneApplicationPage ….>,<Grid…>,<TextBlock…>等等

最后告诉你怎么通过修改xaml改标题和添加一个TextBlock,并且介绍了TextBlock的HorizontalAlignment和VerticalAlignment属性。

 

七,颜色主题

介绍如何换主题,还有通过TextBlock的Foreground属性变换字体颜色。

 

八,教你怎么算字体大小和字体的实际大小

 

九,告诉你WP7程序打包的秘密

XAP程序包文件其实是个zip文件,你把后缀xap文件改成后缀zip,可以用Winzip打开查看其中的资源。

我发现资源是散着的,而程序是个dll。

 

十,第一个XNA程序

一个新的XNA工程的结构:一个新开的XNA项目,有两个工程,一个是资源工程,一个是逻辑工程。

介绍了如何向资源工程里添加字体,如何编辑SpriteFont文件,里面的标签是干啥的,如:FoneName,Size,CharacterRegions等等。

介绍了在逻辑工程Game1.cs文件中添加一个自定义字体的方法:

要建立N个变量……

在Game1()构造函数里生成对象,

运行Initialize()函数初始化,

在LoadContent()载入字体资源(如果有可能在这里做画图的初始化工作,计算坐标等,因为在这里载入字体资源后才能得到字体的大小,才能够算出字符串所占像素数。)

-----------------

Tips:

1. this.Content.Load<SpriteFont>(“spriteFontName”)

    Content是ContentManager的引用,用于Load资源。

2. Vector2 SpriteFont.MeatureString(string str)

    可以得到字符串像素大小。

3. this.GraphicsDevice.Viewport

    可以得到屏幕可操作的区域大小,及起始点(0,0),另外屏幕左上角是(0,0)点

-----------------

然后程序会运行Update,Draw,Update,Draw…两个函数循环执行。

因此在Update的时候做逻辑运算,在Draw的时候画图。

------------------

Tips:

1. 由于垃圾回收会占用资源,影响效率,因此在XNA程序中struct会被更频繁的用到(C#中sruct是栈分配内存且做内存拷贝)

2. 处于对第一点的考虑,在Update函数中尽量不要调用new来在堆上构造class.

3. Draw的时候利用SpriteBatch做画图操作。具体的画图语句应该包含在SpriteBatch.Begin()和SpriteBatch.End()之间

如:

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.Navy);


    spriteBatch.Begin();
    spriteBatch.DrawString(segoe14, text, textPosition, Color.White);
    spriteBatch.End();


    base.Draw(gameTime);
}

------------------

 

最后,作者为下一章做了铺垫。

在Silverlight中屏幕的默认方向是Portrait,XNA方向是LandscapeRight的。

下一章将介绍屏幕方向的问题。

posted @ 2011-03-14 00:53  摇滚诗人  阅读(520)  评论(0编辑  收藏  举报