Monogame|XNA 在特定位置绘制带有透明圆圈的黑屏
Monogame|XNA Draw a black screen with a transparent circle at a specific location
我尝试了一段时间来创建一个游戏。
但在一开始,我被困住了。
我只想画一个黑色的屏幕,上面覆盖着一个透明的圆圈。
我在很多法语网站上搜索了解决方案,但没有任何回应
我给你画了两张图,让你看看我想要什么。
** 感谢您抽出时间阅读,感谢您的帮助**
你(物理上)不能有一个带有四处移动的透明孔的 PNG。
我的意思是,你自己试试看。拿一张纸,在纸上剪出一个洞。虽然你可以做到这一点,但你不能四处移动洞。你需要一张新纸。
您需要为此使用着色器,它将屏幕上的所有内容渲染为黑色,玩家位置处的圆圈除外。非常基本的 post-处理着色器。
伪代码(在C#中,需要翻译成HLSL):
foreach (var pixel in allPixels)
{
bool drawAsBlack = pixel.Position.DistanceFrom(player.PositionCenter) > RANGE_RADIUS;
if (drawAsBlack)
return Color.Black;
else
return pixel.Color;
}
类似的东西,显然翻译成 HLSL,但你明白了。
我尝试了一段时间来创建一个游戏。 但在一开始,我被困住了。 我只想画一个黑色的屏幕,上面覆盖着一个透明的圆圈。 我在很多法语网站上搜索了解决方案,但没有任何回应
我给你画了两张图,让你看看我想要什么。
** 感谢您抽出时间阅读,感谢您的帮助**
你(物理上)不能有一个带有四处移动的透明孔的 PNG。
我的意思是,你自己试试看。拿一张纸,在纸上剪出一个洞。虽然你可以做到这一点,但你不能四处移动洞。你需要一张新纸。
您需要为此使用着色器,它将屏幕上的所有内容渲染为黑色,玩家位置处的圆圈除外。非常基本的 post-处理着色器。
伪代码(在C#中,需要翻译成HLSL):
foreach (var pixel in allPixels)
{
bool drawAsBlack = pixel.Position.DistanceFrom(player.PositionCenter) > RANGE_RADIUS;
if (drawAsBlack)
return Color.Black;
else
return pixel.Color;
}
类似的东西,显然翻译成 HLSL,但你明白了。