常用快捷键
Control+F 本脚本页中寻找
Control+Shift+F 全局搜索
Control + H 替换
Control + G 转到第几行
第二讲 基本词汇和语法(上)
一些基本的废话将完了,我们直接进入正题^0^..接下来的请大家一起跟我实践~
先在RGSS编辑器中新建一个脚本,插入这些:
class Say_Something
def initialize
print “I am therefore I’m coded”
end
end
然后找个npc并在他事件页的脚本那里写入Say_Something.new
点他后我们看到什么了呢?冒出来一个写着” I am therefore I’m coded”的窗口.
这是为什么呢?让我们来一行一行地看:
class Say_Something 这里我们创建了一个叫Say_Something 的class (类)
def initialize 这里我们定义了一种新的方法叫Initialize (初始化)
print “I am therefore I’m coded” 我们增加了当”initialize”的方法被调用时执行的东西
两个end是语法
好了,脚本是看完了,再完整地看一遍:
class Say_Something
attr_accessor :greeting
attr_accessor :name
def initialize(greeting, name)
@greeting=greeting
@name=name
end
def say
print @greeting + “ “ + @name
end
end
是不是不那么扑朔迷离了??
大家好,我们今天开始学习新的内容^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
今天我们来学习条件语句,即常说的”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
它具体怎么用呢?让我们继续前几讲的例子:
例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"