游戏制作者对irandom()的限制?

游戏制作者对irandom()的限制?,random,game-maker,Random,Game Maker,我有三个目标。create事件中的所有操作都包含一个操作(执行一段代码): obj_r01=>r01=0 obj_r02=>r02=0 obj_r03=>r03=0 图像(澄清我试图解释的内容): 到目前为止还不错,但我还有一个对象可以修改其他三个变量:obj_control obj_控件包含两个事件:create和draw 克里特岛事件(obj_控制): obj_r01.r01=irandom(9); obj_r02.r02=irandom(9); obj_r03.r03=irandom

我有三个目标。create事件中的所有操作都包含一个操作(执行一段代码):

obj_r01=>
r01=0

obj_r02=>
r02=0

obj_r03=>
r03=0

图像(澄清我试图解释的内容)

到目前为止还不错,但我还有一个对象可以修改其他三个变量:
obj_control

obj_控件包含两个事件:createdraw

克里特岛事件(obj_控制):

obj_r01.r01=irandom(9);
obj_r02.r02=irandom(9);

obj_r03.r03=irandom(9)以下是我在上个月收到的同一个问题的答案

问题链接=>


GameMaker使用的随机数生成器不是真正的随机数生成器。它是一个随机数生成器(或简称:PRNG)。PRNG将返回一个看起来随机但实际上是确定序列的数字序列。PRNG生成的数字序列取决于其初始状态,即所谓的种子值。当您使用相同的种子初始化PRNG时,它将生成相同的序列

这意味着,当您希望游戏的每次运行都是一次独特的体验时,您需要为每次运行使用不同的PRNG种子值。作为一名开发人员,您通常不关心该值来自何处,只是它与您已经使用的不同。Game Maker的功能旨在使用新种子重新为随机数生成器设定种子,该种子不太可能与上次运行游戏时的种子相同。我不知道该函数“在引擎盖下”到底做了什么来实现这一点,但它可能会从各种熵源计算种子值,如当前时间、用户输入等。当您多次调用
随机化
时,这些熵源可能没有更改,因此您可以使用相同的种子再次对其进行初始化。这意味着PRNG将返回相同的序列

这意味着您通常应该在游戏开始时准确调用
randomize()
。然后,当您需要一个随机数时,只需调用
irandom(n)
,它每次都会返回不同的随机数(或相同的数字…有可能在
n
中返回一个)。因此,您的游戏初始化函数如下所示:

randomize();
obj_r01.r01=irandom(9);
obj_r02.r02=irandom(9);
obj_r03.r03=irandom(9);
@Philipp()给出的答案


@DMGregory comment”(用户对philipp的答案发表了评论)的一个补充是
randomize()
的真正用途

它应该是要播下种子的,而且没有必要像前面提到的那样做不止一次,但正如前面所说的那样

请注意,当在GameMaker:Studio中使用随机数函数时,初始种子总是相同的,因为这使得跟踪错误和调试更加容易。如果您希望使用true random进行测试,则应在游戏开始时调用此函数

因此,不调用将在运行期间使用相同的结果。最好的情况是在游戏开始时只打一次电话,不要再打电话让它“真正”随机


@DH给出的答案。()

实例创建顺序是什么(房间->设置->实例顺序)?首先必须创建三个对象,最后必须是
obj\u control
.P.S<代码>随机化()必须在游戏开始时只调用一次。谢谢@Dmi7ry!!!!!!!!!!!!!!