对于我的计算机科学A-Level编程项目,我正在开发一个游戏,我想包括一个加速和动量系统类似于创世纪声波游戏。我已经创建了一个加速系统,但由于某种原因,它只允许我的角色向左移动,而不是向右。由于明显的原因,我需要它向右移动。
下面是我的代码。它是用C#写的:
float acceleration_speed = 0.46875f;
float deceleration_speed = 5.0f;
float friction_speed = 0.66875f;
float top_speed = 60.0f;
float horizontalMove = 0f;
if (Input.GetAxisRaw("Horizontal") < 0) //if player is pressing left
{
if (horizontalMove > 0.0f)
{
horizontalMove -= deceleration_speed; //decelerate
if (horizontalMove <= 0.0f)
{
horizontalMove = -0.5f;
}
}
else if (horizontalMove > -top_speed)
{
horizontalMove -= acceleration_speed; //accelerate
if (horizontalMove <= -top_speed)
{
horizontalMove = -top_speed; //impose top speed limit
}
}
}
if (Input.GetAxisRaw("Horizontal") > 0) //if player is pressing right
{
if (horizontalMove < 0.0f) //if moving to the left
{
horizontalMove += deceleration_speed; //decelerate
if (horizontalMove >= 0.0f)
{
horizontalMove = 0.5f;
}
else if (horizontalMove < top_speed)
{
horizontalMove += acceleration_speed; //accelerate
if (horizontalMove >= top_speed)
{
horizontalMove = top_speed; //impose top speed limit
}
}
}
}
if (Input.GetAxis("Horizontal") == 0)
{
horizontalMove -= friction_speed; //decelerate
if (horizontalMove <= 0)
{
horizontalMove = 0.0f;
}
}
我使用Input.GetAxisRaw告诉程序玩家是向左移动(-1)还是向右移动(1),或者根本不移动(0)。
我创建了这样一个条件:如果Input.GetAxisRaw〈0(即向左移动),系统将向那个方向加速角色;如果Input.GetAxisRaw〉0(即向右移动),系统将向那个方向加速角色;如果角色已经在移动,系统将产生摩擦力来减速角色,直到它的速度为0;如果玩家角色根本没有移动,则什么也不会发生。
这段代码在我按住左边的输入不做任何事情的时候有效,但是当我按住右边的输入时,它就不起作用了,因为玩家角色根本不动。
2条答案
按热度按时间q7solyqu1#
比较你的
if (Input.GetAxisRaw("Horizontal") < 0)
块和if (Input.GetAxisRaw("Horizontal") > 0)
块的代码,你会发现你把else if
块放错地方了。它在if (horizontalMove < 0.0f) { ... }
里面,所以如果你的角色没有向左移动,它永远不会触发。2j4z5cfb2#
你错过了
}
我建议重写它,这样它就可以使用-1和1输入。因为你会一遍又一遍地重复相同的代码。