【问题标题】:My GML shuffling array function is alway returning the same result我的 GML 洗牌数组函数总是返回相同的结果
【发布时间】:2017-06-24 22:58:03
【问题描述】:

我正在尝试在 GML 中创建一个洗牌数组函数。这是我尝试过的,argument0 是要洗牌的数组,argument1 是这个数组的大小:

///Shuffling array function

//argument0: the array to shuffle
//argument1: the size of the array

var i;
var j;

show_debug_message("----------");
show_debug_message("Original array: ");
show_debug_message(argument0);
show_debug_message("Size: ");
show_debug_message(argument1);

for (i = 0; i < argument1; i++)
{
    j = irandom_range(i, argument1 - 1);

    if (i != j)
    {
        k = argument0[i];
        argument0[i] = argument0[j];
        argument0[j] = k;
    }
}

show_debug_message("Result array: ");
show_debug_message(argument0);
show_debug_message("----------");

return argument0;

当我执行这个函数时,我总是得到相同的结果:

----------
Original array: 
{ { 1,2,3,4,5 },  }
Size: 
5
Result array: 
{ { 5,3,1,4,2 },  }
----------

【问题讨论】:

  • 您是否尝试过使用更大的数组来确认这一点?它有有限数量的元素可以随机播放,但是你有很小的机会随机地一次又一次地获得相同的元素。或者你可以多次调用 shuffle。

标签: game-maker gml game-maker-language game-maker-studio-2 game-maker-studio-1.4


【解决方案1】:

你在游戏的任何地方都使用过randomize()这个函数吗?每次运行游戏时,Randomize 都会将种子设置为随机值——没有它,随机函数将始终返回相同的结果,因为它们始终使用相同的种子值。

注意:[随机函数] 每次重新运行游戏时都会返回相同的值,因为 GameMaker: Studio 每次都会生成相同的初始随机种子,从而使调试代码变得更加容易。为避免这种行为,请在游戏开始时使用 randomize。

randomize() 上的文档:https://docs.yoyogames.com/source/dadiospice/002_reference/maths/real%20valued%20functions/randomize.html

【讨论】:

    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多