| 本帖最后由 guoxiaomi 于 2017-3-23 23:40 编辑 
 怒挖一记坟~
 
 一晃三年已过,不知RB叔有没有想到这个方案呢?
 
 有一个只用事件就能解决的方案。修改的是$game_map.data,所以也不受存档影响。
 
 需要预先处理一下原来的Tileset。主楼中用到的是“山道”地图,在PS里把此地图纵向复制一次。这样就有 2 组一模一样的图块。
 
 原来的图块不管,在下面的复制组里设置优先级,不需要设置通行度。如图:
 
   
 然后在上桥处设置事件,触发条件是与事件接触:
 
 data = $game_map.dataary1 = [553,561,569,579,580,581,556,564]ary2 = ary1.collect{|x| x + 224}for x in 0..$game_map.widthfor y in 0..$game_map.heightfor z in 0..2if ary2.include? data[x,y,z]  data[x,y,z] -= 224end;end;end;end
data = $game_map.data 
ary1 = [553,561,569,579,580,581,556,564] 
ary2 = ary1.collect{|x| x + 224} 
for x in 0..$game_map.width 
for y in 0..$game_map.height 
for z in 0..2 
if ary2.include? data[x,y,z] 
  data[x,y,z] -= 224 
end;end;end;end 
下桥处设置事件,触发条件是与事件接触:
 
 data = $game_map.dataary1 = [553,561,569,579,580,581,556,564]ary2 = ary1.collect{|x| x + 224}for x in 0..$game_map.widthfor y in 0..$game_map.heightfor z in 0..2if ary1.include? data[x,y,z]  data[x,y,z] += 224end;end;end;end
data = $game_map.data 
ary1 = [553,561,569,579,580,581,556,564] 
ary2 = ary1.collect{|x| x + 224} 
for x in 0..$game_map.width 
for y in 0..$game_map.height 
for z in 0..2 
if ary1.include? data[x,y,z] 
  data[x,y,z] += 224 
end;end;end;end 
 所以这里应该很容易就看出来了,当下桥的时候,原来的地图图块已经被更换为复制组,复制组的图块设为高的优先级(☆5)和穿透,所以看上去是角色“在桥下面行走”。上桥的时候再换回原来的图块即可。
 
 具体为什么是这些数字,图块元件的ID是384+元件在Tileset图中的位置,自动元件是不算在内的。这个从上到下数一下就可以了,或者下面的脚本,x,y是坐标,z=0-2是图层。
 
 这段脚本可以进行优化,比如for循环里只写桥所在的范围,但是RGSS不是很care这点运算量。
 复制的时候也不一定要复制整个Tileset,只复制桥的那部分就行~但是整个一起复制快得多……
 |