【问题标题】:Many Enums in one Array C#一个数组中的多个枚举 C#
【发布时间】:2013-10-01 20:44:02
【问题描述】:

我一直在寻找如何用许多不同的枚举创建一个数组。

我正在尝试做的是枚举,例如

public enum playerTeam
{
    Red,
    Blue
};

还有一个

public enum currentWeapon
{
    Knife,
    Gun,
    Rifle,
    Shotgun,
    SniperRifle,
    RocketLauncher,
    Grenade,
    Molotov,
    FlameThrower,
    ProximityMine,
    RemoteMine
};

然后将它们分配给一个名为

的数组

Players[]

然后能够循环遍历数组并设置每个枚举的值。我以前使用过没有数组的枚举。设置/获取播放器的数据。 但现在我即将将我的项目扩展到多人游戏。而且我不知道如何将枚举添加到一个数组中。因为这会使代码更容易处理。

这真的很难解释,希望你们理解..

【问题讨论】:

  • 听起来你需要一个 Player 类实例数组,其中 Player 将有成员 Weapon 和 Team。
  • 为什么不在Player 类中使用两个属性,一个CurrentWeapon 和一个Team

标签: c# arrays enums unity3d


【解决方案1】:

我建议您创建一个类 Player,其中包含成员 WeaponTeam。然后使用播放器实例执行操作。

class Player
{
    Weapon CurrentWeapon {get; set;}
    Team Team {get; set;}
}

【讨论】:

    【解决方案2】:

    考虑到 C# 允许您做什么,这是一种奇怪的看待事物的方式。充其量,要准确实现您想要的,您可以使用将键映射到值(玩家到武器/团队)的东西,例如 System.Collections.Generic.Dictionary

    但实际上没有必要这样做。 Player 类应该在两个字段中包含该信息:

    class Player
    {
       ...
       private Team currentTeam;
       private Weapon currentWeapon;
       ...
    }
    

    从您命名枚举的方式和您的想法来看,我认为您还应该从头到尾关注 C# 和 OOP 的学习资源。

    【讨论】:

      【解决方案3】:

      这有点荒谬,因为团队显然不是武器(wtf 是 currentWeapon。而不是 Weapon),但如果你问如何使用枚举和位标志,你可以写

      [Flags]
      public enum Weapon
      {
          ...
          WeaponMask = 0xFF
          IsBlueTeam = 0x0100
      }
      

      你可以这样做

      switch(player[i] & WeaponMask) { case SomeWeapon: ... }
      isBlueTeam = (player[i] & IsBlueTeam) != 0 //assuming its either blue or read
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-21
        • 2021-12-13
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多