【发布时间】:2018-07-19 12:57:37
【问题描述】:
我正在尝试制作汽车驾驶脚本,但汽车只能在按下E 后才能移动...
条件:
(Input.GetKey(KeyCode.E))
我尝试过的:
bool PersonInCar = false;
PersonInCar=(Input.GetKey (KeyCode.E))||(PersonInCar==true)
if (PersonInCar) {
【问题讨论】:
我正在尝试制作汽车驾驶脚本,但汽车只能在按下E 后才能移动...
条件:
(Input.GetKey(KeyCode.E))
我尝试过的:
bool PersonInCar = false;
PersonInCar=(Input.GetKey (KeyCode.E))||(PersonInCar==true)
if (PersonInCar) {
【问题讨论】:
如果(根据您的标题)您的意图是让变量在您的 条件 为真后为真,然后永远保持真,您只需要:
PersonInCar = PersonInCar || Input.GetKey (KeyCode.E));
Input.GetKey (KeyCode.E)) 第一次变为真,PersonInCar 将变为真。那么无论 what 值 Input.GetKey (KeyCode.E)) 之后给出,PersonInCar 都将保持为真。
您还需要确保以其他方式将其显式更改回 false,除非您出于某种原因需要这样做。换句话说,如果您在当前位置创建它,它将始终在那里初始化。您可能希望将其移出该范围(例如在构造时初始化的类的成员变量)。
您会注意到我还更改了您对 true 的检查 - 您通常不应该将布尔值与 true 或 false sice 进行比较,因为它们 意味着 被视为条件。有关更多详细信息,请参阅Is there ever a reason to write "if (myBoolean == true)" in a JavaScript conditional?。
如果相反(根据您对评论的可能解释)您希望汽车仅在 有人在其中并且按下键时移动,那很简单:
if PersonInCar && Input.GetKey (KeyCode.E)) {
WhateverDrivingEntails();
}
【讨论】:
bool PersonInCar = false 声明了布尔值,然后我输入了PersonInCar = PersonInCar || Input.GetKey (KeyCode.E));。
您正在将 bool 值重置为 false(假设 PersonInCar 是在条件之前本地声明的)。
将 PersonInCar 设为全局范围(类的成员)
【讨论】:
这里不需要任何变量,如果你想让你的车在按下 E 后总是开车,请使用以下解决方案:
if (Input.GetKey (KeyCode.E))
{
Drive()
}
此外,我建议订阅按下按钮事件,而不是直接识别按下的键。
【讨论】:
//首先,在表单构造函数或表单加载时注册KeyDown事件
this.KeyDown += new KeyEventHandler(OnKeyDown);
现在编写一个处理方法来处理按键事件。
private void OnKeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.E:
DriveTheCar();
break;
case Keys.C: // It could be any key that end the application
Application.Exit();
break;
}
}
最后是一种驾驶汽车的方法。
private void DriveTheCar()
{
if (PersonInCar) {
// drive the car
}
}
【讨论】:
if(PersonInCar)?我的意思是,如果我们输入DriveTheCar,是不是意味着PersonInCar就是true(即E键被按下了)?
C# 解决方案:您可以使用 Linq。如果 PersonInCar 为 true,它将忽略其余部分。
bool PersonInCar = false;
PersonInCar = !PersonInCar? (PersonInCar || (Input.GetKey (KeyCode.E))): PersonInCar;
【讨论】: