如何使用WPF为2D迷宫实现“战争迷雾”效果

时间:2013-08-30 18:31:37

标签: c# wpf

我有一个2维迷宫,我画在画布上。显示迷宫上的红点,以向用户显示他们在迷宫中的位置。目前整个迷宫是可见的,这引起了问题。

我想这样做:

  1. 只能看到用户迷宫的一部分,
  2. 用户访问的迷宫的前一部分是可见的,但是“灰显”。
  3. 还有其他实体在迷宫中漫游,它们应该只在迷宫中完全可见的部分内可见,换句话说,在用户当前位置的几个单元内;尽管访问的走廊仍然部分可见,但是漫游迷宫的那些部分的任何实体都是不可见的。
  4. 我一直在研究使用OpacityMask属性,这可能很容易实现用户当前位置的可见部分,但是我如何实现让访问区域“灰色”?

2 个答案:

答案 0 :(得分: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。刷新图应该可能会更改数据,然后其他一些方法应该使用当前数据重新渲染地图。

这是一个非常粗略的想法,你如何实现这种类型的东西。不要太认真。它应该足够你当前的项目,我敢肯定在真正的游戏中使用的东西要复杂得多。

答案 1 :(得分:2)

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

第一个描述“你在哪里”,它定义了你目前可以清楚看到的东西,其他一切都是50%不透明或“灰色”。

第二个描述你去过的地方,透明你去过哪里,其他一切都是黑色的。透明的“你去过的地方”区域将允许用户透视到“你在哪里”的图层,以显示你所在的灰色/透明区域,如果你不是。

每一层都有一些复杂性。

  • 第一个有一个简单的形状(只是一个关于用户位置的圆圈),但需要禁止底层对象刷新;即灰色区域中的某些东西不应该刷新或重绘。
  • 第二个有一个简单的重绘(你无论如何都看不到黑色),但形状会复杂得多。如果可行的话,它可能是所有“你在哪里”圈子的联合,每隔几秒采样一次。