绘制的正方形在指定颜色之间不断闪烁

时间:2018-06-14 04:12:07

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

我是GameMaker 1.4的新手,但我对Python和C ++有一些经验。我创建了一个1到5之间的随机整数矩阵,用于表示地图上每个建筑物的故事数。我想用这个来绘制一个10x10的方块组,其中较浅的灰色方块代表较高的建筑物。不幸的是,我不能让方块保持相同的颜色。它们在颜色之间不断闪烁。

如何让它们停止闪烁并恰当地表示其相关值?

这是我的剧本:

// Random 2D Map Height Generator

/*
Generates a matrix which is used for determining 
 the amount of stories per building in the game.

 Then draws squares of different colors to represent
 the number of stories of each building.
*/

ct = irandom(1);
// create array
for (i = 0; i <= global.height; i += 1) {
   for (j = 0; j <= global.width; j += 1) {
      mapArray[i, j] = irandom_range(1, 5);
      if (ct % 2 != 0 && mapArray[i, j] < 5) {
      mapArray[i, j] += 1;
   }
   ct += 1;
   }
}

// make colors
one = make_color_rgb(0, 0, 0);
two = make_color_rgb(51, 51, 51);
three = make_color_rgb(102, 102, 102);
four = make_color_rgb(153, 153, 153);
five = make_color_rgb(204, 204, 204);

// initialize coordinates
ex = 300;
wy = 100;

// count columns

// draw map
for (i = 0; i <= global.height; i += 1) {
   for (j = 0; j <= global.width; j += 1) {
      ex2 = ex + 30;
      wy2 = wy + 30;
      switch (mapArray[i, j])
      {
         case 1:
            draw_set_color(one);
            break;
         case 2:
            draw_set_color(two);
            break;
         case 3:
            draw_set_color(three);
            break;
         case 4:
            draw_set_color(four);
            break;
         case 5:
            draw_set_color(five);
            break;
         default:
            draw_text(200, 200, 
            "ERROR: scr_mapGeneration, case not met");
            break;
      }
      draw_rectangle(ex, wy, ex2, wy2, false);
      ex += 33;
      if (j == global.width) {
         wy += 33;
         ex = 300;
      }
   }
}

我在一个带有draw事件的对象中调用它并用它执行这段代码:

script_execute(scr_mapGeneration);

我在初始房间的创建代码中调用了randomize();。问题出现在另一个房间里。

这是生成的图片,显然这张图片没有闪烁的正方形。 enter image description here

如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

问题在于我将所有文本都包含在绘制事件中。因此阵列不断重制。解决方案是分离阵列制作代码并在不同的事件下执行它。我使用了创建事件。

我会提供一个详细的例子,但考虑到GameMaker程序的性质,它很难,而且无论如何解决方案应该是不言自明的。

答案 1 :(得分:1)

由于绘制功能被称为每帧,因此颜色会不断使用 new 随机值进行分配。

randomize()与您的问题无关,随机总是创建一个新的随机,它只是更改随机种子。 ;)

您应该在创建事件一次中调用脚本,而不是绘制矩形,而是将其存储在例如ds_gridmore info here) 在绘制功能中,您只需从网格中绘制保存的值。