`
ijavagos
  • 浏览: 1241877 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【WP7进阶】——XNA游戏精灵的动画

 
阅读更多

通过上面几节的学习,慢慢的掌握了精灵的一些基本常识,但是我们知道游戏中游戏精灵都是富于表现能力的,并且通过不同的动作或者动画去构造一个游戏。

这篇文章将学习如何使用系列图为游戏精灵添加动画效果,以下面这一系列图为例,将其分割显示:

--这个图片是偷 深蓝 的

这是一张png图片,我们还是需要把它加载到纹理图形中,可以考虑如何在精灵位图上轮流获得独立的精灵帧。以下编写这个精灵帧所要先得到的信息:

  • 精灵位图中每个单独图像(帧)的宽和高
  • 精灵位图的行与列的总数
  • 指示接下来精灵位图中将要绘制精灵帧在精灵位图中所处的行与列的位置索引

上面的那张精灵位图中,每个单独精灵帧的宽和高都是150像素,有10行1列。所以我们要绘制它显示在窗口上,就得从第一个精灵帧开始绘制。而这时候我们就要编写下面的三行代码用来控制精灵帧的切换:

PointframeSize=newPoint(150,150);//每帧的长与高
PointcurrentFrame=newPoint(0,0);//初始化第一帧
PointsheetSize=newPoint(10,1);//定义一个10列1行的point,本图片一共有一列10个小人
//如果有多列则相应改动后面的1

上篇文章我们有使用SpriteBatch.Draw 的重载方法,其中参数三是一个Rectangle 对象,上篇我们不设置矩形范围,所以给定一个NULL。而本便我们需要使用一个 Rectangle 对象来算出该位置的源矩形。添加下面的代码:

spriteBatch.Begin(SpriteSortMode.FrontToBack,BlendState.AlphaBlend);

spriteBatch.Draw(enemy,
//纹理图像
newVector2((graphics.GraphicsDevice.Viewport.Width/2)-(frameSize.X/2),
(graphics.GraphicsDevice.Viewport.Height
/2)-(frameSize.Y/2)),//将系列图放在屏幕中间播放
newRectangle(
currentFrame.X
*frameSize.X,//当前的帧点的x轴乘以每行移动的宽度得到该矩形从屏幕哪个坐标画
currentFrame.Y*frameSize.Y,//当前的帧点的Y轴乘以每行移动的高度得到该矩形从屏幕哪个坐标画
frameSize.X,//需要画该矩形块的宽度为系列图每格小人物的宽度
frameSize.Y),//需要画该矩形块的高度为系列图每格小人物的高度
Color.White,
0,//旋转图像,按角度旋转图像,0为不旋转,依次类似1、2、3、4、5等
Vector2.Zero,//指定旋转的参照点
1,//缩放比例,这里是按默认比例绽放
SpriteEffects.None,//不翻转图像
0//纹理层深度
);
spriteBatch.End();

如果按照上面的代码写在Draw 里面的话,还是没有动画效果的,因为我们一直重复的上面这张精灵位图的第一帧,为了产生动画,还必须在Update 里面完成状态的更新:

++currentFrame.X;//将下标要画的X坐标剃增,即改变该列的位置向下个位置转移
if(currentFrame.X>=sheetSize.X)//如果下标大于或者等于系列图的当前列的数量
{
currentFrame.X
=0;//重新将下标初始化为0
++currentFrame.Y;//将将下标要画的Y坐标剃增,即改变该列的位置向下个位置转移
if(currentFrame.Y>=sheetSize.Y)//如果当前的要跳的行大于或等于该系列图的总行数
{
currentFrame.Y
=0;//重新将其初始化为0
}
}

这个时候,可以ctrl+F5 运行游戏,看看效果。

尽管游戏看起来动画效果不错。但有没有发现这个动画的轮换速度也太快了,因为游戏每秒更新30次状态这个己经是很快的速度了。为了使其能够按照我们要求的速度进行精灵位图切换,我们可以在Update 的时候做下小手脚,使其动画速度为可控状态,看代码:

inttimeSinceLastFrame=0;//用来追踪上一帧之后经过多少时间
intmillsecondPreFrame=100;//用来指定在移动当前的帧索引之前想要等待的时间隔

修改后的Update 方法,应该是这样子的:

protectedoverridevoidUpdate(GameTimegameTime)
{
//Allowsthegametoexit
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
this.Exit();

timeSinceLastFrame
+=gameTime.ElapsedGameTime.Milliseconds;//每次累加游戏的时间
if(timeSinceLastFrame>millsecondPreFrame)//如果大于需要等待的时间
{
timeSinceLastFrame
-=millsecondPreFrame;//重新加累加的时间初始化
++currentFrame.X;//将下标要画的X坐标剃增,即改变该列的位置向下个位置转移
if(currentFrame.X>=sheetSize.X)//如果下标大于或者等于系列图的当前列的数量
{
currentFrame.X
=0;//重新将下标初始化为0
++currentFrame.Y;//将将下标要画的Y坐标剃增,即改变该列的位置向下个位置转移
if(currentFrame.Y>=sheetSize.Y)//如果当前的要跳的行大于或等于该系列图的总行数
{
currentFrame.Y
=0;//重新将其初始化为0
}
}
}

//TODO:Addyourupdatelogichere

base.Update(gameTime);
}

这时,我们再来看看这个效果:

下一篇将会学习到关于用户输入和碰撞检测方面的知识。

分享到:
评论

相关推荐

    XWinForm(XNA2.0)——XNA虚拟WinForm窗体

    XNA原本是为了游戏开发设计的,它提供了高效的游戏编程工具和环境,但不直接支持传统的Windows桌面应用程序开发,尤其是复杂的图形用户界面(GUI)。XWinForm的出现填补了这一空白,使得开发者能够利用XNA的强大功能...

    XWinForm——XNA虚拟WinForm窗体

    XNA原本是一个由微软开发的游戏开发框架,主要用于构建Windows、Xbox 360和Zune平台上的2D和3D游戏。然而,XWinForm扩展了XNA的功能,使其能够处理图形用户界面(GUI)任务,这在原始的XNA框架中是不支持的。 XNA...

    (源码)基于XNA框架的动画精灵管理系统.zip

    本项目是一个基于Microsoft XNA框架的动画精灵管理系统,主要用于开发2D游戏中的动画精灵(Sprites)。项目包含了精灵的自动化移动、用户控制、碰撞检测、按钮管理等功能,适用于需要复杂动画和交互的游戏开发。 ##...

    wp7 xna开发最强教程

    ### wp7 XNA开发最强教程知识点详解 #### 一、XNA概述 - **XNA含义**:XNA是微软推出的一款游戏开发框架,其中X代表跨平台(Cross-platform),N代表下一代(Next-generation),A代表架构(Architecture)。XNA的...

    xna桌面精灵(2D)

    总结来说,【XNA桌面精灵(2D)】展示了XNA框架用于创建2D游戏或应用的基本原理,包括图形渲染、资源管理、事件处理和用户交互。通过C#编程,开发者构建了一个具有动态特性的桌面玩具,让用户能够直接在桌面上与之互动...

    WP7 XNA游戏开发声音控制编程

    本教程将深入探讨如何在WP7 XNA游戏中进行声音控制编程。 首先,我们需要了解XNA中的声音类库。XNA提供了`Microsoft.Xna.Framework.Audio`命名空间,其中包含了`SoundEffect`和`Song`两个主要的声音类。`...

    XNA 游戏开发资料

    **XNA游戏开发详解** 微软的XNA游戏开发框架是一个为独立游戏开发者和学生提供的一套强大工具,它简化了游戏编程的过程,让开发者能够专注于创新和艺术创作,而不是底层技术细节。XNA的全称是"Xbox Next Generation...

    wp7 xna 投石车大战源码

    【标题】"wp7 xna 投石车大战源码"是针对Windows Phone 7平台的一个游戏开发示例,利用XNA框架构建。这个源码项目对于初学者来说是一个很好的起点,因为它涵盖了XNA框架的基本要素,可以帮助开发者快速掌握XNA编程的...

    XNA4.0骨骼动画源代码(官网)

    XNA4.0是一款由微软开发的游戏开发框架,它提供了丰富的功能,使开发者能够便捷地创建跨平台的游戏。其中,骨骼动画是3D游戏和应用中的一个重要组成部分,它赋予了虚拟角色和物体动态表现力。在XNA4.0中,骨骼动画有...

    wp xna纸牌游戏源码

    《WP XNA纸牌游戏源码深度解析》 在当今的移动应用开发领域,Windows Phone (WP) 平台以其独特的魅力吸引着开发者们。XNA框架是微软为游戏开发提供的一个强大工具,它简化了游戏开发过程,使得开发者能够专注于游戏...

    XNA 游戏编程学习总结2D与3D实现

    XNA游戏编程是一种基于.NET Framework的游戏开发框架,由微软公司推出,主要针对Windows、Xbox 360和Zune等平台。它为开发者提供了一种高效、便捷的方式来创建2D和3D游戏。在“XNA游戏编程学习总结2D与3D实现-2D源码...

    XNA小游戏(是男人就坚持一百秒)

    游戏中的枫叶下落动画和角色移动可能都是通过XNA的精灵(Sprite)类实现的,该类允许开发者方便地绘制和管理2D图像。同时,碰撞检测可能采用了XNA提供的几何形状类,如Rectangle或Circle,来判断角色与枫叶之间的...

    6个WP7小游戏

    标题中的“6个WP7小游戏”指的是针对Windows ...总之,这个压缩包为想要学习WP7游戏开发的人提供了宝贵的学习材料,通过实践这些项目,不仅可以掌握C#编程语言和XNA Framework,还能深入了解移动游戏开发的各个方面。

    xna游戏快速入门框架

    - **动画和精灵**:如何管理游戏中的动画和精灵(Sprite)。 - **碰撞检测**:理解基本的几何碰撞检测算法,以便在游戏中实现物体间的交互。 - **物理模拟**:简单物理规则的实现,如重力、摩擦力等。 - **游戏状态...

    Direct 3D与XNA游戏开发源码

    Direct 3D与XNA是两个在游戏开发领域至关重要的技术。Direct 3D是由微软开发的图形应用程序接口(API),它允许程序员直接控制硬件进行3D图形渲染,从而实现高性能的游戏和图形应用。而XNA则是一个面向游戏开发者的...

    XNA动画示例(人物行走)

    《XNA动画示例——深度解析人物行走机制》 XNA框架是一款由微软开发的用于游戏开发的开源软件,它为开发者提供了强大的2D和3D图形渲染能力,以及音频处理和游戏输入等功能。在XNA中,动画是游戏开发中的重要组成...

    Windows Phone 7 wp7 官方中文教程+例子

    全书206页,涵盖了Window Phone 7 开发基础,Silverlight 交互开发和XNA 游戏开发。本文件包含例子,pdf版本,方便在离线的时候学习 以下是本书目录 Window Phone 7 开发基础: 第一章 Windows Phone 7 智能型手机 ...

    xna游戏案例集合

    《XNA游戏案例集合》是针对使用XNA框架开发游戏的一个资源库,它包含了各种游戏设计的实例,旨在帮助开发者理解和应用XNA技术。XNA是Microsoft推出的一种用于创建跨平台游戏的开源开发环境,支持Windows、Xbox 360...

Global site tag (gtag.js) - Google Analytics