【问题标题】:game maker random cave generation游戏制作者随机洞穴生成
【发布时间】:2013-11-20 15:55:11
【问题描述】:

我想在game maker 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;
}

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

【问题讨论】:

    标签: game-engine game-maker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在第二个语句中,您正在生成一个随机的 real 值并将其存储在 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;
      }
      

      应该可以。希望对您有所帮助!

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我想制作一个自上而下洞穴生成的洞穴游戏。
        【解决方案4】:
        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;
        }
        

        【讨论】:

          【解决方案5】:

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

          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); }
              }
          }
          

          如果你想要随机洞穴,你应该删除这些块的随机部分, 不只是单身。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-11-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多