Project1

标题: 新手教程——在脚本中显示和使用变量的一般方法 [打印本页]

作者: 光的圆周率    时间: 2010-10-16 13:28
标题: 新手教程——在脚本中显示和使用变量的一般方法
本帖最后由 光的圆周率 于 2010-10-16 13:51 编辑

新手教程(脚本类):在脚本中显示和使用变量的一般方法~


    大家好~我是VX教程出版社的成员光的圆周率,这是我的第一篇教程,如果有讲错讲差的地方请指正哦~今天俺为大家讲的是在脚本中显示和使用变量的一般方法,本文面向脚本新手,是以大致掌握脚本基础知识概貌为目的,所以本教程所提及的某些难点的具体内容没有详细说明或使用了一些不正规的方式说明,请各位谅解。
        经常下载上传脚本的同学都应该知道,脚本中有两种东西叫做常量变量。
        什么是常量呢?依我看来,常量就是我们经常会用的数字、字符串了,比如我们问某种型号的电脑的零售价是多少?回答为:3000元,那么这个3000便是常量,但如果这种型号还有许多配置,价格浮动在3000~10000元,那么这就是我们学过的未知数,对于这样的未知数我们经常会用一个变量来表示。
        变量就是我们用一个符号来表示一个我们想要表示的概念,比如我们可以用price这个变量来表示某种型号电脑价格.变量与常量的区别就在变量是可以变动的,也就是说我们用变量来定义一个概念后,接下来就会来操作这个变量使它变化.而我们不能让一个常量变化,比如我们能让price = 3000 但不能让10000=3000。
        当然常量和变量的概念是很好理解啦~如何在脚本中应用呢?请跟我来.......
        
        很多同学会问在RPG Maker XP中在菜单里有显示游戏步数的地方,但是我们的小妹妹VX米有,咋办呢?这次,咱们将动刀主管菜单显示的Scene_Menu君!
        
        首先,请打开RPG Maker VX(本例使用1.02版本),请进入程序界面并打开您测试的工程后在位于顶部的“工具”菜单中找到脚本编辑器(或者直接按F11键)打开脚本编辑器(如图:01-00)并选择脚本Game_Party。
        
(图01-00)
        如图所示,本脚本的主要功能是“处理同伴的类。包含金钱以及物品的信息”。因此我们要找的东西也在这里,是啥呢?——管理角色步数的变量。
        要找到这个变量,我们可以根据在开头的注释和语句来知道“attr_reader   :steps                    # 步数”
┍————————————————————————┒
|Tips1:                                                         |
|Q:啥是attr_reader?                                      |
|A:由于版面原因,请移步:                             |
| http://rpg.blue/web/htm/news391.htm  |

     然后又使用编辑器自带的搜索功能(新人一定要很熟练搜索功能啊..无论是在论坛还是在脚本编辑器)跳转到本脚本154行(如图:01-01)

(图01-01)
这里便是上文提到的steps变量了,没准会有人问到“LZ啊..你咋知道这是存储全局步数的变量?万一它只存储单一地图的呢?”关于这个呢,可以在下面的脚本中于265行找到一个处理主角在地图上走一步的效果的方法,在267行  def on_player_walk 下面加上一句语句“p "角色已行走:#{$game_party.steps}步"”,然后在游戏中放置两张地图并设置一个场景移动的事件,你会发现每走一步便会弹出一个对话框告诉你角色行走的总步数,这里的$game_party是一个全局变量,在Scene_Title类中会将其组定义的类实例化。
   既然知道了我们要找的储存游戏角色行走步数的变量了,那么下面我们来对我们今天的主角Scene_Menu开刀吧。
   因为本文主要讲解在脚本中显示和使用变量的一般方法,因此不深入研究窗口的显示,请期待八云紫大人的关于窗口显示的教程 ^ . ^
   请将下面脚本插入到Main脚本之前,Window_Base脚本之后任一位置:
  1. #==============================================================================
  2. # ■ Window_Steps
  3. #------------------------------------------------------------------------------
  4. #  显示角色步数的窗口。
  5. #==============================================================================

  6. class Window_Steps < Window_Base
  7. #--------------------------------------------------------------------------
  8. # ● 初始化对像
  9. # x : 窗口 X 座标
  10. # y : 窗口 Y 座标
  11. #--------------------------------------------------------------------------
  12. def initialize(x, y)
  13. super(x, y, 160, WLH + 32)
  14. refresh
  15. end
  16. #--------------------------------------------------------------------------
  17. # ● 刷新
  18. #--------------------------------------------------------------------------
  19. def refresh
  20. self.contents.clear
  21. x = 4
  22. y = 0
  23. width = 120
  24. value = $game_party.steps.to_s
  25. cx = contents.text_size("步").width
  26. cx1 = contents.text_size("已行走").width
  27. self.contents.font.color = system_color
  28. self.contents.draw_text(x, y, width-cx1-2, WLH, "已行走", 2)
  29. self.contents.font.color = normal_color
  30. self.contents.draw_text(x, y, width-cx-2, WLH, value, 2)
  31. self.contents.font.color = system_color
  32. self.contents.draw_text(x, y, width, WLH, "步", 2)
  33. end
  34. end
复制代码

        在上面的脚本中,有一些对变量的赋值语句比如:width = 120 这里不难理解,就是对width这个变量名赋予了数值120的值,大家还可以发现有我们数学中的+ -符号的出现,比如:"width-cx-2"语句,这里在这个位置的赋值就是将width的变量值减去cx的变量值在减去2
        那么如何判断一个变量属于什么类型呢?
        请试试这几个语句

  1. p "1".class
  2. p 1.class
  3. p 0.1.class
  4. p 10000000000.class
  5. a = "1";p a.class
  6. a = 0.1;p a.class
  7. a = 1;p a.class
  8. a = 10000000000.class;p a.class
复制代码

        如果不出意外的话输出的结果应该为String Fixnum Float Bignum String Float Fixnum Bignum
        在这里,Fixnum,Float,Bignum都是属于数值类,它们的关系如下:
        
        在这里,Integer其实就是我们数学中所说的整数(包括正整数,负整数和0),Float可以在一定范围内理解为就是小数.超长整数Bignum所能处理的整数的长度只受内存大小的限制. 若运算结果在Fixnum的范围内,则将其变为Fixnum;若超过Fixnum的范围,则将其扩展为Bignum.关于数值的运算的进一步了解请参阅关于Ruby语言中数值运算的相关资料.
        于是,咱们有了显示角色步数的窗口之后,咱们就将它添加到菜单界面吧~请切换到脚本编辑器中,打开Scene_Menu的脚本页面,并在23行下方插入@steps_window = Window_Steps.new(0,306)语句 然后在35行下方插入@steps_window.dispose语句,完成之后,脚本页面就变成了这个样子(图01-02)
        
图(01-02)
        保存之后,请测试游戏,如果不出意外的话就可以看到新增的脚步窗口了吧(图01-03)~
        
(图01-03)

     如果你够邪恶,可能会想到使用这个步数来做一些其它的效果,比如说七步断肠散、测试游戏的脚步限制、走XX步才能获取XX物品和技能等等,这时候怎么做呢?下面我就以每走10步后弹出显示步数的窗口和增加300单位的金钱为例。

     我们还是回到Game_Party脚本页,在21行初始化对像下方,25~33行之间插入初始化用于储存上一次已处理的步数变量的语句:
     @checked_steps=0
  这句语句的含义是初始化@checked_steps变量并将其赋值为0
     向下翻页到266行左右  # ● 主角在地图上走一步的效果 处,在def on_player_walk下方插入语句:
  1. if @steps - 10 == @checked_steps
  2. p "角色已行走:#{$game_party.steps}步,系统为您增加300G金钱"
  3. gain_gold(300)
  4. @checked_steps = @steps
  5. elseif @steps - 20 == @checked_steps
  6. p "角色又多行走了:20步,系统为您增加200G金钱"
  7. gain_gold(300)
  8. else
  9. p "您在一定步数的时候会有惊喜哦^.^"
  10. end
复制代码

    在上面的脚本中,使用到了一个判断语句 if语句,它的结构是:
If(条件1)
....(处理的语句1)
elsif(条件2)
....(处理的语句2)
else
....(处理的语句3)
end
在这个判断语句中:
当满足条件1为True也就是真时执行处理的语句1
elsif 就是else if的简写,就像它的意思一样,除此之外当......时;那么当不满足条件1为True也就是False(假),但有满足条件2时执行处理的语句2,这里的elsif可以大量使用,但是数量太多会造成处理效率低下
当所有条件都不满足时,系统会执行处理的语句3
当然,这里的elseif else and是可选的.
在条件判断中, ==运算符是全等于的含义而并不是赋值的含义(与VB等语言不同),除此之外还有大于:>,小于:<,大于或等于:>=,小于或等于:<=
那么我们就可以得出上面语句的中文大意为:
当@steps 变量的值减去10之后的值 全等于 @checked_steps变量的值时:

  输出值为"角色已行走:#{$game_party.steps}步,系统为您增加300G金钱" 的字符串
  调用方法:gain_gold(300)

  给@checked_steps 变量赋值为变量@steps的值
如果不满足上面的条件而满足@steps变量的值减去20 全等于@checked_steps 变量的值时

  输出值为"角色又多行走了:20步,系统为您增加200G金钱"的字符串
  调用方法:gain_gold(200)
如果上面的条件全部都不满足时:

  输出值为"您在一定步数的时候会有惊喜哦^.^"的字符串

判断过程结束

这里的gain_gold(金钱数)命令是在本脚本中有定义:
  1. #--------------------------------------------------------------------------
  2. # ● 获得/损失金钱
  3. # n : 金钱数量
  4. #--------------------------------------------------------------------------
  5. def gain_gold(n)
  6. @gold = [[@gold + n, 0].max, 9999999].min
  7. end


复制代码
这里的@gold = [[@gold + n, 0].max, 9999999].min扩展开来就是:
  1. if n < 9999999 - @gold and @gold + n >0
  2. @gold += n
  3. elsif @gold + n <0
  4. @gold = 0
  5. end
复制代码

在上面的扩展脚本中 +=运算符是自运算符它等同于
@gold =@gold + n
同理@gold -= n等同于:
@gold =@gold - n
自运算符还有:+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||  它们与=号之间没有间隔

  于是,我们回到主菜单界面并开始测试游戏
没有满足步数为10步时弹出对话框:


当走到10步时由于满足了上面对于的步数判断条件:
if @steps - 10  == @checked_steps
将会弹出对话框:

并增加了金钱300G,此时的菜单为:

达到了我们需要的效果,由于版面的原因,后面的效果请自行测试.
本教程结束,感谢您耐心地观看,欢迎各位指出问题和提出建议.谢谢~
本教程使用的范例工程:
新手教程00001.rar (240.63 KB, 下载次数: 50, 售价: 1 星屑)
本教程的电子版本文档(DOC格式):
新手教程1.rar (671.83 KB, 下载次数: 46, 售价: 1 星屑)

1.jpg (225.91 KB, 下载次数: 21)

1.jpg

作者: 微叶    时间: 2010-10-16 13:36
支持!突然发现我抢到了沙发?
作者: 夕阳武士    时间: 2010-10-16 13:38
很好,前辈效率好高呀~除了任务的基本要求还讲解了相关的其他内容,很详细,图解很到位,并且提供了word版,so,决定给999经验奖金{:nm_4:}
作者: 红灯    时间: 2010-10-16 13:45
很佩服出教程的同学啊,真是辛苦了。
作者: 429259591    时间: 2010-10-16 14:08
收藏了后,慢慢研究
作者: 禾西    时间: 2010-10-16 14:29
Numeric = =于是壓力很大
作者: summer92    时间: 2010-10-16 15:37
顶教程~~~~~~~~~~
作者: qiansen1386    时间: 2010-10-16 17:58
下载学习之
作者: 冰舞蝶恋    时间: 2010-10-16 18:07
好东西啊~~赞
作者: 夕阳武士    时间: 2010-10-16 18:30
话说呀= =晤= =这个= =
我给的奖金= =那个那个= =是出版社的内定奖金嘞= =那个
= =那个发布教程的加分= =是不是= =那个= =
作者: 304025076    时间: 2011-6-16 01:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: d232149898    时间: 2011-12-22 17:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2011-12-22 17:43
VX的显示步数窗口么……确实不错呐……




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