Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用WPF为2D迷宫实现“战争迷雾”效果_C#_Wpf - Fatal编程技术网

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

C# 如何使用WPF为2D迷宫实现“战争迷雾”效果,c#,wpf,C#,Wpf,我在画布上画了一个二维迷宫。迷宫上会显示一个红点,向用户显示他们在迷宫中的位置。目前,整个迷宫可见,这带来了一个问题 我希望这样做: 只有迷宫中用户所在的部分才能清晰可见, 用户访问的迷宫的前面部分可见,但变灰。 还有其他实体在迷宫中漫游,它们应该仅在迷宫中完全可见的部分内可见,换句话说,从用户当前位置的几个单元格内可见;尽管参观过的走廊仍然部分可见,但在迷宫的这些部分漫游的任何实体都不可见。 我一直在研究如何使用OpacityMask属性,这对于用户当前位置的可见部分可能很容易实现,但如何实现

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

我希望这样做:

只有迷宫中用户所在的部分才能清晰可见, 用户访问的迷宫的前面部分可见,但变灰。 还有其他实体在迷宫中漫游,它们应该仅在迷宫中完全可见的部分内可见,换句话说,从用户当前位置的几个单元格内可见;尽管参观过的走廊仍然部分可见,但在迷宫的这些部分漫游的任何实体都不可见。
我一直在研究如何使用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
每次用户移动时,您应该调用一些方法,如RefreshMapCell Current

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


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

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

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

    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
每次用户移动时,您应该调用一些方法,如RefreshMapCell Current

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

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

您可以在整个迷宫的顶部使用两个不透明的遮罩层

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

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

每一层都有一些复杂性

第一个有一个简单的形状,只是一个围绕用户位置的圆圈,但需要禁止刷新底层对象;i、 e.灰色区域中的某些内容不应刷新或重新绘制。 第二个有一个小的重画,你无论如何都看不到在黑色下,但形状会复杂得多。如果可行的话,它可能是所有你们所在的圆的联合,每隔几秒钟采样一次。 你可以在整个迷宫的顶部使用两层不透明的面具

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

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

每一层都有一些复杂性

第一个有一个简单的形状,只是一个围绕用户位置的圆圈,但需要禁止刷新底层对象;i、 e.灰色区域中的某些内容不应刷新或重新绘制。 第二个有一个小的重画,你无论如何都看不到在黑色下,但形状会复杂得多。如果可行的话,它可能是所有你们所在的圆的联合,每隔几秒钟采样一次。
不同意“过于宽泛”,这是一个简单的设计问题-它不是一个庞大的项目,只是一个系统的一部分,OP正在寻找实现想法。传统上,这将通过2D位图来完成,其中每个位代表一个1区域或某物。如果你使用着色器效果,你也许可以做到这一点。不同意“太宽”,这是一个简单的设计问题-它不是一个大型项目,只是一个系统的一部分,OP正在寻找实现想法。Tradit
通常情况下,这将通过2D位图实现,其中每个位表示一个1区域或某个区域。如果你使用的是着色器效果,你可能可以这样做。谢谢,这正是我预期我需要做的,只是我不知道这是允许的。所以,第二层是我一直在努力解决的问题。谢谢,这正是我期望我需要做的,只是我不知道这是允许的。所以,第二层是我一直在努力解决的问题。