【求助】随机函数失效问题

Xmzzz 7月前 427

怎么样让 随机函数正常工作。输出随机的数字?

代码逻辑:

 winform.setInterval(
	function(){
		thread.invoke( 
		    function(winform){
		        	import console;
		        	import math;
		        	math.randomize();
		    		console.log( "随机函数:" ++ tostring(math.random(1,4)) )
		    	 return ; 
		    },winform
		)
	},1000
)


结果:

随机函数:1

随机函数:2

随机函数:2

随机函数:2

随机函数:3

随机函数:3

随机函数:4

随机函数:4

随机函数:4

随机函数:1

随机函数:1

随机函数:2

随机函数:2

随机函数:2

随机函数:3

随机函数:3

随机函数:3

随机函数:4

随机函数:4


最新回复 (3)
  • 光庆 7月前
    0 2

    1、手册中说:设置随机数种子,在使用math.random函数创建随机数以前,必须调用并且仅调用math.randomize()一次。

    2、我猜测:启动线程时,线程中会自动加载math库,同时自动执行math.randomize() 函数。

          这就相当于每次取随机数前都进行了一次math.randomize()。

          而影响随机结果不随机的重要原因,我猜测是其默认参数 time.tick() 在短时间内的较小差值或有规律的变化导致的。

  • 光庆 7月前
    0 3

    可通过下面的方式变相解决:

    winform.setInterval(
    	function(){
    		var 随机数种子 = math.random(0,time.tick());
    		thread.invoke( 
    		    function(新随机数种子){
    		        import console;
    		        math.randomize(新随机数种子)
    		    	console.log( "随机函数:" ++ math.random(1,4) )
    		    	return ; 
    		    },随机数种子
    		)
    	},1000
    )


  • Xmzzz 7月前
    0 4
    光庆 可通过下面的方式变相解决:winform.setInterval( function(){ var 随机数种子 = math.rando ...

    感谢 光庆 大佬指点,已用上

    在提问前也试过在主线程进行一次  math.randomize() 无效。

    新手被多线程 + math.random 整懵了 

    非常感谢 

返回
发新帖