zoukankan      html  css  js  c++  java
  • 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的。

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

  • 相关阅读:
    如何使用 Python 進行字串格式化
    骨牌摆放问题 POJ 2411(状态压缩DP)
    ACM/OI中C++常用优化(实用/调试/技巧)代码(语法)
    Windows 系统如何完全卸载 VSCode
    Python 在VSCode中使用
    第十一场训练赛
    L1-046 整除光棍 (20分)
    Problem 330A
    POJ 2187 Beauty Contest (凸包 旋转卡壳)
    程序员:写作能收获什么?
  • 原文地址:https://www.cnblogs.com/biosli/p/1983111.html
Copyright © 2011-2022 走看看