繁体   English   中英

简单的2D运动[关闭]

[英]Simple 2D Movement [closed]

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

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

请注意,我不想在其他任何地方查看,我想使我的版本按预期工作,因此直接回答是最好的。

你的情况

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM