前面我们都只是集中在物理引擎上,但是对于一个游戏来说,他包含的不只是物理引擎,他还要有游戏面板(普通的,可以滚动的),按钮,标签,图片,背景(层次背景),边界控制,输入处理,字体和纹理管理,帧率测速器,我们可以尽可能的使用最少的代码来轻易创建新的游戏画面。好了,现在我们一个个的来,首先我们将创建一个FameRate计数器。(请注意,我采用不同的方式创建和使用这些可复用的组件,这些只是为了向你显示有这么些方法)
对于这一节,我们将引用FarseerXNABase项目。

  

  在这里我不得不感谢一直支持我的卤面网版主,是他让我提起兴趣写了这么一篇文章,再次感谢卤面网,一个非常不错的wp7开发论坛,后面我也将再次向大家发布几篇高质量文章,请大家到卤面上找我吧,呵呵

进入正题:

  屏幕系统
  可能你心中会有一个疑问,什么是屏系统,我们有一堆类来处理绘制或者相关的工作,如果我们有屏系统的话,我们能更方便的控制各种组件的绘制,所以我们现在得有一个屏幕类去增加,删除屏幕中的组件。

  

  游戏面板
一个面板只是一个单层,他有些独立的更新和绘制逻辑,并可以与其它层相结合,建立一个复杂的菜单系统。
对于主菜单,选项菜单,“你确定要退出”消息框,游戏本身,这些都是面板。在FarseerXNABase/Components/ScreenSystem 目录中,我们有一个叫游戏面板(gameScreen)的基类。他就是所有面板类的虚基类,让我们探讨它的属性和方法。

  

ControllingPlayer:获取控制当前屏幕的玩家的id,如果为空,则表明它接受所有玩家的输入。它用于用户锁定游戏到一个帐户上。在主游戏菜单中,游戏响应任意输入端,当选定某一个帐户时,游戏只响应这个帐户的输入,直到返回主菜单。
EnabledGestures:获取面板感兴趣的的手势.面板应该使用尽可能具体的手势来增加的手势引擎的准确性。例如,大多数菜单需要轻触或上下拖动操作。这些手势都是由面板管理器管理,当面板上有手势变化时,状态参数InputState将传递给HandleInput方法

  

IsActive:此属性显示当前面板是否是在所有面板最顶端。如果它在所有面板最顶端,那么它的值是true,所有的输入都由些面板处理。

IsExiting:它用于表明当前面板是否退出。面板关闭有两个可能的情况。1.暂时跳到其它面板,2.直接跳出当前面板:此属性表示屏幕是否是真正的退出:如果设置为true,当跳转完成时面板会自动删除本身。

IsPopup:这个属性指出当前面板是否是一个弹出面板

ScreenManager: 它将返回当前面板attach的ScreenManager。

ScreenState:面板可以有几下4种状态,TransitionOn,Active,TransitionOff,Hidden。此属性返回这个状态值

TransitionAlpha:存储面板的透明度值。范围从0到1

TransitionOffTime:需要完全关闭(渐变变换)当前面板所需时长

TransitionOnTime:当前面板完全变换显示所需要的时间

TransitionPosition:表明当前面板的位置,范围从0(完全打开,不变换换)到1(完全关闭)。
draw:当屏幕需要自绘时调用这个函数

ExitScreen:使屏幕退出并开始过渡。这不会立即删除面板,而是将等待关闭变换完成后再删除。
Update:状态变换的逻辑处理,比如更新过渡的位置。 不论面板是active,或隐藏状态或正在过渡,这个方法都可被调用。
HandleGamePadInput,HandleInput和HandleKeyboardInput:允许处理用户输入。与更新,这种方法只被active状态的面板调用,而其它失去焦点的面板将不被调用。
LoadContent方法,UnloadContent:加载和卸载屏幕的图形等资源内容。
UpdateTransition:它是一种用来更新屏幕过渡位置的辅助方法。

ScreenManager(面板管理器)

这个类添加,删除和管理所有面板相关的处理,如渲染面板,更新面板,总之,它管理一个或多个游戏面板的实例,在特定的时间调用update,draw方法,处理最上面的面板的输入,让我们看看其属性和方法。

  

SpriteBatch:所有面板共享的默认spritebatch。
AddScreen:增加新面板到ScreenManager实例。
draw:让每个面板绘制自己。
update:更新每个屏幕的运行逻辑。
FadeBackBufferToBlack:帮助绘制一个半透明的黑色全屏精灵,用于渐隐屏幕,弹窗出现后,弹窗后面的背景变黑。
GetScreens:暴露所有屏幕的数组。我们得到返回的引用;
LoadContent,UnloadContent:加载和卸载图形内容
RemoveScree:从面板管理器删除面板。你应该直接调用GameScreen.ExitScreen,还不是使用这个方法。这样面板可以过渡渐隐,而不是只是被立即删除。
TranceScreen:用于调试过程中,所有面板打印相关详情。

Camera2D

我们已经在前面的章节讨论过Camera2D类的用法。现在让我们详细探讨其属性和方法。

我们已经在前面的章节讨论过Camera2D类的用法。现在让我们详细探讨其属性和方法。

CurrentSize:表示目前的camera视图大小。表示为size*(1 /Zoom)。
MaxPosition MinPosition:相机最左和最右边的位置。如果这两个值是相同的,那么将不会有任何显示,除非,你重写该方法。
MaxRotation和MinRotation:它代表一个camera最大最小可以旋转的角度。
MaxZoom和MinZoom:表示camera的变焦的范围。
MoveRate: camera移动速度
Position:当前camera的位置
Rotation:当前camera的旋转角度
RotationRate:表示camera在一次update过程中能旋转的角度
ScreenCenter:表示面板的中心
ScreenHeight和ScreenWidth:表示当前面板的高度和宽度。
TargetPosition,TargetRotation和TargetZoom:camera要达到的目标值。检查这些值对当前值,如果需要则进行必要的更新。
TrackingBody:表示需要跟踪的FarseerPhysics body。该body一般是在屏幕的中间。
Zoom 和ZoomRate:Zoom 代表了当前的缩放级别和ZoomRate表示Zoom的速率。
ConvertScreenToWorld:屏幕上的位置,它将转换到相机(世界)的的位置
ConvertWorldToScreen:将世界上的位置转换到屏幕上的位置。
CreateProjection:这将创建相机的投影矩阵,当每次屏幕分辨率或宽高比变化时,我们需要调用此方法。
MoveCamera:以一个指定值移动camera
ResetCamera:重置camera到它的默认值。
Resize:应用旋转,位置和缩放值到camera。
SmoothResetCamera:重置默认值,camera位置从当前位置逐渐渐变到默认值。
ZoomIn和ZoomOut的:分别让相机zoomin 或zoomout。

请大家关注下一节:

深入了解windowsphone7 游戏底层原理(续1)

我将在最后一节中放出所有源码与实例,毫无保留。

我希望你能喜欢我的文章!如果你有更多想法,请到卤面网wp7开发论坛(codewp7.com)问答区联系我,我会很高兴知道你在想什么。同时wp7交流QQ群172765887中,也能找到我的身影,感谢大家

平衡球游戏开发教程(四)--深入了解WP7游戏底层原理相关推荐

  1. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  2. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  3. 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...

  4. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩 纹理映射技术 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  5. iPhone游戏编程教程一步步教你游戏开发

    这是此系列教程的第一部分,我将从最基本开始教大家怎样编写一个iPhone游戏.众所周知,OpenGL和Quartz的学习不是那么简单的.本教程将简化开发的过程而不会使用这两种技术.我们将使用UIIma ...

  6. 羊了个羊游戏开发教程1:堆叠牌的拾取

    本文首发于微信公众号: 小蚂蚁教你做游戏.欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识. 嗨!大家好,我是小蚂蚁. 最近"羊了个羊"小游戏爆火.一下子让想做微信 ...

  7. Cocos Creator游戏开发教程 学习笔记

    学完提问几个问题吧: position的锚点位置数值原点在哪里? 因为position是相对坐标,所以原点是父节点的锚点 .所以Canvas下面的直属节点原点就是世界坐标系的原点Canvas的锚点. ...

  8. 2D平台类游戏开发教程(翻译)

    这是一篇实现2D平台类游戏的技术指导文章,原文地址:http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-pla ...

  9. 塔防游戏制作教程(四)

    嗨!大家好,我是小蚂蚁.今天我们继续分享制作一个塔防小游戏的第四节,如何实现炮塔的升级和出售功能. 如何实现炮塔的升级 在炮塔升级时,我们简单地做一些属性的提升以及外表的变化,例如当炮塔升级后,攻击速 ...

  10. 【Cocos Creator游戏开发教程】仿微信趣味画赛车小游戏(二)物理刚体关节

    [Cocos Creator游戏开发教程]仿微信趣味画赛车小游戏(一)前言,界面UI 项目地址已放到 github 上,需要的小伙伴可自行下载. 这节我们讲一下车子的物理刚体关节. 我在项目中添加了一 ...

最新文章

  1. 拥抱高效、拥抱 Bugtags 之来自用户的声音(三)
  2. 二维稳态热传导 代码实现_常用振动激励方式:稳态正弦 、瞬态和随机激振
  3. QT的QSqlQueryModel类的使用
  4. 深入理解Activity启动流程(二)–Activity启动相关类的类图
  5. 6条shell小技巧,让脚本显得不再业余
  6. 关于mapper接口与mapper.xml文件在同包运行找不到问题解决
  7. [MVC4]初识.NET MVC4
  8. 大型架构之科普工具篇
  9. office2016 visio2016 安装问题
  10. Mybatis CRUD操作和多表查询
  11. windows 上面如何解压rar 文件
  12. 电脑版微信多开,只需要三步
  13. Spark大数据分与实践笔记(第二章 Spark基础-03)
  14. Educational Codeforces Round 87 (Rated for Div. 2)A. Alarm Clock
  15. Android开发xposed,用Android Studio开发Xposed插件项目步骤
  16. Win11系统注销在哪?Win11系统注销的方法
  17. 强化学习蘑菇书Easy RL第二、三章学习(马尔可夫决策过程、表格型方法)
  18. Jmeter5.x性能压测工具入门介绍
  19. Windows下访问Ubuntu虚拟机中的Samba服务器遇到“\\192.168.71.128无法访问,您可能没有权限访问网络资源。请与这台服务器的管理员联系以查明您是否有访问权”的问题
  20. 团队管理的四大挑战——用人篇

热门文章

  1. html 文本阅读器,在HTML中,我如何才能获得仅供屏幕阅读器(即盲人)访问的文本?...
  2. 使用SNMP端口查找在Catalyst交换机的MAC地址
  3. 滴滴青菜拼车产品体验报告
  4. Duplicate entry '1' for key 'PRIMARY'(报错)
  5. mac修改用户名,用户主目录名
  6. 浏览器Disk Cache磁盘缓存及其协商缓存、及原生App和浏览器实现缓存的差异
  7. WPF养老保险系统日志_登入界面
  8. 提取音乐用什么软件哪个好 1
  9. Android聊天软件界面开发
  10. [论文阅读]Functional Dependencies for Graphs 阅读笔记