使用指数保持恒定比率?

时间:2014-01-22 19:06:30

标签: actionscript-3 alpha light exponent

所以这是我的问题:

目前我正在为游戏开发原始灯光系统。舞台上覆盖着黑色面具来代表“黑暗”,然后将其alpha从0(最亮,不可见)调整为1(完全黑暗,不透明)。当“英雄”接近光线时,我减去总数从1开始吸收光线的数量。为了在每个光线周围创造一个光线“区域”,英雄越近,光线越多,我使用了一个二次表达式,将“距离”作为自变量。

我的代码如下所示:

            var boost:Number = 0;
        var exponent:Number = 1-.1*(Lists.Lights.length)
        for (var ii:int = 0; ii < Lists.Lights.length; ii++) {
            var dist:Number = Lists.Lights[ii].getDistance()/100
            var addMe:Number = -Math.pow(dist, exponent) + Math.pow(dist, exponent / 2) + 1
            if(addMe>0){
            boost += addMe
            }
        }
        trace(boost)
        var b:Number = brightness - boost

问题是调整灯光数量的指数。目前灯光越多,调整越严重。更多灯=范围更短的灯。这是因为所有的灯都相互抵消,远处的灯几乎没有效果。

那么,我应该尝试重构我的代码以使用不同的方法,还是我在这里看不到的东西?

1 个答案:

答案 0 :(得分:0)

在Reality(TM)中,光的强度基本上是光度/(dist ^ 2)(或者如果你愿意,可以是发光度* dist ^( - 2))。我不知道通过-dist ^ 2术语建模它将非常接近你想要的(图形的形状-x ^ 2和x ^( - 2)并不是那么相似)。我建议做类似的事情(虽然当你非常接近光源时,这会变得非常大,所以你可能想要一个小距离的截止点。)