rm脚本基础教程

我本人并非专业的程序员,所以有些术语理解不到位的地方还请各位批评指正。

最近帮一位朋友改脚本。在交流中,我发现他遇到的困惑和我当年的困惑是类似的,姑且在这里写一点感想吧。

自己修改脚本无疑是要懂一点编程的。我之前也说过,无论是RGSS还是mv中的JS脚本,它们应该是一种框架,一种rpg游戏的框架。框架的好处是:即时不了解整个程序的流程,出东西也会很快。如果要熟练使用框架,当然要对它很了解。

所以我认为基础教程不但要包括语法,还要包括对默认脚本这个框架的介绍。

关于语法我一直不大愿意讲,主要原因其实是水平不够。其一因为语法涉及到很多细节,我并非js和ruby的专家,很多细节未必讲的清楚。其二是因为,语法本身是死的,与其看我转述,不如在网上看系统的语法介绍。(我记得10年前,大概07,08年的时候,ruby的教程在网上非常少,几乎搜索不到)

但是网上全面系统的语法教程也有个问题,比较分散和琐碎,初学者未必能在短时间内看的下去。为了帮助看到此篇文章的朋友快速入门,我粗略的介绍下语法。

程序有三种基本结构,顺序、循环、条件。举个简单的例子。

顺序结构

a=1

b=2

c=a

循环结构:

a=10

while(a>0){

a=a-1

}

选择结构:

a=10

a=3

}

以上是程序的三种基本结构。注意“=”这个符号,这个符号大家会读成“等号”,但是大多数程序语言中,这个符号表达的意思并不是相等,而是赋值。a=10的意思并不是a等于10,而是把10这个数值赋值于a。

ruby中有些数据类型,比如hash,数组。js中也有数组和对象,这些数据类型请自行查找资料,搜索ruby教程或者是js教程就行。

ruby和mv的js脚本编程都属于面对对象编程。

说到ruby不得不提这几个概念。类,实例,类变量,实例变量,类方法,实例方法。

类,关键字class,在默认脚本中很常见。

Class Actor

definitialize(w,h)

@width=w

@@height=h

end

end

这定义了一个类。

actor=new Actor()

actor这个变量就是Actor类的实例。initialize(w,h)是一个实例方法。类的实例变量可以调用类的实例方法。类中以@开头的变量称为实例变量,@@开头称为类变量。

实例变量属于类的实例,一个类可能有很多个实例,每个类的实例变量是独立的,修改某个实例的实例变量并不会改变其他实例的实例变量。

类变量属于整个类,修改该某个类实例的类变量,其他实例中类变量也会变化。()

同理,实例方法和类方法的概念也是类似的。

其他语言中,和类方法类似的概念叫静态方法。类方法和实例方法在使用的时候区别如下:

class Actor

def attack #实例方法

end

def Actor.name #静态方法

end

end

Actor.name() #类方法的使用,类名.方法名

actor=new Actor()

actor.attack() #实例方法的使用

ruby中如果方法不带参数的话,调用方法时可以省略括号。

RGSS3里还涉及到迭代器的使用,这方面我也不太熟悉,请参考网上比较系统的教程。

ruby和js语法上的的区别还是很大的。我本人对js算不上很了解,这里不在赘述js语法方面的问题。

接下来说一说我的个人感想。

我之前在国内某个著名rm论坛上看过一个说法,脚本化。这个说法估计是贴子作者自己提出来的。何谓脚本化?他的意思大概是,把现实生活中的概念,对应到脚本中。比如现实中英雄可以攻击,防御、使用魔法,脚本中就有一个英雄类,这个类中有攻击、防御、释放魔法几个方法。计算机里,这种行为应该称为抽象。

不过以我的经验来看,rm中需要自己设计类的地方非常少。对默认脚本方法的重定义能满足绝大多数的需求。

默认情况下,后插入的脚本可以覆盖前面的脚本。如果在后面的脚本里,某个类和之前的类名,方法名相同,则后面的方法会覆盖之前的方法。这也是大多数脚本冲突的原因。

大多数脚本中会用到alias这个关键字。这个关键字的作用是,给某个方法取个别名。如果你打算重写某个方法用alias为这个方法取个别名,这样就能先调用之前的方法,再追加自己的方法。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181113G1ETXN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券