XNA那些事二 舞动的精灵(上)

什么是精灵,这绝对不是XNA特有的概念,在FLASH等简单的游戏框架当中都有这个概念,精灵是一个游戏当中可移动的有动画效果的元素。那么举一个最简单的例子。

举一个最简单的例子,植物大战这个游戏大家都玩过吧,那么这个游戏场早就冰刀中哪些元素是精灵呢?僵尸、植物、阳光、后面的小车都有一个动画元素,那么无疑他们也都是精灵。

好概念就说到这里,如果在XNA的世界里绘制一个精灵呢,其实非常简单,依旧新建一个XNA GAME STUDIO 4.0的工程,名字就叫GAME1吧,咱们之前在框架介绍当中已经说过了GAME1这个工程,但是还有一个工程叫GAME1CONTENT这个他就是这个GAME的资源工程,向这个工程添加文件非常简单

读者可以上图另存一下,然后复制,点中GAME1CONTENT然后直接CTRL+V就可以了把这个资源包含到这个游戏里面去了,怎么样挺神奇的吧。

那么接下来我们应该如何来绘制这个图片呢?

很简单在

1 GAME1类当中添加两个个类变量

public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D texture1;//存放图片的对象

Vector2 spritePosition1=new Vector2(0, 0);//绘制精灵的位置

2 在LoadContent方法中把图版载入进来。

protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.

spriteBatch = new SpriteBatch(GraphicsDevice);

texture1 = Content.Load<Texture2D>("GameThumbnail");

}

接下来在Draw方法中把这个精灵这样画出来。

protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

// Draw the sprite.

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

spriteBatch.Draw(texture1, spritePosition1, Color.White);//在spritePosition1的位置画texture1
spriteBatch.End();

base.Draw(gameTime);

}

OK再运行一下你的程序看在出现在左上角的小图片了吧。就这么简单。

那么其实一个静态的图片真的算不上是精灵的感觉,那么我们想想怎么让这个精灵动起来来吧。

在这面程序的基础上再添加一个类变量

public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D texture1;
Vector2 spritePosition1new Vector2(0, 0);//绘制精灵的位置;
Vector2 spriteSpeed1 = new Vector2(50.0f, 50.0f);//精灵的速度。

然后添加这样一个函数

void UpdateSprite(GameTime gameTime, ref Vector2 spritePosition, ref Vector2 spriteSpeed)
{
// Move the sprite by speed, scaled by elapsed time.
spritePosition +=
spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;//根据游戏运行时间改变精灵的位置,大家看等式的右边(float)gameTime.ElapsedGameTime.TotalSeconds就是速度乘以时间再加上原来的位置,就是现在的位置这是基本的几何原理。

int MaxX =
graphics.GraphicsDevice.Viewport.Width - texture1.Width;//graphics.GraphicsDevice.Viewport.Width这个是屏幕的宽度精灵最大的X位置不能超过屏幕
int MinX = 0;
int MaxY =
graphics.GraphicsDevice.Viewport.Height - texture1.Height;//同上
int MinY = 0;

// Check for bounce.
if (spritePosition.X > MaxX)
{
spriteSpeed.X *= -1;//如果精灵超出屏幕宽度范围则X轴的速度反向。
spritePosition.X = MaxX;
}

else if (spritePosition.X < MinX)
{
spriteSpeed.X *= -1;//同上
spritePosition.X = MinX;
}

if (spritePosition.Y > MaxY)
{
spriteSpeed.Y *= -1;;//如果精灵超出屏幕高度范围则Y轴的速度反向。

spritePosition.Y = MaxY;
}

else if (spritePosition.Y < MinY)
{
spriteSpeed.Y *= -1;//同上
spritePosition.Y = MinY;
}

}

然后在UPDATE方法中调用上面这个函数更新精灵的位置。

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
ButtonState.Pressed)
this.Exit();

// Move the sprite around.
UpdateSprite(gameTime, ref spritePosition1, ref spriteSpeed1);//更新精灵位置
base.Update(gameTime);
}

好了再运行这个游戏看到了一个会动的精灵了是不是?好让咱们下次更深入的了解一下精灵!

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值