繁体   English   中英

每瓦照明XNA / MonoGame

[英]Per tile lighting XNA / MonoGame

我正在用MonoGame制作基于图块的2D游戏。 我一直在尝试实现每块瓷砖的照明效果,并最终使用了递归泛洪填充以从此答案https://gamedev.stackexchange.com/a/68803获得效果。

private void UpdateLight(int X, int Y, int LightLevel)
{
    //Check if position is out of bounds
    if (X >= 0 && X < MapWidth && Y >= 0 && Y < MapHeight)
        if (LightLevel > BlockMap[X, Y].Light)
        {
            BlockMap[X, Y].Light = LightLevel;

            UpdateLight(X, Y - 1, LightLevel - 1);
            UpdateLight(X, Y + 1, LightLevel - 1);
            UpdateLight(X - 1, Y, LightLevel - 1);
            UpdateLight(X + 1, Y, LightLevel - 1);
        }
}

在我想移除光源之前,这似乎工作得很好。 我根本想不出办法。 当我要放置光源时,我只需要调用UpdateLight(LightSourceX,LightSourceY,LightSourceStrength)。 我本质上需要的是一种逆转此递归洪水填充的方法。

为了允许去除光源,我是否需要一起使用完全不同的算法,还是有某种方法?

实践中的照明:

在此处输入图片说明

正如Micky Duncan所建议的那样,我只是在每个屏幕磁贴上循环,将灯光设置为0,然后重新计算了光照贴图。 我太着迷于尝试撤消灯光,以至于我甚至都没有考虑过将其整体重置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM