惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
Microsoft Azure Blog
Microsoft Azure Blog
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志
D
Docker
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Register - Security
The Register - Security
J
Java Code Geeks
S
SegmentFault 最新的问题
月光博客
月光博客
G
Google Developers Blog
美团技术团队
Last Week in AI
Last Week in AI
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
The Blog of Author Tim Ferriss
腾讯CDC
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
The Cloudflare Blog
有赞技术团队
有赞技术团队
博客园_首页
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
B
Blog
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
F
Fortinet All Blogs
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
爱范儿
爱范儿
D
DataBreaches.Net
F
Full Disclosure
M
MIT News - Artificial intelligence
博客园 - 司徒正美
H
Help Net Security

博客园 - 王传炜

Unity Networking API文档翻译(二):The High Level API Unity Networking API文档翻译(一):Networking概述 Unity3D独立游戏开发日记(二):摆放建筑物 Unity3D独立游戏开发日记(一):动态生成树木 如何申请TexturePacker 我的个人总结 《windowsPhone游戏开发实战》 如何在WP7上用XNA写2D游戏(六) 写在"CastleDefense"上市1周月之际 如何在WP7上用XNA写2D游戏(五) 如何在WP7上用XNA写2D游戏(四) 如何在WP7上用XNA写2D游戏(三) 如何在WP7上用XNA写2D游戏(一) 我的2010年 Silverlight MMORPG WebGame游戏设计(七)-----IsolatedStorage,想说爱你不容易 Silverlight MMORPG WebGame游戏设计(六)-----Server和Client的婚后协议[附上完整15M游戏DEMO] Silverlight MMORPG WebGame游戏设计(五)-----Client的嫁妆 - 王传炜 Silverlight MMORPG WebGame游戏设计(四)-----Client:Server!房子啥时候装好?我急嫁人啊! Silverlight MMORPG WebGame游戏设计(三)-----Server和Client的暗号
如何在WP7上用XNA写2D游戏(二)
王传炜 · 2011-10-15 · via 博客园 - 王传炜

            准备写一系列XNA里设计2D游戏的文章,这是第一章。

                                              1.XNA里的hello world

1.1创建XNA游戏开发项目

      我们初学程序的时候,总是爱写一个hello world 来体验下。可以说写出hello world 是我们了解一个语言或者框架最简单的做法。那么我们如何在wp7(windows phone 7)里用xna游戏框架在屏幕输出hello world呢。

其实微软的开发工具对开发者而言是很友好的。我们打开vs2010 Express for Windows Phone,选择File->New Project菜单,新建项目XNAGameSample,如图1-1:

                              图1-1

     于是我们看到如下图1-2这样的解决方案:

 

                           图1-2

         对这个解决方案,在右侧的解决方案资源管理器(Solution Explorer)里我们可以看到两个项目:

XNAGameSample和XNAGameSampleContent.

        在我们项目储存的硬盘上我们可以看到图1-3这样的目录结构:

                                                 图1-3

     其中XNAGameSampleContent项目是我们用来管理游戏资源文件的项目,我们以后用到贴图,模型,声音等资源都会放在这里管理。

     XNAGameSample是我们的主项目。

     在XNAGameSample项目里我们开打game1.cs文件,这是游戏运行的主入口,如图1-4:

                                             图1-4

     在Game1.cs里面有Initialize,LoadContent,UnloadContent,Update,Draw五个方法。

那么这五个方法各自在游戏里起什么作用呢?在后面的章节里我们会了解到这五个方法各自的用途。

1.2 update 和draw

           从函数命名上,我们可以猜测得到LoadContent是负责加载游戏资源的。Draw 是用来绘制游戏界面的。那么Update呢,从字面意思上我们可以看到是”更新”的意思,那么这个方法里更新什么呢?

            举一个简单的游戏场景来说。如果我们绘制一个手拿盾牌的小兵,让他从手机屏幕的左边跑到右边,那么我们怎么做呢。

            首先,我们会用LoadContent来加载这个小兵所使用到的所有贴图资源。然后用Draw 方法把贴图绘制到屏幕制定的位置。但是我们要求的是小兵是移动的,从左边跑到右边,在跑的过程中还涉及到帧动画的变化。那么这些问题我们都需要在Update里来处理。简单来说,我们需要在Update里改变小兵的坐标位置和变换所用到的贴图资源。

            我们需要了解的是Update 和Draw 在游戏运行过程中是按一定时间间隔不停被调用的方法,这样我们才能看到连续的动画。用流程图我们可以这样来描述:

           

      我们在WP7上写XNA游戏的时候,需要了解一个很重要的概念,就是刷新率是多少?通俗的说,1秒钟Draw和Update 被调用多少次。

     只有弄清楚这个问题,我们才能控制2D游戏动画的播放速度。WP7xna的刷新率默认为30fps.也就是说1秒钟Draw 和Update 要被调用30次。如图1-4,我们展开Game1函数,可以看到如下代码:

           public Game1()

   {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
        // Frame rate is 30 fps by default for Windows Phone.
        TargetElapsedTime = TimeSpan.FromTicks(333333);
   }

        其中有一段英文注释是"Frame rate is 30 fps by default for Windows Phone.",意思是Windows Phone 的默认FPS是30.

1.3 LoadContent 和 UnloadContent

     在1.2章节里我们已经简单介绍了LoadContent和UnloadContent的作用,如果我们需要在WP7里输出一段文字,我们就需要用到LoadContent了,在XNA里我们要经常接触到SpriteFont对象,这个对象是负责控制输出字体的,在XNA里字体的样式我们需要用一个XML文件来控制。如图1-5,我们在XNAGameSampleContent项目里创建一个新的文件夹“Fonts”,然后我们在XNAGameSampleContent项目里新建的Fonts文件夹上点击右键选择Add,然后选择New Item,再选择sprite font ,把Name改成default.spritefont,最后点击 add。

                                                                                       图1-5

            然后,如图1-6,我们修改default.spritefont的内容为:

                                                             图1-6

        做好了上面的准备工作,我们在Game1.cs里增加一个新的对象font,然后在LoadContent函数里添加如下代码:

font = Content.Load<SpriteFont>("Fonts/default");

        如图1-7:

                                                                 图1-7

     接着在Draw函数里写下如下代码:

   spriteBatch.Begin();
   spriteBatch.DrawString(font, "Hello world"new Vector2(200,100), Color.Black);
   spriteBatch.End();

     如图1-8:

                                                                                    图1-8

     然后我们只需要在工具条的最右边选择"Window Phone 7 Emulator"按下F5,在模拟器模式下就能运行这个小小的demo了,如图1-9:

                                                                                     图1-9

            那么我们怎么要在真机上调试呢?在下一章节我们就会讲到。

1.4调试和部署XNA项目

              首先,我们需要装上Zune,我们的wp7手机也需要解锁。解锁需要我们拥有WP7开发者账号。注册地址:http://create.msdn.com/。如图1-10:

              Tips:如果你有.edu的学生邮箱,又通过dreamSpark认证,就可以免去$99的年费。

                                                           图1-10

            准备好这些后,我们用数据线连上WP7真机,如果WP7被识别,会自动启动Zune。如图1-11:

                                                                                 图1-11

              然后我们在vs2010 Express for Windows Phone的工具条最右边选择"Windows Phone 7 Device"。再按F5。等几秒钟后,我们的项目编译后产生的XAP文件就被部署到真机里运行了。

     demo源代码下载地址:/Files/wangergo/XNAGameSample1.rar