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

【WP7进阶】——XNA游戏精灵放大、旋转、层深度

 
阅读更多

游戏很多都是涉及到操纵游戏精灵的相关知识,本篇还是根据游戏精灵的一些常用知识做的学习,下面是本文大纲:

  • 精灵界面居中
  • 精灵放大并且旋转
  • 纹理的层深度

精灵在界面居中

上篇文章我们为游戏添加一个背景图片,接下来我们希望不让游戏精灵走动了,而是让其在游戏的正中间停靠。

默认Window.ClientBounds这个矩形块可以获得当前设备的宽度和高度-(这里是绝对宽度和高度,无论你屏幕如何旋转它始终获取原始宽高。

而使用graphics.GraphicsDevice.Viewport 获取设备的宽高则是通过上面设置的PreferredBackBuffer 属性获取而来。这个是两者的区别

使精灵界面居中,代码如下:

//这个方法在xbox中可以
//vect=newVector2(
//(Window.ClientBounds.Width/2)-(user.Width/2),
//(Window.ClientBounds.Height/2)-(user.Height/2)
//);
//WindowsPhone7最好使用这个,用这个方法可以精确定位精灵到屏幕的中心点
vect=newVector2(
(graphics.GraphicsDevice.Viewport.Width
/2)-(user.Width/2),
(graphics.GraphicsDevice.Viewport.Height
/2)-(user.Height/2));

运行效果如下:

精灵放大并且旋转

spriteBatch.Draw 有多个重载方法,其中使用以下的重载方法可以实现精灵的放大并且设置其旋转方式:

使用代码如下:

spriteBatch.Draw(user,//要绘制的纹理
vect//绘制图像的左上角坐标
,null//允许您绘制原始图像的一部分,这里使用null
,Color.White//染色颜色
,0//旋转图像,现在使用0
,Vector2.Zero//指定旋转的参照点,现在使用Vector2.Zero
,1.5f//绽放比例,使用1代表按照原始尺寸绘制,1.5f表示放大图像到150%
,SpriteEffects.FlipVertically,//使用SpriteEffects枚举来垂直或水平翻转图像
0//允许您指定图像的层叠次序(哪张图像在其它图像之上),现在使用0
);

运行效果如下:

纹理的层深度

一个游戏会有很多纹理图像,如果当纯以上篇所说的,控制画的位置那是不现实的。而XNA 可以让您为每个图像指定一个层深度,使图像总是能有正确的Z次序。要修改层深度,需要使用SpriteBatch.Begin 方法的另一个重载版本。其中它的重载参数为如下:

SpriteSortMode

定义渲染精灵的排序械,有五个模式

  • Deferred:精灵不会被绘制直到SpriteBatch.End 被调用,然后End 以它们被调用的次序送到图形设备中。在这个模式下,操作多个SpriteBatch 对象时它可以让Draw 调用不会产生冲突。这是默认模式。
  • Immediate:Begin 调用会立即设置图像设备,Draw 调用会立即进行绘制。同一时间只能一个SpriteBatch 对象被使用。这是最快的模式。
  • Texture:和Deferred 模式一样,但是精灵在绘制之前按照纹理进行排序。
  • BackToFront :和Deferred 模式一样,不过精灵按照层深度参数从前往后排序。
  • FrontToBack:和Deferred 模式一样,不过精灵按照层深度从后往前排序。

BlendState

决定精灵颜色怎样和背景色混合,有三个模式:

  • None :不进行颜色混合。
  • AlphaBlend :使用alpha 值进行混合,这是默认模式,并开启透明效果,像之前提到的,如果您有带透明背景的图像,就应该使用AlphaBlend。
  • Additive :将精灵颜色和背景颜色进行混合 。

那行明白上面的原理,我们按照上面给出的意思并且我们将代码的位置调换一下,之后的代码将会是这样:

protectedoverridevoidDraw(GameTimegameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

//TODO:Addyourdrawingcodehere
spriteBatch.Begin(SpriteSortMode.FrontToBack,BlendState.AlphaBlend);//给spriteBatch下命令准备开始动作


//画背景图

//将user按Vector2指定的位置开始画图
//spriteBatch.Draw(user,vect,Color.White);
spriteBatch.Draw(user,//要绘制的纹理
vect//绘制图像的左上角坐标
,null//允许您绘制原始图像的一部分,这里使用null
,Color.White//染色颜色
,0//旋转图像,现在使用0
,Vector2.Zero//指定旋转的参照点,现在使用Vector2.Zero
,1.5f//绽放比例,使用1代表按照原始尺寸绘制,1.5f表示放大图像到150%
,SpriteEffects.FlipVertically,//使用SpriteEffects枚举来垂直或水平翻转图像
0//允许您指定图像的层叠次序(哪张图像在其它图像之上),现在使用0
);

spriteBatch.Draw(background,rect,Color.White);

//停止时打印出stop
spriteBatch.End();//给spriteBatch下命令结束动作
base.Draw(gameTime);
}

从上面的代码看到,背景图在精灵图之后再画,那么以上篇给出的建议是不是背景图会覆盖掉精灵呢?看图示:

代码下载:

游戏DEMO

分享到:
评论

相关推荐

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

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

    XWinForm——XNA虚拟WinForm窗体

    XWinForm的工作原理是,在XNA应用程序中创建一个虚拟的WinForm层,这个层可以在XNA渲染循环中与游戏画面一起更新。这样,开发者就可以在保持游戏性能的同时,利用WinForm控件来创建菜单、设置面板或者其他任何需要...

    wp7 xna开发最强教程

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

    XNA 游戏开发资料

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

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

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

    wp xna纸牌游戏源码

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

    xna桌面精灵(2D)

    【XNA桌面精灵(2D)】是一款基于微软的XNA框架开发的2D应用程序,主要功能是在桌面上创建一个可交互的小精灵角色。通过左键点击,用户可以移动这个小精灵,右键点击则可以切换不同的精灵状态,而传统的ALT+F4快捷键则...

    wp7 xna 投石车大战源码

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

    xna游戏案例集合

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

    Direct 3D与XNA游戏开发源码

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

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

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

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

    【XNA小游戏——“是男人就坚持一百秒”】是一个基于微软XNA框架开发的趣味游戏,它挑战玩家的反应速度和耐力。XNA是一个为游戏开发者提供的一套工具和框架,允许开发者使用C#编程语言来创建跨平台的游戏,包括...

    6个WP7小游戏

    标题中的“6个WP7小游戏”指的是针对Windows Phone 7平台开发的六款小型游戏的源代码项目。Windows Phone 7(简称WP7)是由微软公司推出的一款移动操作系统,主要面向智能手机和平板设备。这个平台为开发者提供了...

    xna游戏快速入门框架

    XNA游戏快速入门框架是一个专为初学者设计的开发平台,旨在帮助用户快速掌握游戏编程的基本概念和技术。这个框架基于Microsoft的XNA Game Studio,它是一个集成开发环境(IDE),支持C#编程语言,用于创建Windows、...

    XNA游戏示例代码

    **XNA游戏示例代码详解** XNA游戏开发框架是由微软公司推出的,旨在简化游戏开发过程,特别是针对初学者和独立开发者。它基于.NET Framework,使用C#编程语言,为Windows、Xbox 360和Zune等平台提供了一套完整的...

    XNA 游戏实例(简单实现)

    XNA游戏框架是微软推出的一款用于开发2D和3D游戏的开源软件开发工具,它主要面向Windows、Xbox 360以及Zune平台。XNA这个名字来源于“eXtended Native Applications”的首字母缩写,其目标是简化游戏编程,让开发者...

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

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

    基于XNA的RPG游戏

    【基于XNA的RPG游戏】是一款利用微软的XNA框架开发的角色扮演游戏。XNA是Microsoft为游戏开发者提供的一种跨平台的游戏开发环境,它支持Windows桌面应用、Xbox 360以及Zune设备,虽然现在已经不再更新,但在学习游戏...

Global site tag (gtag.js) - Google Analytics