【问题标题】:Individual Booleans are returning true, but when checking if both are true returns false单个布尔值返回 true,但在检查两者是否为 true 时返回 false
【发布时间】:2013-04-16 00:03:26
【问题描述】:

所以我有两个布尔值:Player1FinishPlayer2Finish。当玩家专门进入某个点时,他们都会转向true。代码中的一切都正常工作,我对其进行了测试,如果布尔返回 true 用于测试目的,它会打印某些内容:

if(Player1Finish == true){
    print("One");
}
if(Player2Finish == true){
    print("Two");
}
if(Player2Finish && Player1Finish){
    print("Both");
}

但这些是我得到的结果:我的控制台打印出 "One""Two" 但不是 "Both"。我很困惑;我在搞砸什么?我找不到任何基本的布尔问题来回答这个问题,所以如果有答案,如果你指出我正确的方向,我会非常乐意阅读。

除了这个小循环之外,代码中没有其他错误,这是唯一让我无法完成的事情。

【问题讨论】:

  • 你试过调试了吗?
  • 是的,我已经检查了几个脚本中的每个代码片段,确保每个输入都是正确的。这是我缩小调试范围的地方,老实说,我对正在发生的事情感到茫然。
  • 这正是您的代码,还是只是逻辑作用的表示?如所写,在单个线程中,如果您的 Player 变量都为真,您应该得到所有三个输出。
  • 这实际上是确切的代码,除了我出于沮丧在输出中添加了一些脏话。目标不是这个,我只是在弄清楚出了什么问题的同时做了这个简单的事情。
  • 你的打印函数调用什么来产生输出?

标签: c# boolean unity3d


【解决方案1】:

根据我们在您的代码 sn-p 中看到的内容,您应该得到“One”、“Two”和“Both”的输出。既然你不是,我们唯一可以得出的结论是,sn-p 之外的东西正在影响它。

如果你直接在你的代码 sn-p 之前添加这些代码行,你会得到所有三个输出吗?

Player1Finish = true;
Player2Finish = true;

【讨论】:

  • 这是一些非常奇怪的行为。我不明白为什么这很重要,但是将代码更改为此会改变输出吗? if(Player1Finish){ print("One"); } if(Player2Finish ){ print("Two"); } if(Player2Finish && Player1Finish){ print("Both"); }
  • 不,我还是一样。我尝试了几种不同的格式或编写方式,它总是一样的。就上下文而言,这是在视频游戏的脚本中,被称为每帧更新。它检查玩家一号或二号是否已完成,如果他们完成了,则分别打印出谁完成了,如果他们都完成了,则结束关卡。当一个玩家结束或根本无法结束时,我让它结束,但我需要它在两个都结束时结束,这就是我将其缩小到这个布尔问题的方式。
  • 谁能告诉我为什么我的答案被标记了?这没什么大不了的,但我非常接近能够评论其他人的帖子。顺便说一句,如果只允许我发布一个,这个答案就会出现在评论中。
【解决方案2】:

以下应该有效。

        if (Player1Finish == true && Player2Finish == true) {
            Console.Write("Both");
        } else if (Player1Finish == true) {
            Console.Write("One");
        } else {
            Console.Write("Two");
        }

【讨论】:

  • 这是c#中的命令。这在统一 c# 中不起作用,您使用 print 或 debug.log
猜你喜欢
  • 2020-06-23
  • 2021-02-14
  • 2011-06-02
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多