简单的 2D 运动

本文关键字:运动 2D 简单 | 更新日期: 2023-09-27 18:32:47

我最近开始使用XNA进行开发。我可以说我有更多的基本编程语言,但没有那么特别。

作为我与XNA的第一个项目。我想创建一个简单的2D平台游戏,但目前,我正在尝试简单的移动。

我有 3 个向量(位置、速度、加速度(和一个简单的整数(最大速度(:

Vector2 pos = new Vector2(200, 200);
Vector2 vel = new Vector2(20, 20);
Vector2 acc = new Vector2(30, 30);
int maxVel = 50;

然后,我有一些简单的代码,可以进入XNA框架的Update方法,以使我的精灵移动:

// Horizontal Movement
if (KeybState.IsKeyDown(Keys.Right))
{
if (vel.X < maxVel)
vel.X += acc.X * curTime;
pos.X += vel.X * curTime;
}
if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20)
{
pos.X += vel.X * curTime;
vel.X -= 1;
}

所以,当我按向右箭头键时,角色开始移动。速度从 20 开始,在加速度和经过的游戏时间的帮助下,增长到 maxVel(即 50(,然后当释放右键时,它会失去速度。它工作得很好。

但是当我尝试对左箭头键做同样的事情时,我正在执行 pos -= 而不是 pos+=,这会减少 pos。X 值,但它使用恒定速度 (20( 而不是将其增加到 50。

我认为我不够聪明,无法思考为什么会发生这种情况,因此非常感谢更好的开发人员提供一些帮助。

请注意,我不想看其他任何地方,我想让我的版本按预期工作,所以直接的答案是最好的。

简单的 2D 运动

您的状况

if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20)

每次不按右箭头(包括按下左箭头时(并且速度高于 20 时 vill 为 true,因此您的代码会立即将速度降低回 20

您需要检查是否没有按下任何键(或至少没有箭头键(来降低速度。 最简单的方法是:

if (!KeybState.IsKeyDown(Keys.Right) &&
    !KeybState.IsKeyDown(Keys.Left) &&
    !KeybState.IsKeyDown(Keys.Up) &&
    !KeybState.IsKeyDown(Keys.Down) && vel.X > 20)