首页 文章

简单的2D运动[关闭]

提问于
浏览
0

我最近开始使用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 .

我认为我不够聪明,无法思考为什么会发生这种情况,所以来自更好的开发者的一些帮助将非常感激 .

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

1 回答

  • 0

    你的病情

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

    每次没有按下右箭头(包括按下左箭头时)并且速度高于20时,该值为true,因此您的代码会立即将速度降低到20

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

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

相关问题