2012-12-06 73 views
1

我正在用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

回答

0

傳播光遞歸。用遞歸的每個級別減少撥出的數量的光照強度。還要跟蹤光線正在移動的方向。一旦你遇到障礙,停止遞歸的那個分支。