设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: frantice

[RM中级讨论] 跟我从头学脚本(教学翻译)(已发布)

 关闭 [复制链接]

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
 楼主| 发表于 2006-7-24 23:39:08 | 显示全部楼层
特别讲其实是一张词汇表,暂时没处理好(其实是不想处理了- -)

第四讲: 变量和常量(上)


大家好,我们今天开始学习新的内容^0^
变量有很多种,我们一一看来:
1: Local变量.(局部变量)只能和它的方法存在.我们先看下面这个例子:
class Local_Variable
  def method_1
    local_variable=2
  end
  def method_2
    local_variable=3
  end
end
2: Instance 变量.以 @ 开头,必须在方法中被创建..这种变量能在任何同个类的方法中被调用.下面的例子中,方法1创建的Instance 变量和方法2的是一样的.在2中我们把它变为4. 一个Instance变量在一个类中是全局的.
class Instance_Variable
  def method_1
    @instance_variable=2
  end
  def method_2
    @instance_variable=4
  end
end
3: Class变量.以 @@ 开头,只要不在方法中,就必须在类中被创建.建议将它放在类名定义的下面. 一个Class 变量在同类中是通用的,所有此类中的方法都能使用它. 下面的例子中我们创建了一个记数的类.
class Class_Variable
  @@class_variable=0
  def initialize
    @@class_variable+=1
  end
end
4: Global变量(全局变量)在整个游戏中存在,一旦被创建,任何一个类中都能使用它.下面的例子中,我们在一个类中创建了一个全局变量,我们在另一个类中增加了1.
class Global_Variable_1
  def initialize
    $global_variable=0
  end
end
class Global_Variable_2
  def initialize
    $global_variable+=1
  end
end



第五讲: 变量和常量(下)


学习完变量了,现在来学习常量.
常量像一个容器,装载着某个值.它本来不能被改变,但是在Ruby中可以.. 但是只能在这个类中你可以改变它,它的值总是和你给它定义的时候保持一致.下面的例子中,我们可以看到三个类中常量的如何使用.
A_CONSTANT=100
class Constant_Test_1
  ANOTHER_CONSTANT=50
  def initialize
  print ANOTHER_CONSTANT
  print A_CONSTANT
  end
end
class Constant_Test_2
  def initialize
    print Constant_Test_1::ANOTHER_CONSTANT
    print A_CONSTANT
  end
end
class Constant_Test_3
  A_CONSTANT+=1
  def initialize
    print A_CONSTANT
  end
end
首先,我们创建了一个全局变量A_CONSTANT,值为 100. 我们看到这个全局变量是在类之外创建的,它在游戏的每个类中都通用.第一个class类中,我们创建了常量,它是在类中使用的,但是在另一个类中使用正确的语法也能调用它第二个类中我们事实上获得了第一个类中定义的变量.它的句法是这样:
Class_Name::CONSTANT_NAME

使用这样的句法,我们就能在一个类中定义一个常量.也能让其他的类中能使用它.在第三个例子中,我们给全局变量"A_CONSTANT"增加了1, 显示出来就是101.

好了,让我们来测试几遍! 加入脚本后在事件页里写上:
Constant_Test_1.new
Constant_Test_2.new
Constant_Test_3.new
Constant_Test_1.new
这样的格式应该不陌生了吧^0^

我们会发现常量"A_CONSTANT" 在执行Constant_Test_3.new的时候会保持在101这.是因为它一直使用静止不变的"A_CONSTANT"的值也就是 100. 简单地说,常量就是常量,不会改变的量.一定要记住常量不能在方法中被创建或者修改哦~~~

KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

看不到我

梦石
0
星屑
50
在线时间
229 小时
注册时间
2005-11-6
帖子
1741

贵宾

发表于 2006-7-25 00:39:19 | 显示全部楼层
看了开头一点 受益匪浅~~~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

鬼隐

梦石
0
星屑
50
在线时间
0 小时
注册时间
2005-10-23
帖子
168
发表于 2006-7-25 01:12:42 | 显示全部楼层
F你干嘛不做地球村斑竹……{/fd}
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

发表于 2006-7-25 01:29:32 | 显示全部楼层
真得不错!择日发布!
神隐中,偶尔诈尸
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Duo是偶的~!

梦石
0
星屑
48
在线时间
16 小时
注册时间
2006-4-4
帖子
1708

第1届RMTV比赛季军

发表于 2006-7-25 01:40:44 | 显示全部楼层
好东东出现鸟~~!!{/se}
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-6-11
帖子
59
发表于 2006-7-25 05:41:07 | 显示全部楼层
极品好东西~~  {/qiang}{/qiang}
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

北域苍狼

梦石
0
星屑
162
在线时间
12 小时
注册时间
2005-10-16
帖子
610
发表于 2006-7-25 06:43:18 | 显示全部楼层
顶一个……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
 楼主| 发表于 2006-7-25 16:15:29 | 显示全部楼层

第六讲: 条件语句(上)


今天我们来学习条件语句,即常说的”If语句”
首先看两句句子:
if my_variable=0     
if my_variable==0   
看出它们的区别了吗?
后者是正确的,前者是错误的,这是Ruby的基本语法哦~~
好了,说完无关紧要的,我们来测试一下几个例子:
例1:
class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    if @@a_class_variable==a_local_variable
      print "Yay, we are equal !"
    else
      print "Arg, it's not fair !"
    end   
  end
end
脚本放入后事件中调用(应该很熟悉了吧~~):
If_Statement_1.new
If_Statement_1.new
If_Statement_1.new
If_Statement_1.new

出现什么情况?
第三个窗口会是"Yay, we are equal !",因为我们每次调用这个类时都给它的值增加了1, 刚好第三次的时候这个类的值等于了局部变量,也就是@@a_class_variable==a_local_variable RMXP是按以下的程序运行的:
第一次:
@@a_class_variable=10+1 --> 得11
a_local_variable=13
IF语句判断了两个大小,从而得出他们不相等,于是它执行了else的情况.
第二次:
@@a_class_variable=11+1 --> 得12
还是不相等,仍是else
第三次:
相等了,于是显示 "Yay, we are equal !"
第四次以及以后:
都不相等,同1,2.

例2:
class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    if @@a_class_variable==a_local_variable then print "Yay" else print "Arg" end
  end   
end   
看到那行特别长的了吗? 它是没有错误的,因为我们可以把If语句写在一行,当然了,不够美观不够方便.它用于一些小场合.以下是另外两个例子:

例3:
class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    print @@a_class_variable
    if @@a_class_variable==a_local_variable : print "Yay"  end
  end   
end   
比较下例2,我们发现我们可以用” : ”来替换原句中的”then”.继续往下看~

例4:
class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    print @@a_class_variable
    print "Yay" if @@a_class_variable==a_local_variable
  end   
end
这个例子里我们把”end”都省略掉了^0^.看起来更清爽了不? 因为我们重新改造了句子的结构,把结果print "Yay" 加了个”if”显示在” @@a_class_variable 等于 a_local_variable. “的条件前.所以,我们现在知道了If语句有多种表达方式.更高级的例子,留给明天讨论吧,今天学得不少了~~


第七讲: 条件语句(中)


紧接着昨天的if, 我们可以把elsif连在一起使用~先看例子:

class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    if @@a_class_variable==a_local_variable
      print "We Are Equal !"
      elsif @@a_class_variable==12
        print "I Equal 12 !"
        elsif @@a_class_variable != a_local_variable
          print "We aren't equal !"
    end
  end   
end

看清楚哦,是elsif 不是 elseif ~~

使用elsif语句会时程序在if语句中选择,而且不会同时选择两个.否则,当@@a_class_variable 的值等于12,我们就会看到两条信息了就是"I Equal 12 !"和 "We Aren't Equals". 但是事实上条件句只显示第一条信息并跳过了其他的语句返回true值。想做成这样的话,只用简单的用新的elsif作为IF语句,程序就会检查所有语句,然后执行true值时候的情形:
class If_Statement_1
  @@a_class_variable=10
  def initialize
    @@a_class_variable+=1
    a_local_variable=13
    if @@a_class_variable==a_local_variable
      print "We Are Equal !"
    end
    if @@a_class_variable==12   
      print "I Equal 12 !"
    end
    if @@a_class_variable != a_local_variable
      print "We aren't equal !"
    end   
  end
end   
运行看看,我们就能看到当@@a_class_variable的值等于12时能出现两条信息, "I Equal 12 !" 和 "We Aren't Equal". 不过是不是觉得很累赘呢? 因为大部分情况下, 用这么多个 else if , 还不如用下面的Case 语句.

Case 语句是用来检查给出的变量的内容,并列出一组满足每个给定的值时应执行的动作.在  Scene (场景)和Menus (菜单)中会大量出现.我们继续使用上面的例子class_variable:来说明.要记住的是,我们这回要改变事件页脚本那里的写法了^0^
将If_Statement_1.new 改为 Case_Statement_1.new
例1:
class Case_Statement_1
  @@a_class_variable=0
  def initialize
    @@a_class_variable+=1
  case @@a_class_variable
    when 1
      print "I am 1"
    when 2
      print "I am 2"
    when 3
      print "I am 3"
    else
      print "What Am I ?"
    end   
  end
end   
运行下看看, 是不是觉得比那么多个else if 要来得清楚明了呢? 这就是case 语句的优点,
当然了,我们照样可以用”:” 来代替”then”,所以我们可以把语句缩合成这样:
例2:
class Case_Statement_1
  @@a_class_variable=0
  def initialize
    @@a_class_variable+=1
  case @@a_class_variable
    when 1: print "I am 1"
    when 2: print "I am 2"
    when 3: print "I am 3"
    else  print "What Am I ?"
  end   
  end
end   

好了, 大家试试看~今天就讲这么多~
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
 楼主| 发表于 2006-7-25 16:17:12 | 显示全部楼层
第八讲: 条件语句(下)


我们今天来学习条件语句的最后一部分”Ranges”
Range (范围) 是由一个起始值和结束值来定义的, 它就是在两个值的中间点上几点. (我们会在今后进一步讲述.)先看下它的基本格式:
开始 .. 结束    -->包括结束的值(两个点)
开始 ...  结束  -->不包括结束的值(三个点)

它具体怎么用呢?让我们继续前几讲的例子:
例1:
class Case_Statement_1
  @@a_class_variable=0
  def initialize
    @@a_class_variable+=1
  print @@a_class_variable
  case @@a_class_variable
    when 1..3: print "I am between 1 and 3"
    when 4..6: print "I am between 4 and 6"
    when 7..9: print "I am between 7 and 9"
    else  print "What Am I ?"
  end   
  end
end
测试的话我们需要在事件中调用更多的Case_Statement_1.new, 10个就能看完效果了

当然了,我们不一定非得用数字的, 我们可以使用字符, 看下面的例子:
例2:
class Case_Statement_1
  @@a_class_variable="a"
  def initialize
    @@a_class_variable.next!
  case @@a_class_variable
    when "b": print "I am B"
    when "c": print "I am C"
    when "d": print "I am D"
    else  print "What Am I ?"
  end   
  end
end   
这个例子我们有一个.next! 的命令,它是干吗用的呢?它是用来增加一个字符到它下一个逻辑值,而逻辑值取决于它在字符最右边的字母.不是很明白吧, 我们再看下几个例子:
a_string="ab"
a_string.next!
--> a_string 的值等于 "ac"

another_string="name102"
another_string.next!
--> another_string的值等于 "name103"

好了^0^, 回到我们的Case 例子,我们看到它也是运用字符的,明白了.next! 的原理相信结合起来理解没有问题了吧~今天就到这, 下次我们又要学习新的内容啦~~
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
 楼主| 发表于 2006-7-25 16:22:39 | 显示全部楼层
台风过境,乌飞兔走……先更到制作窗口前。昨天晚上全部翻完了。{/gg}

第九讲 Loop 专题

我们先来看看几行脚本:
例1:
class For_Loop_Sample
  def initialize
    a_local_variable=0
    for i in 1..10
      a_local_variable+=1
      print a_local_variable
    end   
  end
end
这是个重复10次给"a_local_variable"增加1 并显示出结果的功能. 从 1 到 10, 包括 10. 还记得上次我们学过的Range的基本格式吧^0^ 它和我们今天要学的for.. loop格式是一致的. 所以我们如果写成"0...10" 而不是 "1..10"的话,结果还是一模一样的.
顺便说下, 大家发现里面有个i 了吗? 它代表什么呢?.为什么是i 而不是o , m 等等呢?
其实i 是 "Iteration"的缩写, Iteration 就是重复的意思.

我们今天要学习的For .. Loop 就是不断执行动作直到达到结束值为止For .. Loop 就是一直重复着动作并储存变量i 的数量. 我们可以用任何数字(字符)作为起始值和结束值来完成For .. Loop语句. 我们刚学过Range 使用两个点(..) 或三个点 (...). 两个点说明它从起始值开始循环到结束值,并包括结束值. 三个点则不包括结束值.我们看下例子:
例2:
  1. class For_Loop_Sample
  2.   def initialize
  3.     for i in 1..4
  4.       print $game_actors[i].name
  5.     end   
  6.   end
  7. end  
复制代码


默认情况下测试,我们就能看到显示出4个人物的名字.它是怎么样运行的呢?
i = 1 时: 我们得到ID为1 的人物的名字, i 是个变量, $game_actors[ i].name 是值id 为i 的角色的名字(可以参考特别讲Near Fantastica 的RGSS语法列表)
i = 2 , i = 3 , i =4 时类推

这种写法在RGSS中大量出现,特别是在Window_MenuStatus中, 因为RMXP 在这里用For..Loop.列出了人物. 这是很常用的写法, 今后我们还会接触到很多, 所以要好好掌握哦~~
最后我们看看下面这行脚本:
例3:
  1. class For_Loop_Sample
  2.   def initialize
  3.     a_loacal_variable=1
  4.     another_local_variable=4
  5.     for i in a_loacal_variable..another_local_variable
  6.       print $game_actors[i].name
  7.     end   
  8.   end
  9. end  
复制代码

和例2有点不同对不对??但是它们的效果是一样的.是不是有点启发了??


第十讲 Inheritance专题

在学习loop之后我们学习inheritance. 什么是inheritance 呢? 用中文讲是 “传承”, 我们可以用一个类来”继承”另一个类的方法和数据(变量).互相”继承”的类分别叫”父类”和”子类”,也就是”超级类”(superclass)和”附属类”(subclass).我们看下例子:
例1:
class Inheritance_Sample_1
  def initialize
    @a_local_variable=1     
  end
end  

class Inheritance_Sample_2 < Inheritance_Sample_1
  def initialize
    super
    print @a_local_variable
  end
end  
测试一下, 插入脚本后在事件脚本里写:
Inheritance_Sample_2.new

看到效果吧^0^. 这是怎么做到的呢? 这就是类的继承.我们在一个类名右边写上< 号,再在右边写上它的超级类(父类)的名字 . 这个例子中"Inheritance_Sample_2" 是附属类 而"Inheritance_Sample_1" 是超级类.通俗地说也就是我们可以从Inheritance_Sample_1这个父类里拿出东西来给Inheritance_Sample_2用.
我们在"Inheritance_Sample_2"这个类里初始化方法下可以找到一个”super”它是做什么的? 它其实就是简单地执行在超级类中定义过的,并且有名字相同的方法.我们看下程序是如何运行的:
[接收 .new 命令]
-执行Inheritance_Sample_2中的初始化方法
-发现一个关键词"super"
-->检查它的超级类,在Inheritance_Sample_1 中找到了
- 执行在超级类Inheritance_Sample_1 中定义的方法
--> 初始化方法@a_local_variable=1
- 程序在Inheritance_Sample_2 中继续执行这个初始化方法
--> @a_local_variable等于 1
- 在屏幕上显示 @a_local_variable
-结束

进一步图说:----------我讨厌贴图= = 每次都贴不上去。。。



作为这一讲的收尾,也作为我们下一讲的语系,我列出RMXP中默认的所有窗口以及它们的父类.

基本窗口
类        内容        父类       
Window_Base        基本窗口        Window       
Window_Selectable        项目选择窗口        Window_Base       
其他窗口
类        内容        父类       
Window_Command        指令窗口(泛用)        Window_Selectable       
Window_Help        帮助窗口        Window_Base       
Window_Gold        显示金钱窗口        Window_Base       
Window_PlayTime        菜单画面用 游戏时间窗口        Window_Base       
Window_Steps        菜单画面用 步数窗口        Window_Base       
Window_MenuStatus        菜单画面用 状态窗口        Window_Selectable       
Window_Item        物品选择窗口        Window_Selectable       
Window_Skill        特技选择窗口        Window_Selectable       
Window_SkillStatus        特技画面用 状态窗口        Window_Base       
Window_Target        物品、特技画面用 对象选择窗口        Window_Selectable       
Window_EquipLeft        装备画面用 左侧窗口        Window_Base       
Window_EquipRight        装备画面用 右侧窗口        Window_Selectable       
Window_EquipItem        装备画面用 物品窗口        Window_Selectable       
Window_Status        状态画面用 状态窗口        Window_Base       
Window_SaveFile        存档、读档画面用 文件窗口        Window_Base       
Window_ShopCommand        商店画面用 商品选择窗口        Window_Selectable       
Window_ShopBuy        商店画面用 购买窗口        Window_Selectable       
Window_ShopSell        商店画面用 出售窗口        Window_Selectable       
Window_ShopNumber        商店画面用 数量输入窗口        Window_Base       
Window_ShopStatus        商店画面用 状态窗口        Window_Base       
Window_NameEdit        名称输入画面用 名称窗口        Window_Base       
Window_NameInput        名称输入画面用 文字选择窗口        Window_Base       
Window_InputNumber        数值输入窗口        Window_Base       
Window_Message        信息窗口        Window_Selectable       
Window_PartyCommand        战斗画面用 同伴指令窗口        Window_Selectable       
Window_BattleStatus        战斗画面用 状态窗口        Window_Base       
Window_BattleResult        战斗画面用 结果显示窗口        Window_Base       
Window_DebugLeft        调试画面用 左侧窗口        Window_Selectable       
Window_DebugRight        调试画面用 右侧窗口        Window_Selectable       
箭头光标
类        内容        父类       
Arrow_Base        箭头光标        Sprite       
Arrow_Enemy        敌人选择用 箭头光标        Arrow_Base       
Arrow_Actor        角色选择用 箭头光标        Arrow_Base       


KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-29 13:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表