Project1

标题: 自定义事件出现条件的刷新问题 [打印本页]

作者: 改名测试000    时间: 2008-8-9 02:23
标题: 自定义事件出现条件的刷新问题
我做了个自定义事件出现条件脚本,但是刷新很有问题,请教一下各位大大怎么改
脚本
  1. class Game_Event < Game_Character
  2.   def conditions_met?(page)
  3.     c = page.condition
  4.     if c.switch1_valid      # 开关1
  5.       return false if $game_switches[c.switch1_id] == false
  6.     end
  7.     if c.switch2_valid      # 开关2
  8.       return false if $game_switches[c.switch2_id] == false
  9.     end
  10.     if c.variable_valid     # 变量
  11.       return false if $game_variables[c.variable_id] < c.variable_value
  12.     end
  13.     if c.self_switch_valid  # 独立开关
  14.       key = [@map_id, @event.id, c.self_switch_ch]
  15.       return false if $game_self_switches[key] != true
  16.     end
  17.     if c.item_valid         # 物品
  18.       item = $data_items[c.item_id]
  19.       return false if $game_party.item_number(item) == 0
  20.     end
  21.     if c.actor_valid        # 角色
  22.       actor = $game_actors[c.actor_id]
  23.       return false unless $game_party.members.include?(actor)
  24.     end
  25. #仅仅加了一句话而已↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  26.     return eval(page.list[0].parameters[0]) if page.list[0].code == 108
  27. #↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
  28.     return true   # 条件符合
  29.   end
  30. end
复制代码

其实就是在Game_Event的conditions_met?的return true前加了一句话
  1.     return eval(page.list[0].parameters[0]) if page.list[0].code == 108
复制代码

意思是如果事件第一句是注释,那么就判断第一句,如果是false或nil就不出现事件,否则就出现事件

然后发现可以顺利执行,但是刷新很有问题,当我满足条件是并不能立即出现事件,满足条件后按下ESC键(菜单)再返回就能出现事件(因为返回的时候刷新了)


我的事件是:
出现条件:无
行走图:无
运动方式:固定
事件块参数:步行动画on,其余off
优先级:角色下方
触发方式:自动执行
事件指令:注释:$game_player.y < 5
          显示文章:来这里干什么,下去下去
          设置移动轨迹:主角 向下移动

工程:http://rpg.blue/upload_program/files/Project4_98648556.rar

不要用太耗FPS的方法,因为耗FPS的话还不如用并行+判断 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 越前リョーマ    时间: 2008-8-9 02:33
话说不操作大量变量开关的并行事件一般是不大卡的。
作者: kissye    时间: 2008-8-9 02:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 改名测试000    时间: 2008-8-9 03:18
以下引用kissye于2008-8-8 18:43:47的发言:
那为什么不在满足条件后顺便刷新一下?

找不到地方……
作者: 沉影不器    时间: 2008-8-9 04:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-8-9 15:27
以下引用沉影不器于2008-8-8 20:19:45的发言:

效果上,跟开关控制事件页有什么不一样吗为啥不能用开关或变量解决

我的事件出现条件是主角y坐标<5
如果用开关变量,那么就必须有一个并行事件随时判断角色y坐标,事件解释器的效率比较低,同一张地图上有多个需要自定义条件的事件的话会更卡……
用这个东西其实只是为了减少FPS损耗……
作者: 小幽的马甲    时间: 2008-8-9 15:36
手机上无法做出具体回答…话说有些调用这个方法的语句可能会在反回true时才执行一些东西…你把那个存到全局变量试试…
作者: ★_茄孓    时间: 2008-8-9 16:39
循环下事件
在Scene_Map里的update判断。
作者: zh99998    时间: 2008-8-9 18:02
以下引用★_茄孓于2008-8-9 8:39:36的发言:

循环下事件
在Scene_Map里的update判断。

不懂
作者: zh99998    时间: 2008-8-10 20:00
没人会?
作者: 破咩龙轩    时间: 2008-8-10 20:32
我不会! [LINE]1,#dddddd[/LINE]版主对此帖的评论:『疑似灌水……』,积分『-5』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: haha7360    时间: 2008-8-10 20:36
````脚本不能乱用啊..{/dy}
作者: Beside    时间: 2008-8-10 20:43
经过研究后的方法

在Scene_Map的的update里加一个$game_map.refresh

未经测试 而且可能引起其他问题  你试试看
作者: 亿万星辰    时间: 2008-8-10 20:46
以下引用Beside于2008-8-10 12:43:44的发言:

经过研究后的方法

在Scene_Map的的update里加一个$game_map.refresh

未经测试 而且可能引起其他问题  你试试看

没错,因为关于事件条件的判断并不是每时每刻都在进行的,而是只在整个地图进行refresh的同时才去做这个判断,而一般的变量、开关等等的操作都伴随这这样的一次refresh。
作者: Beside    时间: 2008-8-10 20:51
以下引用亿万星辰于2008-8-10 12:46:38的发言:


以下引用Beside于2008-8-10 12:43:44的发言:

经过研究后的方法

在Scene_Map的的update里加一个$game_map.refresh

未经测试 而且可能引起其他问题  你试试看


没错,因为关于事件条件的判断并不是每时每刻都在进行的,而是只在整个地图进行refresh的同时才去做这个判断,而一般的变量、开关等等的操作都伴随这这样的一次refresh。


{/cy}感谢指点
作者: zh99998    时间: 2008-8-12 00:11
再顶一下看看有更好的答案否?
每帧刷新map会卡,还不如用并行事件……
作者: 越前リョーマ    时间: 2008-8-12 01:11
以下引用zh99998于2008-8-11 16:11:29的发言:

再顶一下看看有更好的答案否?
每帧刷新map会卡,还不如用并行事件……

所以没人的话你就用并行事件吧……   - -
作者: Beside    时间: 2008-8-12 01:35
以下引用zh99998于2008-8-11 16:11:29的发言:

再顶一下看看有更好的答案否?
每帧刷新map会卡,还不如用并行事件……

return eval(page.list[0].parameters[0]) if page.list[0].code == 108
改成

if page.list[0].code == 108
   return eval(page.list[0].parameters[0])
   $game_map.refresh
end

作者: 亿万星辰    时间: 2008-8-12 03:25
以下引用Beside于2008-8-11 17:35:57的发言:
return eval(page.list[0].parameters[0]) if page.list[0].code == 108
改成

if page.list[0].code == 108
  return eval(page.list[0].parameters[0])
  $game_map.refresh
end

这个理论上感觉没用,不是要在这里refresh,而是conditions_met?这个方法只在refresh的时候才会进行判断。
作者: Beside    时间: 2008-8-12 04:01
- -逻辑错误

早上群里讨论了下加在事件脚本里貌似可行 加在注释后面
作者: zh99998    时间: 2008-8-12 15:45
以下引用Beside于2008-8-11 20:01:26的发言:

- -逻辑错误

早上群里讨论了下加在事件脚本里貌似可行 加在注释后面

像上面那样当然是不可行的,我说的可以是用事件的方法加刷新,不过那种方法似乎不能用呃
- -逻辑错误
作者: zh99998    时间: 2008-8-15 21:19
再顶下……
作者: zh99998    时间: 2008-8-18 16:37
再顶……
作者: 沉影不器    时间: 2008-8-19 16:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-8-20 03:57
thx,但还是有点问题,当y=5时再按一下↑,接着就会触发事件
而我想当角色行走图移动完成后再刷新,怎么弄
把那个事件换成【p 1】就很明显的看出,按下↑先弹出框,点了确定后才会移动。




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