1

我有一个在画布上绘制的二维迷宫。迷宫上会显示一个红点,以在用户导航时向用户显示他们在迷宫中的位置。目前整个迷宫都是可见的,这造成了问题。

我想让它这样:

  1. 只有用户所在的迷宫的一部分可以清晰可见,
  2. 用户访问过的迷宫的先前部分是可见的,但“变灰”。
  3. 还有其他实体在迷宫中漫游,它们应该只在迷宫中完全可见的部分可见,换句话说,从用户当前位置的几个单元格内可见;尽管访问过的走廊仍然部分可见,但在迷宫的这些部分漫游的任何实体都是不可见的。

我一直在研究为此使用 OpacityMask 属性,这对于用户当前位置的可见部分可能很容易实现,但是如何实现将访问区域“变灰”?

4

2 回答 2

4

你的问题太笼统了,但我会尽力让你朝着正确的方向前进。

因此,首先每个单元格应该是一个对象。它需要一些属性,例如;

    int x // x coordinate
    int y // y coordinate
    bool isVisible // marks if the cell is currently in full view
    bool beenSeen // marks if the user has been here

每次用户移动时,您都应该调用一些方法,例如RefreshMap(Cell Current);

在此方法中,您应该找到所有边界单元格(使用 x 和 y 值)并将它们标记为可见。您还应该将当前单元格标记为beenSeen. 刷新地图应该可能会更改数据,然后其他一些方法应该使用当前数据重新渲染地图。

这是您如何实现此类事物的一个非常粗略的想法。不要太认真。它应该足以满足您当前的项目,我确信在真实游戏中使用的东西要复杂得多。

于 2013-08-30T18:37:10.097 回答
2

您将OpacityMask在整个迷宫的顶部使用两层。

第一个描述“您在哪里”,它定义了您当前可以清楚地看到的内容,其他所有内容将是 50% 不透明或“灰色”。

第二个描述了你去过的地方,你去过的地方是透明的,其他的都是黑色的。透明的“你去过哪里”区域将允许用户看到下面的“你在哪里”层,以显示你在哪里和你不在哪里的灰色/透明区域。

每一层都有一些复杂性。

  • 第一个形状很简单(只是围绕用户位置的一个圆圈),但需要禁止底层对象刷新;即灰色区域中的某些内容不应刷新或重绘。
  • 第二个有一个微不足道的重绘(无论如何你在黑色下面看不到),但形状会复杂得多。如果可行的话,它可能是所有“你在哪里”圈子的联合,每隔几秒采样一次。
于 2013-08-30T18:51:17.163 回答