Java 基于瓷砖的照明系统中的半透明性
我有一个照明系统已经开始工作并且(大部分)正常工作。我试图实现半透明,以便某些块(如水)只移除通过它们的一小部分光,它可以工作,但在光照贴图的整数限制下停止工作(在我的例子中为20) 这就是它的样子:Java 基于瓷砖的照明系统中的半透明性,java,light,translucency,Java,Light,Translucency,我有一个照明系统已经开始工作并且(大部分)正常工作。我试图实现半透明,以便某些块(如水)只移除通过它们的一小部分光,它可以工作,但在光照贴图的整数限制下停止工作(在我的例子中为20) 这就是它的样子: 这是我的代码: for(int x=0;x<mapX;x++){ for(int y=mapY-1;y>-1;y--){ try{ if(map[x][y] instanceof LightSource) lightmap[
这是我的代码:
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){}
}
}
for(int x=0;x-1;y--){
试一试{
if(映射光源的[x][y]实例)
光照图[x][y]=19;
否则{
否则{
如果(x-1>-1&&lightmap[x][y]我通过更改
for(int y=mapY-1;y>-1;y--)
到
for(int y=0;y“停止工作”是什么意思?”以何种方式停止工作?您正在吃任何可能引发的异常。解决此问题的第一步是记录异常或使用简单的e.printStackTrace()
。一旦确认没有异常,那么就关注代码。我真的不认为这些异常是问题所在。它们的存在是为了防止脚本在映射的边缘失败。如果我打印堆栈跟踪,它只会在边缘给我大量的ArrayIndexOutOfBoundsException
异常。它会停止工作如图所示,在不应该的位置将水的灯光值设置为0。这是一个float[][]
。在输出为灯光之前,该值将被转换为int
。半透明性也为float
,对于大多数块为1,对于水为0.2。