我有三个对象。 create事件中的所有这些都包含一个动作(执行一段代码):
obj_r01 => r01=0;
obj_r02 => r02=0;
obj_r03 => r03=0;
图片(澄清我试图解释的内容):
到目前为止一切顺利,但我还有一个对象可以修改其他三个变量:obj_control
obj_control 包含两个事件:创建和绘制。
克里特事件(obj_control):
obj_r01.r01=irandom(9);
obj_r02.r02=irandom(9);
obj_r03.r03=irandom(9);

绘制事件(obj_control):
此事件包含三个操作,正好是三个"执行一段代码":
第一个:
draw_text(x,y,obj_r01.r01);
=> 适用于obj_r01
第二部分:
draw_text(x,y,obj_r02.r02);
=> 适用于obj_r02
第三部分:
draw_text(x,y,obj_r03.r03);
=> 适用于obj_r03
在房间内对象排列如下:
执行中会发生以下情况:
r01的值是随机的,但r02和r03的值不是。 我还尝试将obj_control创建事件代码修改为:
randomize();
obj_r01.r01=irandom(9);
randomize();
obj_r02.r02=irandom(9);
randomize();
obj_r03.r03=irandom(9);

但结果不会改变。有了这个,我只能怀疑irandom ()
函数只能创建一个可存储的随机值,它会解决这个问题吗?
我尝试将randomize()仅放在代码的开头:
randomize();
obj_r01.r01=irandom(9);
obj_r02.r02=irandom(9);
obj_r03.r03=irandom(9);

但结果没有变化。
我还做了一个测试,以确定该值是否甚至没有被随机化,或者r02和r03的值是否被随机化为0,为此我在每个对象的创建中修改了它们的值:
在obj_r02中:
r02=10
在obj_r03:
r03=100
结果:
第一个值(不足为奇)是随机的,但第二个和第三个值不是。 因此很明显,在r02和r03 的放射化之前,没有进行随机化或抽取事件发生。
答案 0 :(得分:0)
以下是我在https://gamedev.stackexchange.com/
上同一问题中收到的答案问题链接=> https://gamedev.stackexchange.com/questions/139368/limitation-on-irandom-of-game-maker
GameMaker使用的随机数生成器不是真正的随机数生成器。它是伪随机数生成器(或简称:PRNG)。 PRNG将返回一系列随机看的数字,但实际上是一个确定性序列。 PRNG生成的数字序列取决于其初始状态,即所谓的种子值。使用相同的种子初始化PRNG时,它将生成相同的序列。
这意味着当您希望每次运行游戏都是独特的体验时,您需要为每次运行使用不同的PRNG种子值。作为开发人员,您通常不关心价值来自何处,只是它与您已经使用过的不同。 Game Maker的randomize
函数的目的是使用新种子重新种子随机数生成器,该种子不太可能与上次游戏运行时相同。我不知道那个功能到底是什么"引擎盖下#34;实现这一点,但它可能会计算各种熵源的种子值,如当前时间,用户输入等。当您多次调用randomize
时,这些熵源可能没有更改,因此您重新初始化再次使用相同的种子。这意味着PRNG将返回相同的序列。
这意味着你通常应该只调用randomize()
一次:游戏开始时。然后只需要一个随机数就可以调用irandom(n)
,每次都应该返回一个不同的随机数(或者相同的数字...... n
可能会有一个)。所以你的游戏初始化函数看起来像这样:
randomize();
obj_r01.r01=irandom(9);
obj_r02.r02=irandom(9);
obj_r03.r03=irandom(9);
@Philipp(https://gamedev.stackexchange.com/users/21890/philipp)
给出的答案 @DMGregory评论的补充"(用户评论菲律宾答案)"是randomize()
的实际用途。
它应该设置种子,并且没有必要像已经提到的那样多次这样做,而且,正如所说here
请注意,在GameMaker:Studio中使用随机数函数时,初始种子始终是相同的,因为这会使跟踪错误和调试变得更加容易。如果你想用真正的随机测试,你应该在游戏开始时调用这个函数。
因此,不会调用将在运行中运行相同的结果。最好的情况是在游戏开始时只调用一次,而不是再次调用它来实现它真正的"随机的。
@DH给出的答案。 (https://gamedev.stackexchange.com/users/51087/dh)