本帖最后由 guoxiaomi 于 2017-3-23 23:40 编辑
怒挖一记坟~
一晃三年已过,不知RB叔有没有想到这个方案呢?
有一个只用事件就能解决的方案。修改的是$game_map.data,所以也不受存档影响。
需要预先处理一下原来的Tileset。主楼中用到的是“山道”地图,在PS里把此地图纵向复制一次。这样就有 2 组一模一样的图块。
原来的图块不管,在下面的复制组里设置优先级,不需要设置通行度。如图:
然后在上桥处设置事件,触发条件是与事件接触:
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.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.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
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,只复制桥的那部分就行~但是整个一起复制快得多…… |