XNA基础(03) 动画与帧率

我们要做的2D和3D游戏离不开动画,那么在XNA中如何实现动画了?

首先,我们来看最简单的动画 —— 移动。

要移动一个Sprite非常简单,我们只需要在Game1.Update()方法中改变Sprite的位置坐标,在下次 Game1.Draw()方法被调用时,屏幕上显示的Sprite就被移动了。

接下来,我们看复杂一点的动画,比如炸弹的爆炸效果,我们可以这样来实现,制作一系列的图片, 每张图片都是爆炸过程中某一状态的表现,如下所示:

上面的20个小图片表现了一个爆炸从初始到结束的所有状态,在实际制作时,我们通常将这些图片按 顺序制作在一张大图中,并且保证大图中每个小图的尺寸是完全一样的。我们称这样的大图为精灵帧序列 图Sprite Sheets。

有了爆炸的Sprite Sheets,我们可以通过在Game1.Update()方法中改变下一个要显示的小图片的索 引(比如[2,3]),再根据索引以及小图片的尺寸计算出该将要显示的小图片在Sprite Sheets中的相对位 置,这样我们就可以在Game1.Draw()方法中将Sprite Sheets中的目标小图片的那块区域绘制出来。你 应该还记得上一篇文章中讲到的Game1.Draw()方法的第三个参数sourceRectangle,用它可以指定我们 要绘制Sprite Sheets的目标区域。

看来,实现一个动画并非难事,真正困难的地方在于如何控制每个动画可以有自己不同的刷新速度, 如何使同一个动画在不同配置的机器上表现相同。这就涉及到帧率问题。

所谓帧率Frame Rate,指的是一秒钟内重新绘制屏幕的次数。XNA框架为我们设置的默认帧率是60fps 。为什么选择60了?因为这是在人的眼睛感觉不到闪烁的情况下显示器最低的刷新频率。我们可以通过基 类Microsoft.Xna.Framework.Game的属性TargetElapsedTime来重新设置它。比如:

base.TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 10);

这表示每隔10ms就重绘一次,即帧率为100fps。

设置帧率为100fps,并不表示就真的会达到100fps的速度,这要看机器的配置如何。当机器的配置不 够时,XNA会自动跳过某些次绘制——即不调用Game1.Draw()方法。我们可以通过GameTime(你还记得 Update和Draw方法都有一个该类型的参数)的IsRunningSlowly属性来检测实际的帧率是否比我们设定的 要小。

时间: 2024-10-24 09:14:20

XNA基础(03) 动画与帧率的相关文章

XNA基础(03) —— 动画与帧率

     我们要做的2D和3D游戏离不开动画,那么在XNA中如何实现动画了?      首先,我们来看最简单的动画 -- 移动.      要移动一个Sprite非常简单,我们只需要在Game1.Update()方法中改变Sprite的位置坐标,在下次Game1.Draw()方法被调用时,屏幕上显示的Sprite就被移动了.      接下来,我们看复杂一点的动画,比如炸弹的爆炸效果,我们可以这样来实现,制作一系列的图片,每张图片都是爆炸过程中某一状态的表现,如下所示:            上

Python基础03 序列

原文:Python基础03 序列 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!  谢谢thunder424纠错   sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说,是对象的集合,但鉴于我们还没有引入"对象"概念,暂时说元素)   序列可以包含一个或多个元素,也可以没有任何元素. 我们之前所说的基本数据类型,都可以作为序列的元素.元素还可以是另一个序列,以及我们以后要介绍的其他对

XNA基础(02) —— 绘制基础

     在所有的图形引擎中,绘制都是最基础的部分,本文将介绍在XNA框架中与绘制相关的基础知识.      在XNA中,我们使用SpriteBatch来进行绘制.首先,我们需要使用SpriteBatch来绘制什么了?是精灵Sprite,对.      那么Sprite通过什么来表现了?是纹理,比如2D纹理Texture2D.嗯,你可以把纹理想象成Sprite的外表,比如我们制作的一幅精灵图片,就是一个纹理.     我们要如何才能把一幅图片加载到我们的游戏中来作为一个Sprite的纹理了?这要

XNA基础(02) 绘制基础

在所有的图形引擎中,绘制都是最基础的部分,本文将介绍在XNA框架中与绘制相关的基础知识. 在XNA中,我们使用SpriteBatch来进行绘制.首先,我们需要使用SpriteBatch来绘制什么了?是精灵 Sprite,对. 那么Sprite通过什么来表现了?是纹理,比如2D纹理Texture2D.嗯,你可以把纹理想象成Sprite的外 表,比如我们制作的一幅精灵图片,就是一个纹理. 我们要如何才能把一幅图片加载到我们的游戏中来作为一个Sprite的纹理了?这要通过素材管道 Content Pi

动画基础:动画的灵魂-动作

今天想跟大家讨论一下动画里的动作.写在此时,我觉得还算合时宜,因为大家基本上都在技术上十分进步,不用再为建模,骨骼之类的问题头疼了.也就是说,大家可以随自己的意愿开始创作短片甚至电影了.希望我的满口胡驺能帮上大家的忙,明确一点这不是什么标准教程,只是个人的一点体会而已. 我们先来看看动作在动画中的一些普遍特点和特性,然后我们以PIXAR的经典短片,也就是他们的LOGO一大一小的两个台灯为例子具体说明一下其在应用中的现实意义. 这里,大家可以去看看迪斯尼早期的电影或者PIXAR等欧美动画.我个人不

XNA基础(01) 游戏循环

当安装好了VS 2008和XNA GameStudio 3.0后,我们就可以开始学习XNA了. 首先,在VS 2008中新建一个XNA GameStudio 3.0项目(选择Windows Game类型),会生成一个最简单 的.可运行的游戏模板. 接下来我们将注意力转移到我们要剖析的重点 -- 从Microsoft.Xna.Framework.Game继承的Game1 类,其代码如下: public class Game1 : Microsoft.Xna.Framework.Game { Gra

Flash基础教程 动画基础知识

Flash 就是一台动画机器.从Flash 最早的版本开始,就支持补间动画--只需要创建两个不同的关键帧,然后让 Flash 自动创建补间动画即可.本书将介绍 Flash 中的一种强大的语言 ActionScript.该书包括了编程,数学,物理等技术,并结合 ActionScript 让物体动起来,这些都是补间动画无法比拟的. 什么是动画? "动画"一词,引用美国传统词典中的解释 使有生命;充满生命力 给予兴趣;给予热情;使有活力 鼓励,激励:使充满精神.勇气或决心;鼓励 怂恿;驱使

从零开始学_JavaScript_系列(五)——dojo(基础,动画移动,重力模拟,动画合并,添加标签)

关于dojo的下载,请查看: https://dojotoolkit.org/download/ 建议下载FULL SOURCE版 如果需要讨论,请评论.或者站内信,我会尽快回复.   (1)加载 ①首先,先设置   <script>      //替代使用data-dojo-config,我们创建一个dojoConfig对象(是个设置)在我们调用dojo.js之前,他们功能相同      //这比通过一大堆设置来说,更易阅读         var dojoConfig = {       

【COCOSBUILDER 开发系列之一】COCOS2DX使用COCOSBUILDER(官方编辑器)完成基础骨骼动画

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocosbuilder/1061.html 关于CocosBuilder 已经成为cocos2d.cocos2dx的官方编辑器,主要作用是场景编辑器.新版本中还已经支持了骨骼动画.[对于CocosBuilder Himi最新书籍中也有讲述] 对于骨骼动画,其实类似动作编辑器,将图的切片组成一帧,然后设置时间轴事件(序列动画),[动编里则是将