XNA改变绘图当玩家使用键盘



有人能给我一个例子吗?如何更改用户按下键盘时绘制的纹理?

基本上我有5个精灵图像stood stillupdownleftright

我的第一次尝试是在更新方法中设置布尔条件,例如如果按下keys.left,矩形向左移动,而对于绘制向左移动的字符的方法,我的问题是stood still的纹理在不同方向移动时不会消失并重叠。

我试过其他语句等,但我坚持基本动作。

所以这是非常伪的代码,但这是如何实现的基本方法

首先,我们创建一个类,它包含了我们关于玩家的所有信息。你也可以添加健康,分数等。

class Player
{
Texture2D Sprite;
Vector2 Position;
Vector2 Velocity;
static const float PlayerSpeed = 5;
}

这里重要的是位置(精灵的左上角)、速度(每秒的变化量)和精灵,这正是我们想要使用的纹理。当然,最好只使用一个播放器纹理,并相应地修改源rect。

现在我们的输入处理。

void OnKeyboard(GameTime aGameTime, KeyArg aKey)
{
if(aKey == Keys.Left)
{
mPlayer.Velocity = new Vector2(-Player.PlayerSpeed, 0);
mPlayer.Sprite = TextureManager.GetTexture("left_player");
}
else if(aKey == Keys.Right)
{
mPlayer.Velocity = new Vector2(Player.PlayerSpeed, 0);
mPlayer.Sprite = TextureManager.GetTexture("right_player");
}
mPlayer.Position += aGameTime.EllapsedMiliseconds * mPlayer.Velocity;
}

在这里,我们只需检查按下了哪个键,修改速度并更改玩家的当前精灵。最后一行是最重要的一行,它使用帧经过时间修改的速度来修改玩家的位置。这样,即使帧速率不一致,你也可以稳定地移动。

void Render()
{
Sprite.Draw(mPlayer.Sprite, mPlayer.Position);
}

最后渲染,如何渲染一个精灵应该是清楚的,这里你只需要使用设置的精灵和位置。还有很多改进的空间,例如最小化纹理开关,使用alpha处理精灵,以及最重要的一点——正确处理键盘。你需要稳定地调整位置,但根据你的执行方式,移动可能与关键帧重复率有关,这可能是不希望的。

最新更新