Graphics 绘制的正方形在指定的颜色之间不断闪烁 我对游戏玩家1.4很陌生,但我对Python和C++有一定的经验。我创建了一个1到5之间的随机整数矩阵,表示地图上每栋建筑的层数。我想用这个画一组10x10的正方形,浅灰色的正方形代表更高的建筑。不幸的是,我不能让方块保持相同的颜色。它们在颜色之间不断闪烁

Graphics 绘制的正方形在指定的颜色之间不断闪烁 我对游戏玩家1.4很陌生,但我对Python和C++有一定的经验。我创建了一个1到5之间的随机整数矩阵,表示地图上每栋建筑的层数。我想用这个画一组10x10的正方形,浅灰色的正方形代表更高的建筑。不幸的是,我不能让方块保持相同的颜色。它们在颜色之间不断闪烁,graphics,game-maker,gml,game-maker-language,game-maker-studio-1.4,Graphics,Game Maker,Gml,Game Maker Language,Game Maker Studio 1.4,我如何让它们停止闪烁并适当地表示它们的相关值 这是我的剧本: // 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 ea

我如何让它们停止闪烁并适当地表示它们的相关值

这是我的剧本:

// 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;
      }
   }
}
我调用
randomize()在我初始房间的创建代码中。问题发生在另一个房间

这是一张生成的图片,显然这张图片没有闪烁的方块。


如果您需要更多信息,请告诉我。

问题是我在抽签活动中包含了所有文本。因此,阵列不断被重新制作。解决方案是分离数组生成代码,并在不同的事件下执行它。我为此使用了创建事件


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

问题是,我将所有文本作为绘图活动的一部分包含在内。因此,阵列不断被重新制作。解决方案是分离数组生成代码,并在不同的事件下执行它。我为此使用了创建事件


我会提供一个详细的例子,但鉴于GameMaker程序的性质,这是很困难的,而且解决方案应该是不言自明的。

颜色不断地被赋予新的随机值,因为绘制函数被称为每帧

randomize()

您应该在创建事件中调用脚本一次,而不是绘制矩形,您将它们存储在
ds\U网格中()

在绘图功能中,您只需从网格中绘制保存的值

由于绘制函数被称为“每帧”,因此颜色不断地被赋予新的随机值

randomize()

您应该在创建事件中调用脚本一次,而不是绘制矩形,您将它们存储在
ds\U网格中()

在绘图功能中,您只需从网格中绘制保存的值

我的猜测是,脚本经常执行。似乎就是这样。我不知道如何让它只执行一次。gamemaker有没有办法给随机生成器添加种子?如果是这样,您可以在调用
irandom()
irandom\u range()
函数之前,在脚本的开头使用相同的值对其进行种子设定。@user1118321我会看看是否能找到关于它的任何信息。我猜脚本经常执行。似乎就是这样。我不知道如何让它只执行一次。gamemaker有没有办法给随机生成器添加种子?如果是这样的话,在调用
irandom()
irandom\u range()
函数之前,可以在脚本的开头使用相同的值对其进行种子设定。@user1118321我会看看是否能找到关于它的任何信息。
script_execute(scr_mapGeneration);