制作像Terraria这样的灯系统?

Sta*_*tan 2 c# xna lighting light

我试图使我的灯光类似于Terraria的灯光照明.现在,我知道如何使块更暗,我可以将块分配给某个光级,但是,我如何制作一个实际的光实体,它发出圆形的光(也可以是菱形)?非常感谢帮助,如果我不清楚我的问题,请随时提出.

Mar*_*ing 5

基本的2D照明非常简单.只需从您的区块到您的灯光进行距离检查,并使用该值来缩放光线.这是你可以做的相当简单的事情,因为Spritebatch.Draw有一个很好的Color tint参数[link]

伪函数可以是

distance =  (block.position - light.position). Length();
lightPower = distance / light.MaxDistance;
finalTint = light.Color * lightPower;
Render Block, with finalTint
Run Code Online (Sandbox Code Playgroud)

为了获得更好看的光线,您可以用更平滑的效果替换"distance/light.MaxDistance".如果您还希望灯光通过像Terraria这样的几个块,您可以计算块和光源之间的所有块.按照这个数量缩小你的lightPower,你会得到像Terraria一样的效果.

当然,这是一种非优化的方式,但应该有效.

然而,最新的Terraria版本似乎具有平滑的每像素照明而不是每个块[预览].为此,我假设他们使用第二个渲染目标和/或像素着色器来保持快速性能.如果你不熟悉渲染管道,这可能有点困难.

希望这可以帮助!