2017-09-14 22 views
4

私は照明システムを既に動作させており、(ほとんど)機能しています。私は透光性を実装しようとしているので、特定のブロック(水のような)が光の一部を取り除くだけで動作しますが、それはlightmapの()ので動作を停止します。 。タイルベースの照明システムの半透明性

これは、次のようになります。
translucency glitch

、ここでは私のコードです:

for(int x=0;x<mapX;x++){ 
for(int y=mapY-1;y>-1;y--){ 
    try{ 
     if(map[x][y] instanceof LightSource) 
        lightmap[x][y]=19; 
     else{ 
      else{ 
       if(x-1>-1&&lightmap[x][y]<lightmap[x-1][y]) 
        lightmap[x][y]=lightmap[x-1][y]-map[x][y].translucency; 
       if(x+1<lv.map.length-1&&lightmap[x][y]<lightmap[x+1][y]) 
        lightmap[x][y]=lightmap[x+1][y]-map[x][y].translucency; 
       if(y+1<lv.map[0].length-1&&lightmap[x][y]<lightmap[x][y+1]) 
        lightmap[x][y]=lightmap[x][y+1]-map[x][y].translucency; 
       if(y-1>0&&lightmap[x][y]<lightmap[x][y-1]) 
        lightmap[x][y]=lightmap[x][y-1]-map[x][y].translucency; 
      } 
     } 
    }catch(Exception e){} 
} 
} 

誰もが私が間違ってやっているか見ていますか? 透明性をサポートするために使用できる別のシステムはありますか? これはどうして起こっているのですか?

+1

「停止する」とはどういう意味ですか?どのように働くの? – Bill

+1

投げられる可能性のある「例外」を食べています。この問題のトラブルシューティングの最初のステップは、例外を記録するか、単純な 'e.printStackTrace()'を使うことです。例外がないことを確認したら、コードに焦点を当てます。 – Paul

+0

私は本当に例外は問題だとは思わない。マップの端でスクリプトが失敗するのを防ぐために存在します。スタックトレースを出力すると、エッジの周りに無数の 'ArrayIndexOutOfBoundsException'があります。 –

答えて

1

私は for(int y=0;y<mapY-1;y++)for(int y=mapY-1;y>-1;y--) を変更することで、それを修正しました。 それがなぜ機能したのかはまったく分かりません。また、光が上から下に上って来るのであれば、同じシステムでも同様の結果が得られるのではないかと思います。それをまだテストしていないのですが、私がしたのはセルオートマトンの順番を変えたからです。

関連する問題