在平铺的水平上阻挡光线

时间:2012-12-06 20:26:23

标签: java

我正在使用Java制作平铺(瓷砖大小为16px)级别的滚动游戏。 现在我正在处理照明系统。 我用每个灯光(黄色块和瓷砖)的代码计算了光线渐变(如图所示):

visMap = new int[level.getWidth() * level.getHeight()];

    int lighted = 0;

    for (int x = 0; x < level.getWidth(); x++) {
        for (int y = 0; y < level.getHeight(); y++) {
            double xd = (this.x >> 4) - x;
            double yd = (this.y >> 4) - y;

            double distance = Math.sqrt(xd * xd + yd * yd);

            double p = power * 1.0;
            double bright = p - distance;

            visMap[x + y * level.getWidth()] = (int) (bright * power);
        }
    }

现在我正试图阻止光块(就像在现实生活中一样)。 有一个很好的方法吗? 提前致谢, Zaplik

图片:click

1 个答案:

答案 0 :(得分:0)

递归传播光线。随着每个级别的递归减少光强度和适当的量。保持跟踪光线移动的方向。一旦遇到障碍,停止递归的那个分支。