我在 Canvas 上绘制了一个二维迷宫。迷宫上会显示一个红点,以向用户显示他们在迷宫中导航时的位置。目前整个迷宫是可见的,这会带来问题。
我想这样做:
- 只有用户所在的迷宫的一部分可以清晰可见,
- 用户访问过的迷宫的先前部分是可见的,但“变灰”了。
- 还有其他实体在迷宫中漫游,它们应该只在迷宫中完全可见的部分可见,换句话说,在用户当前位置的几个单元格内;尽管访问过的走廊仍然部分可见,但在迷宫的这些部分漫游的任何实体都是不可见的。
我一直在研究为此使用 OpacityMask 属性,这对于用户当前位置的可见部分可能很容易实现,但是我如何实现让访问区域“变灰”?
最佳答案
你的问题太笼统了,但我会尽力让你朝着正确的方向前进。
所以,首先每个单元格应该是一个对象。它需要一些属性,例如;
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
。刷新 map 可能会更改数据,然后一些其他方法应该使用当前数据重新渲染 map 。
这是关于如何实现此类事物的一个非常粗略的想法。不要太认真。它应该足以满足您当前的项目,我相信真正的游戏中使用的要复杂得多。
关于c# - 如何使用 WPF 为 2D 迷宫实现 "fog of war"效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539376/