0

我想在游戏制作者8.0 中制作洞穴探险游戏。我已经制作了一个块对象和一个生成器但我被卡住了。这是我的生成器代码

var r;
r = random_range(0, 1);
repeat(room_width/16) {
    repeat(room_height/16) {
        if (r == 1) {
            instance_create(x, y, obj_block)
        }
        y += 16;
    }
    x += 16;
}

现在我总是得到一个空白帧

4

7 回答 7

1

你需要使用irandom(1)所以你得到一个整数。您还应该将它放在循环中,以便每次生成一个新值。

于 2013-11-23T11:44:07.973 回答
1

在第二个语句中,您正在生成一个随机数值并将其存储在 r 中。您实际需要的是选择两个值之一。我建议您为此使用该功能choose(...)。这是更正的陈述:

r = choose(0,1);    //Choose either 0 or 1 and store it in r

此外,将上述语句移至内部循环。(因为您想决定是否要在每个位置的上述(x,y)位置放置一个块,对吗?)

另外,我建议您替换sprite_widthsprite_height不是直接使用值 16,这样您对精灵所做的任何更改都会相应地调整生成的块布局。

这是带有更正的代码:

var r;
repeat(room_width/sprite_width) {
    repeat(room_height/sprite_height) {
        r = choose(0, 1);
        if (r == 1)
            instance_create(x, y, obj_block);
        y += sprite_height;
    }
    x += sprite_width;
}

那应该行得通。我希望这会有所帮助!

于 2013-12-05T16:20:38.803 回答
0

对于奖励积分,您可以使用随机洞穴生成的种子值。您还可以生成路径随机生成,该路径将有保证的路径到终点,随机开口和从该路径随机生成的假路径。然后你可以用其他随机部分填充额外的空间。

但是对于您的代码,您必须在每次放置块时重新定义随机数,这就是为什么它们都是相同的。它应该在循环内部调用,并且应该是整数而不是十进制值。

于 2014-01-16T15:11:24.413 回答
0

看起来你只是在 r==1 时创建一个实例。你不应该每次都创建一个实例吗?

于 2013-11-20T15:58:43.313 回答
0
  1. 变量赋值r = random_range(0, 1);在循环之外。因此在开始循环之前只执行一次。

  2. random_range(0, 1)返回一个介于 0 和 1 之间的随机实数(不是整数!)。但是你有if (r == 1)——得到的概率1是很小的。

例如:

repeat(room_width/16) {
    repeat(room_height/16) {
        if (irandom(1)) {
            instance_create(x, y, obj_block)
        }
        y += 16;
    }
    x += 16;
}
于 2013-11-22T07:45:10.500 回答
0

这是一个可能的,甚至更好的解决方案:

length = room_width/16;
height = room_height/16;

for(xx = 0; xx < length; xx+=1)
{
    for(yy = 0; yy < height; yy+=1)
    {
    if choose(0, 1) = 1 {
    instance_create(xx*16, yy*16, obj_block); }
    }
}

如果您想要随机洞穴,您可能应该删除这些块的随机部分,而不仅仅是单个块。

于 2013-12-10T11:36:41.600 回答
0

问题出在第一行,您需要将 r = something 放入 for 循环中

于 2018-07-27T00:10:09.510 回答