使用XNA引擎做3D赛车小游戏..(4)
汽车可以向前进。。当然也应该有向左或向右的功能。。这即是本节的主题……
- 首先我们增加一个方法CheckInput,在Game1中,用于捕捉左右方向键的按下事件:
-
private void CheckInput()
-
{
-
KeyboardState newState = Keyboard.GetState();
-
-
if (newState.IsKeyDown(Keys.Left))
-
{
-
car.carLocation = 2.5f;
-
}
-
if (newState.IsKeyDown(Keys.Right))
-
{
-
car.carLocation = -2.5f;
-
}
-
}
-
- 在Update方法中调用CheckInput方法:
-
CheckInput();
-
运行看看,此时汽车已经能左右切换跑道了。
只不过,一下切换过来有点奇怪 - -……
因此,下面继续对其进行修改。。
- 为Car类增加以下属性:
-
public float carSpeed = 10.0f; // 车左右移动的速度
-
public bool movingLeft = false; // 车是否左移
-
public bool movingRight = false; // 车是否右移
-
- 在Car类中添加Update方法,用于更新移动标记与速度:
-
public void Update(GameTime gameTime)
-
{
-
// gameTime.ElapsedGameTime为相邻两次调用Update方法的时间间隔
-
double elapsed = gameTime.ElapsedGameTime.TotalSeconds;
-
if (movingLeft) // 车是否向左移动
-
{
-
carLocation += (float)(carSpeed * elapsed);
-
if (carLocation >= 2.5f) // 移到2.5f,左移完成
-
{
-
movingLeft = false; // 修改左移标志为假,表示停止左移
-
carLocation = 2.5f;
-
}
-
}
-
if (movingRight)
-
{
-
carLocation -= (float)(carSpeed * elapsed); // 同上
-
if (carLocation <= -2.5f)
-
{
-
movingRight = false;
-
carLocation = -2.5f;
-
}
-
}
-
}
-
- 修改Game1类中的CheckInput方法,使其支持左右上下方向键:
-
private void CheckInput()
-
{
-
KeyboardState newState = Keyboard.GetState();
-
-
if (newState.IsKeyDown(Keys.Left)) // 是否方向左键被按下
-
{
-
car.movingLeft = true; // 左移
-
car.movingRight = false;
-
}
-
if (newState.IsKeyDown(Keys.Right)) // 是否方向右键被按下
-
{
-
car.movingLeft = false;
-
car.movingRight = true; // 右移
-
}
-
-
if (newState.IsKeyDown(Keys.Down)) // 是否下箭头键被按下
-
{
-
RoadSpeed--; // 减少汽车速度
-
if (RoadSpeed <= 10)
-
RoadSpeed = 10; // 允许汽车速度的最小值
-
}
-
if (newState.IsKeyDown(Keys.Up)) // 是否上箭头键被按下
-
{
-
RoadSpeed++; // 增加汽车速度
-
if (RoadSpeed >= 100)
-
RoadSpeed = 100; // 允许汽车速度的最大值
-
}
-
}
-
- 在Game1类的Update方法中的CheckInput()后面调用car的Update方法:
-
car.Update(gameTime);
-
于是汽车就可以调速 向左向右切换时也较为自然了 - -