C# 简单二维运动
我最近开始和XNA一起开发。我可以说我有更多的基本编程语言,但没有什么特别的 作为我在XNA的第一个项目。我想创建一个简单的2D平台,但目前,我正在尝试简单的运动 我有3个向量(位置、速度、加速度)和一个简单的整数(最大速度): 然后,我在XNA框架的更新方法中得到了一些简单的代码,以使我的sprite移动:C# 简单二维运动,c#,xna,2d,physics,C#,Xna,2d,Physics,我最近开始和XNA一起开发。我可以说我有更多的基本编程语言,但没有什么特别的 作为我在XNA的第一个项目。我想创建一个简单的2D平台,但目前,我正在尝试简单的运动 我有3个向量(位置、速度、加速度)和一个简单的整数(最大速度): 然后,我在XNA框架的更新方法中得到了一些简单的代码,以使我的sprite移动: // Horizontal Movement if (KeybState.IsKeyDown(Keys.Right)) { if (vel.X < maxVel) vel.X +=
// 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;
}
//水平运动
if(KeybState.IsKeyDown(Keys.Right))
{
如果(X级<最大级)
等级X+=附件X*缩短时间;
位置X+=水平X*缩短时间;
}
如果(!KeybState.IsKeyDown(key.Right)和&vel.X>20)
{
位置X+=水平X*缩短时间;
等级X-=1;
}
所以,当我按下向右箭头键时,精灵开始移动。速度从20开始,在加速和游戏时间的帮助下,增长到maxVel(50),然后当右键被释放时,它失去了速度。它工作得很好
但是当我尝试对左箭头键做同样的事情时,我做的是pos-=而不是pos+=,这会降低pos.X值,但它使用恒定速度(20),而不是将其增加到50
我认为我没有足够的智慧去思考为什么会发生这种情况,所以我非常感谢更好的开发人员的帮助
请注意,我不想查看其他任何地方,我想让我的版本按预期工作,因此直接回答是最好的。您的条件
if (!KeybState.IsKeyDown(Keys.Right) && vel.X > 20)
每次未按下右箭头(包括按下左箭头)且速度高于20时,都将为真,因此您的代码会立即将速度降低回20
您需要检查是否未按任何键(或至少未按任何箭头键)以降低速度。最简单的方法是:
if (!KeybState.IsKeyDown(Keys.Right) &&
!KeybState.IsKeyDown(Keys.Left) &&
!KeybState.IsKeyDown(Keys.Up) &&
!KeybState.IsKeyDown(Keys.Down) && vel.X > 20)
你能给我们看一下你用的左箭头键的代码吗?谢谢,我已经完成了你说的,加上一个方向向量。无论如何,让它按预期工作:)
if (!KeybState.IsKeyDown(Keys.Right) &&
!KeybState.IsKeyDown(Keys.Left) &&
!KeybState.IsKeyDown(Keys.Up) &&
!KeybState.IsKeyDown(Keys.Down) && vel.X > 20)