Project1

标题: Rgss系列写3版本通用的脚本要注意什么? [打印本页]

作者: 文雅夕露    时间: 2018-4-6 11:55
标题: Rgss系列写3版本通用的脚本要注意什么?
脚本新人虽然已经写过几个通用的脚本。
但并不能说是"通用",只能说修改一下语句才能到各版本里正常使用脚本。
毕竟Rgss系列的3版本的代码并不是一致的。
所以想请教一下各位前辈。
写这类型的通用的脚本要注意什么?
就是说一段脚本放入3个Rgss系列的脚本编辑器里都能使用,且不需要修改。
作者: ⑨姐姐    时间: 2018-4-6 12:12
比如涉及到一些和版本没什么关联的,或者说比较基础的部分,比如全键盘操作啊,文件缺失处理啊,各版本通用的就会多一些。

涉及到游戏具体内容的,比如角色、地图、战斗这些,就很难通用了……
作者: MireniamuYuki    时间: 2018-4-6 12:42
  1. p "hello world"
复制代码

作者: 零教授    时间: 2018-4-6 12:43
基本上设计到Party类、Troop类、Map类含大量术语的都不能通用
作者: guoxiaomi    时间: 2018-4-6 12:57
在xp上能用的,一般改改就能上vxva,反之就可能原地爆炸……
作者: chd114    时间: 2018-4-6 13:29
想要偷懒全通用不太可能,真要这么干你还不如直接把默认脚本全部推翻重写···即使推掉重写,这三个的ruby版本有高低差别,低版本的相比高版本还少了点东西呢

作者: 芯☆淡茹水    时间: 2018-4-6 13:59
最基本的,自动判断当前是哪个版本,判断好了一切都好办了。
其它的一些无非就是多写一点脚本而已。
if 版本 == A
  class AAA
  end
elsif 版本 == B
  class AAB
  end
end
作者: 文雅夕露    时间: 2018-4-6 14:03
芯☆淡茹水 发表于 2018-4-6 13:59
最基本的,自动判断当前是哪个版本,判断好了一切都好办了。
其它的一些无非就是多写一点脚本而已。
if 版 ...

版本判断?直接可以用"VA""VX""XP"这样来判断吗?
芯前辈的脚本好像也是这么做的...还用了挺多问号冒号表达式...
但是我不知道这个方法是不是真的能放到各编辑器里执行...
作者: 芯☆淡茹水    时间: 2018-4-6 14:17
本帖最后由 芯☆淡茹水 于 2018-4-6 14:18 编辑
文雅夕露 发表于 2018-4-6 14:03
版本判断?直接可以用"VA""VX""XP"这样来判断吗?
芯前辈的脚本好像也是这么做的...还用了挺多问号冒号表 ...


你可以试试最简单的版本判断,放到每个版本 p 一下看是什么。
只要外挂脚本没有增加定义对应的模块,或者手欠把默认模块删掉的,就不会判断错的。
  1. module Edition
  2.   def self.type
  3.     return defined?(Sound) ? (defined?(SceneManager) ? "VA" : "VX") : "XP"
  4.   end
  5. end
  6. p Edition.type
复制代码

作者: shitake    时间: 2018-4-6 14:29
说下三版的ruby版本差异

va 是1.9 xp和vx都是1.8
所以va是有fiber的 而vx和xp则没有
但是!ruby1.8依然有callcc 所以就有了基于callcc来实现的fiber http://www.khjk.org/log/2010/jun/fibr.html

更多api变动相关:
en: https://stackoverflow.com/questi ... by-1-8-and-ruby-1-9

zh-cn: http://stackoverflow.org.cn/front/ask/view?ask_id=22301

作者: 芯☆淡茹水    时间: 2018-4-6 15:11
其实我那样判断还可以更保险些,判断独有的数据结构
比如 XP 独有的 RPG::Cache  ; VX 独有的 RPG::Area
  1. module Edition
  2.   def self.type
  3.     return defined?(RPG::Cache) ? "XP" : (defined?(RPG::Area) ? "VX" : "VA")
  4.   end
  5. end
  6. p Edition.type
复制代码

作者: IamI    时间: 2018-4-6 23:28
要注意的事情:
不要写。
专心做游戏。
作者: xp兔子徒弟    时间: 2018-4-7 01:48
三版通大佬,太可怕了!给大佬递冰阔落
我觉得xp就挺好了
作者: 晴兰    时间: 2018-4-12 02:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 芯☆淡茹水    时间: 2018-4-12 08:16
晴兰 发表于 2018-4-12 02:19
不要用版本标签来判断可用方法!!!
直接用可用方法判断可用方法
不要用版本标签来判断可用方法!!!

主要是为了追加定义,其它的还好。
  1. if defined? Game_Interpreter
  2.   class Game_Interpreter
  3.     def abc
  4.     end
  5.   end
  6. elsif defined? Interpreter
  7.   class Interpreter
  8.     def abc
  9.     end
  10.   end
  11. end
复制代码


很多时候只是想偷个懒而已。
  1. interpreter_class = defined? Game_Interpreter ? Game_Interpreter : Interpreter
  2. interpreter_class.class_eval do
  3.   def abc
  4.   end
  5. end
复制代码


像这样一些,还是你说的比较保险一些:

  1. if defined? Cache
  2.   return Cache.picture(image_name)
  3. elsif defined? RPG::Cache
  4.   return RPG::Cache.picture(image_name)
  5. end
复制代码


作者: summer92    时间: 2018-4-12 13:12
晴兰 发表于 2018-4-12 02:19
不要用版本标签来判断可用方法!!!
直接用可用方法判断可用方法
不要用版本标签来判断可用方法!!!

真大神也,说不定ruby各版本可以串用,使人豁然开朗




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