【问题标题】:How do I get a random value from enums in Javascript?如何从 Javascript 中的枚举中获取随机值?
【发布时间】:2015-10-08 22:11:19
【问题描述】:

我正在修改 Phaser 游戏引擎。我已经想出了如何给精灵上色,所以下一步是给它一个随机的颜色。我将如何使用枚举来做到这一点?

var colors = {
    RED: 0xff0000,
    GREEN: 0x00ff00,
    BLUE: 0x0000ff
}

logo.tint = colors[Math.floor(Math.random() * colors.length)];

【问题讨论】:

  • logo.tint=colors[Math.floor(Math.random() * Object.keys(colors).length)]
  • 颜色[Math.random() % Object.keys(colors).length)]
  • @subdigit:可悲的是,我认为这不能满足您的要求,而且我知道它不能满足 OP 的要求...
  • 哈哈,对了。 random 是 0-1 不是吗...
  • 如何使用 game.rnd.weightedPick(myColorArray); 将颜色存储在随机选取的数组中

标签: javascript enums phaser-framework


【解决方案1】:

我今天刚刚遇到这个问题,并且能够通过这个得到一个随机值:

var rand = Math.floor(Math.random() * Object.keys(colors).length);
var randColorValue = colors[Object.keys(colors)[rand]];

【讨论】:

    【解决方案2】:

    你应该首先将你的对象实例化为一个数组

    var colors =[
        {RED: 0xff0000},
        {GREEN: 0x00ff00},
        {BLUE: 0x0000ff}
    ];
    

    然后,获取数组的随机位置。

    colors[Math.floor(Math.random() * colors.length)];
    

    【讨论】:

      【解决方案3】:

      这是我在 typescript 中编写的一种方法,如果你想与 javascript 一起使用,请删除类型。

      function getRandomEnumValue<T>(anEnum: T): T[keyof T] {
        //save enums inside array
        const enumValues = Object.keys(anEnum) as Array<keyof T>; 
        
        //Generate a random index (max is array length)
        const randomIndex = Math.floor(Math.random() * enumValues.length);
        // get the random enum value
        
        const randomEnumKey = enumValues[randomIndex];
        return anEnum[randomEnumKey]; 
       // if you want to have the key than return randomEnumKey
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2018-07-07
        • 2020-09-10
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        • 2010-12-05
        相关资源
        最近更新 更多