我如何实现“;战争的迷雾;使用WPF对2D迷宫的效果

本文关键字:迷雾 使用 WPF 2D 迷宫 战争 何实现 实现 | 更新日期: 2023-09-27 18:29:51

我在画布上画了一个二维迷宫。迷宫上会显示一个红点,向用户显示他们在迷宫中的位置。目前,整个迷宫都是可见的,这带来了一个问题。

我想这样做:

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

我一直在研究使用OpacityMask属性来实现这一点,这对于用户所在位置的可见部分来说可能很容易实现,但我如何实现将访问区域保持为"灰色"?

我如何实现“;战争的迷雾;使用WPF对2D迷宫的效果

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

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

    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。刷新映射可能会更改数据,然后其他方法应该使用当前数据重新渲染映射。

这是关于如何实现这种类型的东西的一个非常粗略的想法。不要太当真。这应该足以满足你目前的项目,我相信在真正的游戏中使用的要复杂得多。

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

第一个描述了"你在哪里",它定义了你目前能清楚地看到什么,其他一切都是50%不透明或"灰色"的。

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

每一层都有一定的复杂性。

  • 第一个具有琐碎的形状(只是围绕用户位置的一个圆圈),但需要禁止底层对象刷新;即灰色区域中的某些内容不应刷新或重新绘制
  • 第二个有一个琐碎的重绘(无论如何你都看不到黑色下面),但形状会复杂得多。如果可行的话,它可能是所有"你所在的位置"圆圈的并集,每隔几秒钟采样一次