4楼的回答有明确的误导性。11/9增修前的版规提到“请勿使用肯定的语气”发表不明确,模棱两可的回答。(增修后不允许)
VA的图块设置有O,X和星三种。O为可通行,X为不可通行,而星号是B~E(上层)图块特有的,表示不影响下层(A图块)的通行度。
意思就是,如果下层是X而上层是星,那么这层仍然是不可通行的。下层是O,上层是星,那么就可以通行。
B图块左上角的空图块(它的ID是0号)的默认通行度是星。这是要让空着的上层图块不影响下层图块的通行度。
如果把它设置为不可通行(X),会导致所有没有画着上层图块的部分无法通行。
反之,如果设置为可通行(O),则会导致所有没有画着上层图块的部分可以通行,就算原本A图块是设置不可通行的。
Game_Map里面检查通行度的check_passage方法定义:
#-------------------------------------------------------------------------- # ● 通行检查 # bit : 判断通行禁止与否的字节(请参照二进制运算) #-------------------------------------------------------------------------- def check_passage(x, y, bit) all_tiles(x, y).each do |tile_id| flag = tileset.flags[tile_id] next if flag & 0x10 != 0 # [☆] : 不影响通行 return true if flag & bit == 0 # [○] : 可以通行 return false if flag & bit == bit # [×] : 不能通行 end return false # 不能通行 end
#--------------------------------------------------------------------------
# ● 通行检查
# bit : 判断通行禁止与否的字节(请参照二进制运算)
#--------------------------------------------------------------------------
def check_passage(x, y, bit)
all_tiles(x, y).each do |tile_id|
flag = tileset.flags[tile_id]
next if flag & 0x10 != 0 # [☆] : 不影响通行
return true if flag & bit == 0 # [○] : 可以通行
return false if flag & bit == bit # [×] : 不能通行
end
return false # 不能通行
end
基于楼主在提问内提供的资讯,“通行度没问题”。那么如果这个B图块的左上角,的确是画上了星号,那么就该考虑下我在3楼所发表的方案了。
最后,建议楼主读一下增修后的版规,尤其是A8部分,以免遭遇原本可以避免的麻烦。
|