【问题标题】:How do I make a bool to true once the condition is met and after the condition is met still stay true?一旦满足条件并且在满足条件后仍然保持真实,如何使布尔值变为真?
【发布时间】:2018-07-19 12:57:37
【问题描述】:

我正在尝试制作汽车驾驶脚本,但汽车只能在按下E 后才能移动...

条件:
(Input.GetKey(KeyCode.E))

我尝试过的:

    bool PersonInCar = false;
    PersonInCar=(Input.GetKey (KeyCode.E))||(PersonInCar==true)

    if (PersonInCar) {

【问题讨论】:

    标签: c# boolean


    【解决方案1】:

    如果(根据您的标题)您的意图是让变量在您的 条件 为真后为真,然后永远保持真,您只需要:

    PersonInCar = PersonInCar || Input.GetKey (KeyCode.E));
    

    Input.GetKey (KeyCode.E)) 第一次变为真,PersonInCar 将变为真。那么无论 whatInput.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();
    }
    

    【讨论】:

    • 只有按住 E 才能移动。我用bool PersonInCar = false 声明了布尔值,然后我输入了PersonInCar = PersonInCar || Input.GetKey (KeyCode.E));
    • @Lucool,这不是你的问题标题所表明的(“仍然保持真实”位)。如果您只想在按下 E 时 开车,我会补充答案。
    • @Lucool:如果您需要进一步的帮助,我建议您澄清您的实际意图。就目前而言,您想要实现的目标似乎有些混乱。
    【解决方案2】:

    您正在将 bool 值重置为 false(假设 PersonInCar 是在条件之前本地声明的)。

    将 PersonInCar 设为全局范围(类的成员)

    【讨论】:

      【解决方案3】:

      这里不需要任何变量,如果你想让你的车在按下 E 后总是开车,请使用以下解决方案:

      if (Input.GetKey (KeyCode.E))
      {
          Drive()
      }
      

      此外,我建议订阅按下按钮事件,而不是直接识别按下的键。

      【讨论】:

      • 这对我不起作用...我试过了,但汽车只是停止了一切。不过感谢您的帮助!
      【解决方案4】:

      //首先,在表单构造函数或表单加载时注册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就是trueE键被按下了)?
      • 哦!来吧,这只是一个取决于应用程序的条件。如果应用程序/游戏需要人坐在车里(对于游戏,我正在考虑这个)。如果不需要,则不需要。
      【解决方案5】:

      C# 解决方案:您可以使用 Linq。如果 PersonInCar 为 true,它将忽略其余部分。

      bool PersonInCar = false;
      PersonInCar = !PersonInCar? (PersonInCar || (Input.GetKey (KeyCode.E))): PersonInCar;
      

      【讨论】:

        猜你喜欢
        • 2021-06-20
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        相关资源
        最近更新 更多