【问题标题】:If statement with the Game.IsKeyDown not working as intended如果带有 Game.IsKeyDown 的语句未按预期工作
【发布时间】:2020-04-15 13:14:48
【问题描述】:

编辑:我使用下面的代码修复了它。

我正在尝试做一个简单的 if 语句来查看玩家是否接近火力。如果他在火附近并且没有按下钥匙,他会受到所示的伤害。这完美地工作。但是,如果按键被按下,玩家仍然会受到伤害。

损坏布尔值在类上方定义为static bool damage = false;

            if (isPlaying)
            {
                player.Stop();
                Game.LocalPlayer.Character.IsFireProof = false;

            }
            else
            {
                player.PlayLooping();
                Game.LocalPlayer.Character.IsFireProof = true;


            }

当玩家靠近着火地点并且按键被按下时我应该怎么做才能不受到伤害?

【问题讨论】:

  • 向我们展示 Game.IsKeyDown(Settings.SCBA) 的代码
  • 这是什么; locationData.GoToPosition 它与“火”有什么关系,为什么使用 distancesquared 而不是 distance?
  • locationData.GoToPosition 是火的实际位置。这样可行。我很确定,就好像我靠近我会受到伤害一样。 Settings.SCBA 的代码是一个使用 windows 媒体播放器播放声音效果的简单类。它像那样激活if (Game.IsKeyDown(Settings.SCBA)) { SCBA.PlaySound(); } 它使用默认的声音播放器
  • 听起来Game.IsKeyDown(Settings.SCBA) 没有返回true。要进行测试,请将其替换为 if(true) { damage = false; } else { .... } 如果这样可以防止损坏,您必须弄清楚为什么 IsKeyDown 没有按预期工作。

标签: c# if-statement keypress


【解决方案1】:

这里没有太多内容可供我们继续讨论,但我认为您在这里混淆了您的逻辑。

Key press 可确保 Game.LocalPlayer.Character.IsFireProof = true 仅用于执行此操作,并且可能在您目前提供给我们的代码之外。

那么您的代码将是:

if (Vector3.DistanceSquared(Game.LocalPlayer.Character.Position, locationData.GoToPosition) < 10f )
{
    if( Game.LocalPlayer.Character.IsFireProof != true)
    {            
        Game.LocalPlayer.Character.Health -= 1;
    }
}

** 编辑 **

好的。更进一步,你的 cmets。

我不确定Game.IsKeyDown(...)是否在按键被按下时返回true。

将函数调用放在逻辑语句中并不是很好的做法,因为它们很难调试尝试:

if (Vector3.DistanceSquared(Game.LocalPlayer.Character.Position, locationData.GoToPosition) < 10f )

    {
        bool damage != Game.IsKeyDown(Settings.SCBA);

        if( damage == true)

        {            

            Game.LocalPlayer.Character.Health -= 1;

        }

    }

如果按下或松开按键无效,则 Game.IsKeyDown 没有按照您的预期进行。

【讨论】:

  • 我希望当我按下这个键时,这个语句是真的Game.LocalPlayer.Character.IsFireProof != true,而这个Game.LocalPlayer.Character.Health -= 1; 是假的。就像如果你不按键玩家的健康正在下降。但是如果你按下键,健康不会减少
  • 如果我省略了Game.LocalPlayer.Character.IsFireProof != true 那么会更容易吗?就像当我按下按钮时,玩家不会受到伤害,如果不按下它,玩家会受到伤害
  • 我还添加了一个布尔值,但仍然没有运气,我完全删除了 Game.LocalPlayer.Character.IsFireProof
猜你喜欢
  • 2012-08-16
  • 2013-04-12
  • 1970-01-01
  • 2020-03-05
  • 2017-10-27
  • 2021-02-09
  • 2021-06-14
相关资源
最近更新 更多