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

Project1

 找回密码
 注册会员
搜索
楼主: harinlen
打印 上一主题 下一主题

[版务] 【活动】【VA】RGSS 3 入门教程大家写(更新13/02/15)

  [复制链接]

Lv1.梦旅人

暗·迷路的寻梦

梦石
0
星屑
35
在线时间
613 小时
注册时间
2012-5-16
帖子
507
41
发表于 2012-10-6 21:47:40 | 只看该作者
本帖最后由 smile-zt 于 2012-10-6 22:34 编辑

终于更了!(好吧..我许久没来了...PIA~)
运算符貌似比之前学到的多了好多!还是之前没好好听课啊我!@Mic_洛洛 觉得呢!至少那些"~","&","..","|","=~"什么的..没看懂怎么用..
下面会讲到的吧!
另外,辛苦HAR君,satgo君和铅笔啦~人民感谢你们!
---------------------------------------------------------------
稍微补充一下疑惑...
@铅笔描绘的思念
你那么多个"]"是怎么回事!!
但还是想问下,那个[then]是一定要加的么!还是说可加可不加,还是说单个执行语句的情况下可以不加,多语句就要加?
多语句的情况下,不知道是怎么进行划分的..总觉得很容易混乱...

点评

位运算太高级了。。。可以不要的。。。  发表于 2013-2-13 17:51
"~","&","..","|","=~"以后(大概是很久以后吧)会讲,现在不懂也没关系,以后学完了回头看就会懂了 :)  发表于 2012-10-7 12:26
[then]什么的是格式罢了 其实格式是比较像VB之类的语言。if 条件 then 再end if什么的。。不过其实也是可以加的。。“[”“]”里的只是不必要的东西罢了  发表于 2012-10-7 11:21
那个。。和嵌套不是一样的么。。按需增加啊。  发表于 2012-10-7 07:21
私的失误。。喵呜。。谢谢了撒~(想到?:的写法就激动了一下。。)  发表于 2012-10-6 22:03
萌即是正义!哟嘿!
----------------------------------------------------------------------------------------

小喵的萌友团:              
----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
42
发表于 2012-10-7 12:42:19 | 只看该作者
本节懂得RGSS1/RGSS2的可以看,如果只是接触了RGSS3可略过

让p重新出现!
相信很多人都想让p重现吧……
事实上p还待在那里——不过要设置一下才行,而且只有按F12能显示,运行Game.exe不可使用p。
调试菜单中,选择显示主控台,前面打“√”即可。

接着就可以用p和print了。
  1. p 1 + 1
  2. p 3 ** 3
  3. p "ABC"
  4. print "ABC"
复制代码

不过p是p到那个黑乎乎的dos窗口里了:



点评

↓Kernel要推倒是要很大力气的啊……找论坛里ATK最大的来吧(?)  发表于 2012-10-7 15:00
直接推倒Kernel不就好了?╮( ̄▽ ̄")╭  发表于 2012-10-7 13:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1374
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

43
发表于 2012-10-13 19:23:15 | 只看该作者
本帖最后由 铅笔描绘的思念 于 2012-10-13 19:25 编辑

循环不怎么会。。。特别是迭代啊。。。。。。

由于ls说了把P弄回来的方法。。但是在控制台中。。。所以我提到可以推到Kernel来做到变成VX那样的。。。而这个Kernel是什么呢。。。我们看到在脚本里我们可以直接用msgbox来弹出提示。。。那我们的这个msgbox是什么呢。。。其实也是一种方法。。是是在系统预定义的一个类Kernel中定义的。。。所以我们这节来讲讲Kernel和Class, Module, Object之类的关系。。。
一、Kernel和Class, Module, Object的关系
关于这几个东西的关系我们来看几段代码。。。
RUBY 代码复制
  1. p Class.ancestors#Class, Module, Object, Kernel
  2. p Module.ancestors#Module, Object, Kernel
  3. p Object.ancestors#Object, Kernel
  4. p Kernel.ancestors#Kernel

RUBY 代码复制
  1. p Class.class#Class
  2. p Module.class#Class
  3. p Object.class#Class
  4. p Kernel.class#Module[/p]
由于懒我就使用p来代替msgbox了。。。。大家只需要像LS一样设置一样就好了。。。上面的代码。。英语好的不难理解ancestors和class的意思。。。我们知道Module是Class的父类.。。通过上面的代码可以看出Class, Module, Object 都是class,而Kernel是Module

因为Ruby里一切都是对象所以Object是RGSS中所有类的父类,Object混入了Kernel这个模块,所以Kernel中内建的核心函数就可以被RGSS中所有的类和对象访问。。。
2. Kernel
我们可以把Kernel理解为系统预定义的一些方法,我们可以在所有的对象上使用,使用时不需要使用类型作为前缀。。当然我们也可以加上Kernel。 比如
RUBY 代码复制
  1. Kernel.msgbox("Hello World!")
是一样的。。。。


各种球搞定循环什么的。。。。

点评

ancestors ----- 祖先  发表于 2012-11-16 19:52
类的祖宗 ==》类 模块 OBJECT类 Kernel模块~~~~我看懂了。  发表于 2012-10-13 22:49
怎么感觉把调试的东西全部将全了DA☆ZE?!  发表于 2012-10-13 22:45

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1248
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
44
 楼主| 发表于 2012-10-13 23:15:07 | 只看该作者

数组

本帖最后由 harinlen 于 2012-10-13 23:16 编辑

建立数组


  于是,继续主题。
  这次将介绍种新的……数据结构?嘛,这个不能叫做数据结构,最多也就称作一个集合吧。这个东西叫做数组。顾名思义,所谓数组,就是把一堆数绑在一组,起一个名字。于是就叫数组了。
  那么,怎么建立一个数组呢?能不能和一般的变量一样直接用呢?
  额……收敛点吧,变量让你随便用了,数组还是需要声明一下的。告诉RGSS3这货是个数组而不是变量。声明方法也不难,例如声明一个数组,内容为:54,6,9,10。(54酱、阿空、笨蛋、露米娅趟枪=3=)
变量叫做jiecao(节操?!),语句如下:
  1. jiecao = [54,6,9,10]
复制代码
嗯,就是这么简单。不过,话说要是当初没有想好放什么的话,可以建一个空数组,这么写:
  1. jiecao = []
复制代码
此时生成的jiecao数组就是空的,也就是……没有节操?
  要是我们想要初始的时候放很多个相同的数,比如:在节操数组中放上100个54。可以这么写:
  1. jiecao = Array.new(100,54)
复制代码
这个时候,我们就像jiecao数组中放了100个54。

读取数组


  那么,我们好不容易建立一个100个54的jiecao数组,怎么才能读取其中的一个呢?数组的读取其实很简单。比如调用第一个变量:
  1. jiecao = Array.new(100,54)
  2. msgbox jiecao[0]
复制代码
为什么这里写的是0而不是1呢?因为RGSS3中的数组,是从0开始的算的,也就是说,读取数组中的第k个数,需要调用数组中第k-1个变量。第1个变量在数组中的“编号”为0,自然是0了。
  可以看到,数组名+中括号+编号即可调用数组中任意一个变量了。
  那么,编号能不能是负的呢?(节操为负?!)
  可以,例如:
  1. jiecao = [54,6,9,10]
  2. msgbox jiecao[-1]
复制代码
输出结果应该是10。也就是说,负数是从后向前数的。而且最后一个数是-1。(因为第一个数是0,自然“前面的一个”就表示为-1,当然是最后一个了啊!)

更改数组中的数


  当然,如果要就是一个表放在那里的话,完全没必要弄个数组。正是因为我们可以对数组进行修改,数组才有存在的意义,不然这种东西丢掉就好……(←又是节操么= =)
  数组的修改也很简单,比如,我们要让jiecao[1]改成66,那么:
  1. jiecao = [54,6,9,10]
  2. jiecao[1] = 66
  3. msgbox jiecao[1]
复制代码
输出结果就是66了。这里再次运用了赋值符号“=”。

数组的整体输出


  记得以前用Basic写代码的时候,输出数组总是一件很烦人的事情。动不动就是从第一个一直写到最后一个,一个长长的输出语句,要不然就要写一个循环之类的东西。就没有简单的点办法么?
  RGSS3有一个超级bug的表示方法:
  还是jiecao数组,我们想一次性输出所有的数值,那么,可以这么干:
  1. jiecao = [54,6,9,10]
  2. msgbox jiecao
复制代码
运行后会发现,对话框里赫然写着:
[54, 6, 9, 10]

  怎么样,是不是很有意思?(殊不知多少程序员怒视这RGSS3啊……至少我是= =)

点评

这应该叫集合吧?数组不是下标的那货么  发表于 2014-7-17 12:19
数组的等号前后也需要空格?除了这个和三联还有哪些需要空格?C过来的。。  发表于 2013-4-13 20:40
jiecao = Array.new(100,54) msgbox jiecao ,试试看效果……( ⊙o⊙ )哇,长长的……  发表于 2013-2-13 20:41
我觉得你应该写一下数组的操作...要动态使用数组的时候还是比较多的。比如push.find.empty?等函数,可以简化很大一部分操作  发表于 2013-2-13 17:54

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
Mic_洛洛 + 200 + 2 精品文章

查看全部评分



回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1248
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
45
 楼主| 发表于 2012-10-13 23:22:47 | 只看该作者
↑ 高考前的最后之作

点评

放心去吧!(?)没人的时候就把其他的人给拉过来帮忙!XD)加油哦~  发表于 2012-10-14 13:18


回复 支持 反对

使用道具 举报

Lv1.梦旅人

哆啦菌

梦石
0
星屑
46
在线时间
795 小时
注册时间
2010-7-24
帖子
3800
46
发表于 2012-10-14 16:38:04 手机端发表。 | 只看该作者
每次我参加的活动都没勋章。。。好不容易看到一个却过期了。。。
随便看看
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

47
发表于 2012-10-14 16:47:28 | 只看该作者
  1. module Kernel
  2.   alias last_p p
  3.   alias last_print print
  4.   alias last_msgbox msgbox
  5.   alias last_msgbox_p msgbox_p
  6.   def p(*args)
  7.     last_msgbox_p(args)
  8.   end
  9.   def print(*args)
  10.     last_msgbox(args)
  11.   end
  12.   def msgbox(*args)
  13.     last_print(args)
  14.   end
  15.   def msgbox_p(*args)
  16.     last_p(args)
  17.   end
  18. end
复制代码
一个非常213的脚本把p和print改成VX形式的。
解说:用alias来将原本的Kernel内的p、print、msgbox、msgbox_p函数改名,然后分别重新定义为p->呼出改名后的msgbox_p函数 print->呼出改名后的msgbox函数 msgbox->呼出改名后的print函数 msgbox_p->呼出改名后的p函数。


求其他人来解说吧对自己绝望了_(:3」∠)_

点评

这这……忽然发现这个好像指针用了好多啊=3=  发表于 2013-4-15 10:29
ATK真高啊哈哈~总觉得这会有什么后遗症什么什么的..  发表于 2012-10-14 18:06
↓囧?  发表于 2012-10-14 17:39
各种继承啊=3=  发表于 2012-10-14 17:28

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
48
发表于 2012-10-14 18:52:56 | 只看该作者
目录修过了吗……纳尼?这帖子变活动帖了!42L说[不会循环]我就写循环吧

循环
for ~ end
话说水区有人参加NOIP呢……啊跑题了……
for ~ end这个结构是计数循环的程序结构。就是比如从1数到100就可以用这个。
【例子】
  1. for i in 1..5 # 注意!是两个点不是三个点
  2.   msgbox i
  3. end
复制代码

结果是……
咚! 咚! 咚! 咚! 咚!
额好吧……我只是要说明弹出来5个框分别是1、2、3、4、5。
所以嘛,for就是根据后面的1..5,让i从1到5循环了5次。
i=1时,执行msgbox i;
i=2时,执行msgbox i;
i=3时,执行msgbox i;
i=4时,执行msgbox i;
i=5时,执行msgbox i。

for就是这么执行的。
如果是for i in 2..6呢?
弹出来的是2、3、4、5、6。
要注意的是,不可以用类似for i in 0.5..1.5这种的,因为可不是0.5、0.6、0.7、0.8、0.9、1.0、1.1、1.2、1.3、1.4、1.5这么简单,0.5和0.6之间还有0.51、0.52……0.51和0.52之间还有0.511、0.512……所以不可用小数。
另外,1..5中的1和5也可用变量,比如x..y。
最终の注意:
  1. for jiecao in 1..5
  2.   jiecao += 1 # 对jiecao变量的循环体内不可以对jiecao进行操作
  3.   # 就是说不能对循环节操……不不不,我是说对循环变量操作
  4. end
复制代码
貌似我也开始用节操变量了囧……
事实上【数组】一节中已经讲了如何输出数组……msgbox [54,6,9,10]即可。但是,如果不想用这样的方法输出呢?
  1. a = [54,6,9,10]
  2. s = ""
  3. for i in 0...a.size # 这里必须是三个点
  4.   s = s + a[i].to_s + "\n" # i.to_s 指的是把 i 转换成字符串
  5. end
  6. msgbox s
复制代码
前面一直强调要两个点,这里必须用3个点。
原因:数组下标是从0开始到数组的元素个数-1。而a.size是数组元素个数,这里3个点“...”在x...y中表示“从x开始到y-1结束”。
while ~ end
while ~ end结构是当型循环的程序结构。就是“当XXX条件下重复执行XXX,直到条件不满足为止”的循环结构,故名当型循环。
【例子】(抄自VA帮助)
  1. a = 0               # 変数 a に 0 を代入する。
  2. i = 1               # 変数 i に 1 を代入する。

  3. while i <= 5        # 変数 i が 5 以下の間ループさせ、
  4.   a += i            #   変数 a にそれぞれの i の値を加算する。
  5.   i += 1            #   変数 i の値を 1 増やす。
  6. end                 # ループ終了。

  7. p a                 # 計算結果を表示する。
复制代码
相信不难看懂~(众:其实是你不想翻译吧?)(我的确没学过日语= =)
于是提供谷歌翻译结果(原来谷歌翻得比我还离谱)

好了不扯了……
【例子】(这才是真正的例子,还是抄自VA帮助= =)
  1. a = 0               # 把 0 代入变量 a
  2. i = 1               # 把 1 代入变量 i

  3. while i <= 5        # 当 i ≤ 5 时重复执行
  4.   a += i            #   变量 a 加上 i
  5.   i += 1            #   变量 i 加上 1
  6. end                 # 结束循环

  7. p a                 # 显示计算结果
复制代码
会显示15。
为什么呢……?因为——
循环a的值i的值
初始01
1次后12
2次后33
3次后64
4次后105
5次后156
这段程序其实就是算1+2+3+4+5。
有了for的基础应该while很简单吧?(PIA

今天没什么时间了各位补完吧……
最后的召唤术MP-5@harinlen@feizhaodan@铅笔描绘的思念

点评

@LyMin 我才不干这种事情呢…………  发表于 2013-7-2 10:03
试试这个 for i in 1..20 for a in i..30 msgbox a end end 吓死你  发表于 2013-7-2 08:09
for each呢。。。难点啊  发表于 2013-2-13 17:56
NOIP中学组太难了。。。话说我小学的时候都是1等呢。。。【无视吧】  发表于 2013-2-13 17:55
暂时没有补完的欲望。。。。循环的东西咱渣。。  发表于 2012-10-15 21:27

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1374
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

49
发表于 2012-10-15 21:26:45 | 只看该作者

RE: 【活动】【VA】RGSS 3 入门教程大家写(更新12/10/14)

本帖最后由 铅笔描绘的思念 于 2012-10-15 21:29 编辑

吾辈最近无聊至极。。。。有机会碰电脑就来写教程好了。。。预定一下类和模块的教程。。。


函数  这里说的函数不是我们初二学的数学函数f(x)之类的东西。。。那货是数学定义。。咱这是计算机语言的。。数字的计算和字符串的显示等等。。。能够进行某种处理的被命名的功能称为函数。。。我们在RM里也可以称之为方法。。。

函数的使用  我们一直在使用的 msgbox 还有msgbox_p之类的。。。其实也是函数的一种。。。而我们也知道该怎么来使用它。。比如

msgbox “Hello world!”

之类的。。。当然也可以msgbox(“。。。。。”)之类的。。。效果一样。。处理msgbox以外还有许多VA已定义的方法(函数:以下就称方法好了。。。习惯了。。。 )比如rand它是生成随机数的一个方法。。
msgbox rand(100)

这个实例是显示出(0~99)中的任意一个随机数字的程序。。rand方法是从 0 到指定整数这个范围中随机选取一个数字并返回这个数的方法。。。。。这个指定整数也称之为参数。。。参数通常在方法名称后面的括号 () 内指定。。。
像msgbox和rand那样的方法已被系统预定义,所以称为系统函数(固有名词什么的。。。系统方法其实也可以。。)。

函数的定义函数的定义是从 def 开始到 end 结束。。。。具体的语法如下所示。。。。
def 函数的名称  
   函数的内容
end

函数名称的命名方法,基本上和变量有相同的限制。也能在开头使用大写字母。。但不推荐。。
比如下面的一个方法
def dice   
   return rand(6) + 1
end
msgbox dice              # 等同于 msgbox rand(6) + 1

这样一个方法是在一个新脚本中定义的。。所以不是一个类方法(关于类的教程下节。。。)

参数
  含有参数的方法,如下面示例那样定义。
RUBY 代码复制
  1. def abs(x)
  2. if x < 0          # 如果 x 小于 0 的话,
  3.      return -x       #   结束函数,返回值 -x。
  4. else              # 除此之外,
  5.     return x        #   结束函数,返回值 x。
  6.   end               # 分歧结束。
  7. end
  8. msgbox abs(-3)           # => 3

这个是返回指定参数数值绝对值的函数。这里指定的数值暂时定义为 x。这个 x 称为临时参数。。。也称形式参数简称形参。。又称虚拟变量。。就是不占用空间的(泥垢。。)。。  在函数内部使用有条件分歧,x 小于 0 时(为负数)返回值 -x,除此之外(为 0 以上的整数)返回值 x。最后一行是指定参数为 -3 的实际情况下使用函数,其结果用 msgbox 函数输出。与 x 为临时参数相比,这儿的 -3 称为实参数也称实际参数简称实参。。。。其实就是变量一只。。。

  含有多个参数的函数也能定义。。。多个参数要用逗号分开来指定。。。
默认参数

定义方法时就已指定且使用时可以省略的参数称为默认参数。默认参数是在临时参数后面加上符号 = 来指定的


比如上面的rand(6)+1的方法
def dice(n=6)
   return rand(n) + 1
end
msgbox dice              # 等同于 msgbox rand(6) + 1

上述示例中未指定参数,使用方法时会返回一个 1~6 的随机数字,然而指定参数的话,就能更改随机数字的最大值。比如,使用 dice(8) 就会返回一个 1~8 的随机数字。
函数的重定义下面的示例中,hello 名称的函数被重复定义了 2 回。
RUBY 代码复制
  1. def hello
  2. return "您好"
  3. end
  4. def hello
  5. return "晚安"
  6. end
  7. msgbox hello         # => "晚安"

在 Ruby 中,函数名称重复的话不会出现错误。这种情况下系统会认定后面定义的函数有效,而先前的定义就无效了。
纯引自重额。。。其实改了一点。。。来源VX  F1


其实还有过程式方法   对象方法之类的。。。= = ||  果然方法什么的不是想萝莉(洛洛?)那样身轻体弱易推倒的。。。。。。不过剩下的都不是重点了。。。我|(·_·) |·_·) |_·) |·) | )闪先。。。

点评

另外alias可以介绍一下  发表于 2013-2-13 17:58
一定要说一下函数的第一个传参的首字母不能为大写。如def functions(Abc,aaa)就会报错【我因为这个删了我做了n天编译不通过的程序。。。】  发表于 2013-2-13 17:57
句号过多……要像我一样一直用省略号嘛……哈哈 | 抄不要抄得这么全面嘛,至少也得抄VA的抄VX的太不专业了= =  发表于 2012-10-16 18:10

评分

参与人数 3星屑 +90 梦石 +2 收起 理由
satgo1546 + 2 补节操XD
harinlen + 90 节操在此
Mic_洛洛 -2 + 2 咳咳~更新奖励+吐槽版主扣节操!.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2011-3-10
帖子
17
50
发表于 2012-10-16 10:53:35 | 只看该作者
感觉要学的太多了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 10:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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