Project1

标题: 伪·内嵌表达式 [打印本页]

作者: 叶子    时间: 2007-1-6 19:30
标题: 伪·内嵌表达式
内嵌表达式本是很好用的东东,可惜在数据库中的物品名称、描述、事件的对话等等都无法使用,使用下面这个方法就可以把字符串中的内嵌表达式还原
  1. .gsub(/\#\{(.*?)\}/){eval($1)}
复制代码
下面这段用来测试其有效性
  1. $num1 = 874
  2. $num2 = 253
  3. text = 'num are #{$num1} and #{$num2}'
  4. p text
  5. text = text.gsub(/\#\{(.*?)\}/){eval($1)}
  6. p text
复制代码
具体的应用方法有很多,其中之一是把它加入各个Window类有draw_text的地方。如果认为这种方法比较麻烦的话,把下面这段东西插入Main之上,就可以把内嵌表达式扩展到“几乎”所有需要描绘文字的地方了。为什么说几乎?因为有些脚本是逐字描绘的,所以这些脚本还是要在其中插入把字符串中的内嵌表达式还原的语句。
  1. #==============================================================================
  2. # 伪·内嵌表达式 v1.0
  3. # By 叶子
  4. #==============================================================================
  5. # 1-5-2007 v1.0
  6. #==============================================================================
  7. # 使用方法:插入到Main之上,这样就可以在数据库、事件等等中使用内嵌表达式了
  8. # 内嵌表达式说明请打开帮助,搜索“内嵌表达式”
  9. #==============================================================================

  10. class Bitmap
  11.   alias fake_exp_draw_text draw_text
  12.   def draw_text(x = 0, y = 0, width = 0, height = 0, str = "", align = 0)
  13.     if y.is_a?(String)
  14.       str = y
  15.       rect = x
  16.       x = rect.x
  17.       y = rect.y
  18.       align = width
  19.       width = rect.width
  20.       height = rect.height
  21.     end
  22.     fake_exp_draw_text(x, y, width, height, str.gsub(/\#\{(.*?)\}/){eval($1)}, align)
  23.   end
  24. end
  25. module RPG
  26.   class EventCommand
  27.     def parameters
  28.       if @code == 101 or @code == 401
  29.         fake_exp_parameters = @parameters.clone
  30.         fake_exp_parameters[0].gsub!(/\#\{(.*?)\}/){eval($1)}
  31.         return fake_exp_parameters
  32.       else
  33.         return @parameters
  34.       end
  35.     end
  36.   end
  37. end
复制代码

使用举例:在限制使用次数或有冷却时间的特技名称或描述中显示使用次数或冷却时间;特技等级;在对话中插入各种变量,例如物品个数,省了代入变量这一步;随时可变的角色、职业、怪物、物品、特技名字,等等。
[LINE]1,#dddddd[/LINE]同时附上帮助中内嵌表达式的说明:[quote]内嵌表达式在字符串里面,可以用 #{变量名} 的形式把变量的内容嵌入在字符串当中。

game = "RPG"
print "#{game} Maker XP"         # => RPG Maker XP

上述示例里,第一行是为 game 变量赋值代入字符串“RPG”。第二行里面,其中 #{game} 是表示直接嵌入变量 game 的值字符串“RPG”,和后面的“ Maker XP”组合在一起,从而输出一个新的字符串。 RPGXP 的事件指令「显示文章」里,在文章中使用 \V[n] 和 \N[n] 控制码可以把变量的值和角色的名称作为信息嵌入文字中,这个功能好像和那个十分相似。

这个功能,让我们举例来说明在预置脚本中应如何使用。

print("文件 #{filename} 没找到。")

print 的显示内容应附加上括号 (),如果其优先顺序不易混淆的话可以省略(本章 print 的使用示例介绍中全部省略了括号)。预置脚本中基本上都统一使用有括号,所以在这儿也加上一个。

这个是当然,

print("文件 " + filename + " 没找到。")

像这样写也可以,使用内嵌表达式的方法会使读取程序变得很容易。

另外内嵌表达式和控制码一样,在单引号 '' 中间的字符串里使用也会无效。[quote]

              [本贴由 叶舞枫 于 2007-4-28 13:28:56 进行了编辑]
作者: 叶子    时间: 2007-1-6 19:30
标题: 伪·内嵌表达式
内嵌表达式本是很好用的东东,可惜在数据库中的物品名称、描述、事件的对话等等都无法使用,使用下面这个方法就可以把字符串中的内嵌表达式还原
  1. .gsub(/\#\{(.*?)\}/){eval($1)}
复制代码
下面这段用来测试其有效性
  1. $num1 = 874
  2. $num2 = 253
  3. text = 'num are #{$num1} and #{$num2}'
  4. p text
  5. text = text.gsub(/\#\{(.*?)\}/){eval($1)}
  6. p text
复制代码
具体的应用方法有很多,其中之一是把它加入各个Window类有draw_text的地方。如果认为这种方法比较麻烦的话,把下面这段东西插入Main之上,就可以把内嵌表达式扩展到“几乎”所有需要描绘文字的地方了。为什么说几乎?因为有些脚本是逐字描绘的,所以这些脚本还是要在其中插入把字符串中的内嵌表达式还原的语句。
  1. #==============================================================================
  2. # 伪·内嵌表达式 v1.0
  3. # By 叶子
  4. #==============================================================================
  5. # 1-5-2007 v1.0
  6. #==============================================================================
  7. # 使用方法:插入到Main之上,这样就可以在数据库、事件等等中使用内嵌表达式了
  8. # 内嵌表达式说明请打开帮助,搜索“内嵌表达式”
  9. #==============================================================================

  10. class Bitmap
  11.   alias fake_exp_draw_text draw_text
  12.   def draw_text(x = 0, y = 0, width = 0, height = 0, str = "", align = 0)
  13.     if y.is_a?(String)
  14.       str = y
  15.       rect = x
  16.       x = rect.x
  17.       y = rect.y
  18.       align = width
  19.       width = rect.width
  20.       height = rect.height
  21.     end
  22.     fake_exp_draw_text(x, y, width, height, str.gsub(/\#\{(.*?)\}/){eval($1)}, align)
  23.   end
  24. end
  25. module RPG
  26.   class EventCommand
  27.     def parameters
  28.       if @code == 101 or @code == 401
  29.         fake_exp_parameters = @parameters.clone
  30.         fake_exp_parameters[0].gsub!(/\#\{(.*?)\}/){eval($1)}
  31.         return fake_exp_parameters
  32.       else
  33.         return @parameters
  34.       end
  35.     end
  36.   end
  37. end
复制代码

使用举例:在限制使用次数或有冷却时间的特技名称或描述中显示使用次数或冷却时间;特技等级;在对话中插入各种变量,例如物品个数,省了代入变量这一步;随时可变的角色、职业、怪物、物品、特技名字,等等。
[LINE]1,#dddddd[/LINE]同时附上帮助中内嵌表达式的说明:[quote]内嵌表达式在字符串里面,可以用 #{变量名} 的形式把变量的内容嵌入在字符串当中。

game = "RPG"
print "#{game} Maker XP"         # => RPG Maker XP

上述示例里,第一行是为 game 变量赋值代入字符串“RPG”。第二行里面,其中 #{game} 是表示直接嵌入变量 game 的值字符串“RPG”,和后面的“ Maker XP”组合在一起,从而输出一个新的字符串。 RPGXP 的事件指令「显示文章」里,在文章中使用 \V[n] 和 \N[n] 控制码可以把变量的值和角色的名称作为信息嵌入文字中,这个功能好像和那个十分相似。

这个功能,让我们举例来说明在预置脚本中应如何使用。

print("文件 #{filename} 没找到。")

print 的显示内容应附加上括号 (),如果其优先顺序不易混淆的话可以省略(本章 print 的使用示例介绍中全部省略了括号)。预置脚本中基本上都统一使用有括号,所以在这儿也加上一个。

这个是当然,

print("文件 " + filename + " 没找到。")

像这样写也可以,使用内嵌表达式的方法会使读取程序变得很容易。

另外内嵌表达式和控制码一样,在单引号 '' 中间的字符串里使用也会无效。[quote]

              [本贴由 叶舞枫 于 2007-4-28 13:28:56 进行了编辑]
作者: 亿万星辰    时间: 2007-1-6 19:52
叶子研究的东西也越来越深入了{/fd}
作者: 轮回者    时间: 2007-1-6 21:35
好强悍~{/cy}
作者: 风雪优游    时间: 2007-1-7 22:10
感觉应该很有用……但我是脚本盲……只能支持一个了
作者: ikki    时间: 2007-1-7 22:32
{/jy}这个可以节约数据库吗?可以就爽啦{/se}
作者: 小传子    时间: 2007-1-8 01:20
print("好强- -")

作者: 雷欧纳德    时间: 2007-1-8 07:23
其实内嵌表达式 如果素全局变量、实例变量和类变量可以不需要花括号的 - -b

$num = 1

p "the num is #$num"


作者: 、一八月永    时间: 2007-4-4 18:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 翼狼    时间: 2007-4-4 21:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 叶子    时间: 2007-4-5 15:34
以下引用翼狼于2007-4-4 13:04:24的发言:

叶子可以晋升为脚本狂人了……
还是比较期待战棋系统的完成

我还只是“脚本工”而已{/pz}只能照猫画虎地写代码

白沙的战棋系统还得看看策划{/cy}
作者: gpra8764    时间: 2007-4-7 23:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 叶舞枫    时间: 2007-4-28 21:28
发布完毕,
VIP += 2
http://rpg.blue/web/htm/news698.htm





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