Project1

标题: 在事件中调用脚本方法(函数?)的问题 [打印本页]

作者: xiaoxin3357    时间: 2014-11-3 11:44
标题: 在事件中调用脚本方法(函数?)的问题
最近用RPGVX尝试了一下做塔防游戏,需要用到大量的变量判断

事件里的脚本只能写几行 不够用,然后我想起可以在脚本库里编一个方法(额,RPG里似乎叫函数?)然后在事件中调用,所以想问一下怎么在事件中调用函数


然后函数的内容大概是这样

需要接收四个数字a,b,c,d参数

if(a=b and c=d)
   开关1打开
elsif(a+1=b and c+1=d)
   开关1打开
elsif(a-1=b and c-1=d)
   开关1打开
else
   开关1关闭


求大神们告知这种多条件判断的方法具体要怎么写,然后写在哪里,在事件中如何调用非常感谢
作者: 怪蜀黍    时间: 2014-11-3 11:53
1、打开脚本编辑器,新建一个空白页
2、输入以下内容
  1. def abc(a,b,c,d)
  2.   if a==b and c==d
  3.      $game_switches[1] = true
  4.   elsif a+1==b and c+1==d
  5.      $game_switches[1] = true
  6.   elsif a-1==b and c-1==d
  7.      $game_switches[1] = true
  8.   else
  9.      $game_switches[1] = false
  10.   end
  11. end
复制代码
$game_switches[1]表示开关1
3、新建事件脚本,输入
  1. abc(1,2,3,$game_variables[1])
复制代码
其中括号里是4个参数,自己设计,吾只是举例,4个参数用半角逗号隔开$game_variables[1]表示变量1
作者: VIPArcher    时间: 2014-11-3 12:00
虽然没用过VX但是应该都一样的,你把这些需要执行的东西写到事件指令的解释器里。
举个例子(VA)
  1. class Game_Interpreter
  2.   def vip_control_sw(a,b,c,d)
  3.     if a==b and c==d
  4.       $game_switches[1] = true
  5.     elsif a+1 == b and c+1 == d
  6.       $game_switches[1] = true
  7.     elsif a-1 == b and c-1 = d
  8.       $game_switches[1] = true
  9.     else
  10.       $game_switches[1] = false
  11.     end
  12.   end
  13. end
复制代码
然后事件脚本调用vip_control_sw(a,b,c,d)就好了
未测试
作者: RyanBern    时间: 2014-11-3 13:09
第一次来VX区……求脸熟
RUBY 代码复制
  1. def func_rb(a, b, c, d)
  2.   $game_swtiches[1] = a + d == b + c && (a - b).abs / 2 == 0
  3. end

作者: 怪蜀黍    时间: 2014-11-3 16:25
VIPArcher 发表于 2014-11-3 12:00
虽然没用过VX但是应该都一样的,你把这些需要执行的东西写到事件指令的解释器里。
举个例子(VA)然后事件 ...


封装在class Game_Interpreter类可以使脚本层次更加清晰,如果不封装,亦没有关系喵~
不封装的方法【几乎】相当于是在【Kernel核心模块】下定义的方法,【几乎】是全局方法,【几乎】任何地方都可以调用喵~
以上结论吾没有查证过,但是下面验证一下【几乎】喵~
下面吾设计了一个有趣的实验
先输入以下脚本并运行,结果先显示1,再显示2
  1. module Kernel
  2.   def abc
  3.     p 1
  4.   end  
  5. end
  6. alias new_abc abc
  7. def abc
  8.   new_abc
  9.   p 2
  10. end  
  11. abc
复制代码
但是要是反过来,却只显示1,不显示2
  1. def abc
  2.   p 1
  3. end
  4. module Kernel
  5.   alias new_abc abc
  6.   def abc
  7.     new_abc
  8.     p 2
  9.   end
  10. end
  11. abc
复制代码
于是得出结论:【不封装】是被【Kernel模块】封装的喵~
下面验证结论:【不封装】和【Kernel模块】几乎是等效的

  1. module Kernel
  2.   def abc
  3.     p self
  4.   end  
  5. end
  6. abc
  7. p self
  8. # 结果是输出2次main
复制代码
因此得出结论:不封装和归为Kernel模块几乎是等效的喵
以上结论都是通过实验得出,如有错误还请指正喵~~~
作者: cimmy210    时间: 2015-2-20 20:17
我用的 RPG Maker XP, 这样做好像不行?
作者: cimmy210    时间: 2015-2-20 20:41
怪蜀黍 发表于 2014-11-3 11:53
1、打开脚本编辑器,新建一个空白页
2、输入以下内容$game_switches[1]表示开关1
3、新建事件脚本,输入其 ...

我用的 RPG Maker XP, 这样做好像不行?

详情:

https://rpg.blue/forum.php?mod=viewthread&tid=376771




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