Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中随机生成战利品_Ios_Swift_Sprite Kit_Swift2 - Fatal编程技术网

Ios 在Swift中随机生成战利品

Ios 在Swift中随机生成战利品,ios,swift,sprite-kit,swift2,Ios,Swift,Sprite Kit,Swift2,为清晰起见进行了更新 我正在制作一个游戏,并创建了一个JSON配置文件,在这里我可以配置设置,例如任何给定级别的掉落物品种类。我还配置了(在一个JSON ROOT数组中)每个物品的频率。我想要一枚硬币在30%的时间里掉落,一颗心在50%的时间里掉落到1级。所以我将硬币的频率设置为0.3,心脏的频率设置为0.5。并非每个等级的所有战利品都会掉落(某些等级的掉落频率可能为0.0) 当我让我的ObjectFactory生成一个给定的战利品时,我如何确保一枚硬币下降0.3%(或30%)的时间和一颗心下降

为清晰起见进行了更新

我正在制作一个游戏,并创建了一个JSON配置文件,在这里我可以配置设置,例如任何给定级别的掉落物品种类。我还配置了(在一个JSON ROOT数组中)每个物品的频率。我想要一枚硬币在30%的时间里掉落,一颗心在50%的时间里掉落到1级。所以我将硬币的频率设置为0.3,心脏的频率设置为0.5。并非每个等级的所有战利品都会掉落(某些等级的掉落频率可能为0.0)

当我让我的ObjectFactory生成一个给定的战利品时,我如何确保一枚硬币下降0.3%(或30%)的时间和一颗心下降0.5%或50%的时间?我知道我可以生成一个介于1和100之间或0.0和1.0之间的数字。那又怎么样

如果我的随机数为0.7,这意味着什么?我是生硬币还是生心脏

我真的必须这样做吗

    //30 and 80 came from the JSON file
if (rngNumber < 30)
   //spawn coin
else if (rngNumber >= 30 && < 80)
   //spawn heart
else
   //spawn nothing
//30和80来自JSON文件
如果(rngNumber<30)
//产生硬币
否则如果(rngNumber>=30&<80)
//繁殖心脏
其他的
//一无所获
看,问题是,当我从一个层次到另一个层次时,这是行不通的。因为如果我在第2级将心脏更改为90%,那么代码如下所示:

if (rngNumber <= 89)
   //spawn heart
else
   //do nothing

if(rngNumber这是如何在Swift中获取随机数:


从这里开始,比较文件中的值和生成的数字就很容易了。如果随机数低于阈值,则您会丢弃该赃物。

好,这就是您的操作方法:

首先,你不能用一个数字,你需要一个范围。 因此,在我的配置中,我创建了“频率”:(1,50) 这意味着项目1的数字介于1和50之间,项目2的数字介于51和70之间,项目3的数字介于71-100之间(你明白了)

然后我将每个频率反序列化为一个元组(Int,Int)

然后我生成一个介于1100和过滤器之间的随机数,如下所示:

 let rand = RandomInt(min: 1, max: 100)
        var loot: Loot?
        let lootData = lootConfigArray.filter{rand >= $0.frequency.0 && rand <= $0.frequency.1}.first
rand=RandomInt(最小值:1,最大值:100)
战利品:战利品?

让lootData=lootConfigArray.filter{rand>=$0.frequency.0&&rand你能给出更多的细节吗?很难理解你想要什么样的算法来获得特权。通常人们认为他们对如何实现目标感到困惑,而实际上他们对自己想要的东西感到困惑。在我看来,这里就是这种情况,而这正是你想首先弄清楚的地方示例场景-删除10%的项目:生成编号。如果编号<0.1,则删除项目,否则不删除项目。或者问题在哪里?您应该澄清您的意图。为清晰起见进行了更新-如果您有其他时间,希望获得一些反馈,谢谢!