Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单二维运动_C#_Xna_2d_Physics - Fatal编程技术网

C# 简单二维运动

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 +=

我最近开始和XNA一起开发。我可以说我有更多的基本编程语言,但没有什么特别的

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

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

然后,我在XNA框架的更新方法中得到了一些简单的代码,以使我的sprite移动:

// 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)