Project1

标题: 【制作真的门】门遮挡 门正确遮挡 门通行 [打印本页]

作者: 哇哇哇啊叭叭    时间: 2021-12-26 21:06
标题: 【制作真的门】门遮挡 门正确遮挡 门通行
本帖最后由 哇哇哇啊叭叭 于 2021-12-27 07:15 编辑

  这里贴一下我的解决办法。
  经测试发现,我实际要实现的功能,跟【如果玩家位置上事件名含“door”  则仅禁止向下通行】这个表述并不相符 。准确表述应是:【当门关闭时:人无法通过,且人在门后则被挡住、人在门前则挡住门】
1. 黏贴下列代码
2. 在事件页中写上备注<door = !Door2>
3. 将关好的门设置为一个在人物下方、仅禁止向下移动的图块
4. 像往常一样设置门扉

  这样就完成了一个真实的门扉!!为什么 不使用“修改行走图”那句代码呢?因为,一旦使用了它,图块的通行信息也将被修改,这样就与“直接使用门扉造型”并无二至了。写完之后,觉得代码很长,操作也比较麻烦。今后如果能读到更好的知识,再给它减肥吧...

  感谢2楼、3楼的大佬回答!!
  分别解决了功能问题、解释了代码原理。

[line]6[/line]
  [check_passage(x, y, (1 << (d / 2 - 1)) & 0x0f)]是什么意思?
  如题。获取这个问题,主要是为了实现【如果玩家位置上事件名含“door”  则仅禁止向下通行】的功能,如果有大神能直接通过代码实现这个功能,咱也可以不问这个问题啦


目前知道:
【1 << (d / 2 - 1)】代表二进制1向左移动0或1或2或3位,对应得出得出十进制1、2、4、8,二进制0001、0010、0100、1000
【0x0f】是15
【 (1 << (d / 2 - 1)) & 0x0f】计算后分别得1、2、4、8

那么将上面的值 &0x0f 运算是什么意思呢?


作者: KB.Driver    时间: 2021-12-27 00:24
实现【如果玩家位置上事件名含“door”  则仅禁止向下通行】的功能

RUBY 代码复制
  1. class Game_Event
  2.   attr_reader :event
  3. end
  4.  
  5. class Game_Player
  6.   alias cld99_aliased_passable? passable?
  7.   def passable?(x, y, d)
  8.     has_door = $game_map.events_xy(x, y).find { |e| e.event.name.include?('door') }
  9.     return false if d == 2 && has_door
  10.     cld99_aliased_passable?(x, y, d)
  11.   end
  12. end

作者: 夏虫沉默    时间: 2021-12-27 00:24
本帖最后由 夏虫沉默 于 2021-12-27 00:40 编辑

&这个符号应该是与运算,f的二进制是1111,0001:0010:0100:1000和1111的与运算是其本身,只有两边都是1与运算才是1,例如1010和0111的与运算就是0010,也就是十进制的2。这个d不知道是不是direction,2,4,6,8,运算结果分别为1,2,4,8。
作者: 任小雪    时间: 2021-12-27 12:54
话说npc也无法通过吗




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1