Project1

标题: 如何通过脚本使公共事件发生? [打印本页]

作者: asdwds    时间: 2013-4-20 12:57
标题: 如何通过脚本使公共事件发生?
本帖最后由 asdwds 于 2013-4-25 18:20 编辑

  
通过脚本,做动公共事件的脚本是什么?写这个需要哪些条件?

--

另外监听按键的脚本是怎么写的?按照Scene_map里面的x键打开菜单
直接写
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 监听C键的按下。
  #--------------------------------------------------------------------------
  def update_call_menu
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:Y)
      call_menu if @menu_calling && !$game_player.moving?
    end
  end

是不行的吗?
作者: 一毛友城    时间: 2013-4-20 14:34
我也不太会,只能翻出这帖
http://rpg.blue/forum.php?mod=vi ... D368%26typeid%3D368
作者: j433463    时间: 2013-4-20 18:10
一般应该都只是用 $game_temp.reserve_common_event(公共事件ID) 来呼叫公共事件执行吧?

那个按键脚本我看不懂...
作者: asdwds    时间: 2013-4-20 20:26
j433463 发表于 2013-4-20 18:10
一般应该都只是用 $game_temp.reserve_common_event(公共事件ID) 来呼叫公共事件执行吧?

那个按键脚本我 ...

  #--------------------------------------------------------------------------
  # ● 监听取消键的按下。如果菜单可用且地图上没有事件在运行,则打开菜单界面。
  #--------------------------------------------------------------------------
  def update_call_menu
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:B)
      call_menu if @menu_calling && !$game_player.moving?
    end
  end

就是这个,
我只是改成了按Y键触发然后插在了main之前

其实这个不是重点,我想知道监听动作是否有特别要求,
具体怎么写“键被按下”的判断
作者: j433463    时间: 2013-4-20 21:09
本帖最后由 j433463 于 2013-4-20 21:14 编辑

所以说看不懂啊!这一段应该是在地图上按某键开启菜单的吧?
我记得是 Scene_Map 中的,如果您要另外放在 Main 前,
直接放这一段没有类的方法会有作用吗?起码也要这样:

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 监听取消键的按下。如果菜单可用且地图上没有事件在运行,则打开菜单界面。
  #--------------------------------------------------------------------------
  def update_call_menu
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:Y)
      call_menu if @menu_calling && !$game_player.moving?
    end
  end
end

取代原来的 Scene_Map 中 def update_call_menu 才有用吧?
我不明白您目的是什么,看您主楼已经这样了,还没有效果?
唔,好像您主楼最后少了一个 end

这样写,我自己测试的结果,按 S 键是有开启菜单呀!
作者: asdwds    时间: 2013-4-20 21:43
j433463 发表于 2013-4-20 21:09
所以说看不懂啊!这一段应该是在地图上按某键开启菜单的吧?
我记得是 Scene_Map 中的,如果您要另外放在 M ...


class Scene_Map < Scene_Base
   #--------------------------------------------------------------------------
   # ● 监听Y键的按下
   #--------------------------------------------------------------------------
   def a
       @a ||= Input.trigger?(:Y)
       msgbox "a" if @a
   end
end

以上有需要添加些什么吗?他不做动
作者: j433463    时间: 2013-4-20 22:11
我想您误会了,不是 def a 它就会执行的,在脚本中,您要去调用它,好比 def update_call_menu,它会作用是因为在 Scene_Map 中大约第 80 行:

    update_call_menu unless scene_changing?

而 def update_scene 执行是因为第 65 行的

    update_scene if scene_change_ok?

也就是说,因为 def update 是重覆执行的,当它执行到 65 行 if scene_change_ok? 成立时,才会去执行 def update_scene,而此时若 unless scene_changing? 成立,才会去执行 def update_call_menu,此时若按键 :B 被按下,才会去开启窗口,这都有关连的,您 def a 没有任何会执行它的条件,它当然是不会起作用。
作者: asdwds    时间: 2013-4-20 22:16
j433463 发表于 2013-4-20 22:11
我想您误会了,不是 def a 它就会执行的,在脚本中,您要去调用它,好比 def update_call_menu,它会作用是 ...

谢谢,原来是这样,我误会成是设置了一个事件,达成条件时就动作的那样了

-----

关于执行公共事件,写 $game_temp.reserve_common_event(1) 就够了吗?
这个执行是有没有办法用本事件?
作者: j433463    时间: 2013-4-20 22:35
在脚本中,会自动反覆执行的大概只有 def update 了吧,我不清楚 RM 怎么写的设置,不过目前为止,要不断刷新的大概脱不了用这个,或者用回圈方式,要不然不会说一变动就马上运行。

$game_temp.reserve_common_event 其实就是在 Game_Temp 中的一个 def reserve_common_event,括号中的参数只有一个,就是公共事件的 id,所以它只会去调用指定 id 的公共事件,至于被调用的是哪个,是不是本事件没有关系,而 Game_Temp 另有一个 reserved_common_event 可以取得当前调用的事件,所以 $game_temp.reserved_common_event.id 会回传现在用的公共事件 ID。
作者: asdwds    时间: 2013-4-20 22:56
j433463 发表于 2013-4-20 22:35
在脚本中,会自动反覆执行的大概只有 def update 了吧,我不清楚 RM 怎么写的设置,不过目前为止,要不断刷 ...

我用过了,的确是只是调用了公共事件

所以我想问下,有没有以本事件的身份调用公共事件的方法呢?
我想要尽量不使用自带的abcd独立开关,通过脚本在本事件播放出不同的动画,然后开启本事件的某个独立开关
作者: j433463    时间: 2013-4-20 23:07
本帖最后由 j433463 于 2013-4-20 23:30 编辑

不明白您的意思,在要指定某个事件只要用 $game_map.events[事件id] 就可以了,如果是要指定在某个事件上显示动画,就是 $game_map.events[事件id].animation_id = 动画编号,

我忘了本事件的事件 id 是用 0 还是 -1 了...


喔,对了,还有直接指定一个事件的独立开关开启 / 关闭:$game_self_switches[[地图编号,事件编号,"A"]] = true/false

譬如,要指定Map003 的 EV005 事件独立开关C开启,就这样:

$game_self_switches[[3, 5, "C"]] = true


作者: asdwds    时间: 2013-4-21 12:24
j433463 发表于 2013-4-20 23:07
不明白您的意思,在要指定某个事件只要用 $game_map.events[事件id] 就可以了,如果是要指定在某个事件上显 ...

是地图上有好几个士兵事件,看到我后会根据我的主角色播放不同的动作
如果我不是人类的话,他们会冲过来打我,如果我是其他的则各种动作

关于这些判断和动作我都用公共事件写了,所以当发现脚本(我已经写了)通过后我想要让只有看到我的士兵事件执行公共事件
其实打开独立开关,自动执行-执行公共事件的确是可以了,但是我想省下一个独立开关

所以我想问如何通过脚本,让特定事件执行一次公共事件






作者: j433463    时间: 2013-4-21 19:51
方法都在上面了,其实如果没有另外要用到独立开关,用独立开关比较方便吧?有得用却放着不用能算是省吗?
作者: 6rp    时间: 2013-4-21 20:12
我的理解是,公共事件很难启动,反倒是普通事件很容易启动。 你改成普通事件吧,调用它的start方法就行了。
作者: 6rp    时间: 2013-4-22 06:44
你的所谓本事件无非就是一个id而已,利用脚本,可以让动画在指定事件上发生,也能改动任何事件的自用开关。这个都不是问题,比起调用公共事件而言,这些反倒很简单!




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