无编辑摘要
(创建页面,内容为“随机数 在逻辑中有这样一个函数返回一个伪随机数 rnd(float min,float max) float 不过该函数存在相同帧生成相同的问题,本章将详细讲解如何避免它。 为了避免它,你可能使用些时钟等方式来生成随机数,不过这些方案往往不够随机。 这里以1.15反编译代码作为讲解。 在rnd方法中有一个RandomIndex和bE值,bE与抛射体渲染有关,RandomIndex在解析单个ini文件…”) |
无编辑摘要 标签:移动版编辑 移动版网页编辑 |
||
(未显示同一用户的15个中间版本) | |||
第1行:
随机数
你要找的可能是不属于逻辑块,请看这里。
*[[概率与随机偏移]]
在逻辑中有这样一个函数返回一个伪随机数
第11行 ⟶ 第14行:
这里以1.15反编译代码作为讲解。
在rnd方法中有一个RandomIndex和bE值,bE与抛射体渲染有关,RandomIndex在解析单个ini文件时与每个rnd函数绑定且不同,以0开始自增
这导致多个
它返回这样一个结果。
你可以通过发射抛射体影响bE的值来改变引索,不过
这是反编译代码。
第69行 ⟶ 第72行:
这里可以使用self.id作为偏移。
rnd(self.id*0.001,1/0)
运算优先级存在bug,应该尽可能加上括号避免运算错误。
为保证生成质量,舍弃小数是个好的做法。
int(rnd(self.id*0.001,1/0))
生成区间0~2147483
不过这依然面临多行动生成相同,这意味着你需要更小的生成区间,以便分配给多个行动。
如果你需要准确的小数,生成区间在-16777.217~16777.216内保证精度,这里舍弃负数。
rnd(self.id*0.001,16777.216)%mod+min
▲由于float数精度损失,这个随机生成器的有效范围是16777215,考虑到游戏滥用id,该id是可能被突破的。
不过该生成式的随机分配不均,导致有效范围更小。
▲这时应该使用[https://cra.lanzouj.com/b0agtlmih rnd]组件。
|