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

Project1

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

[原创发布] 【14.7.5第二版更新】RGSS1脚本入门参考

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

41
 楼主| 发表于 2015-7-29 23:09:30 | 只看该作者
舞小朵儿 发表于 2015-7-29 22:39
表示从前学过一点C++的我来说看到这个还是很无力。。。

首先,我得承认这个教程帖子写的不是很好,因为很多东西都没说清楚。后面的应用部分也是马马虎虎,感觉完全没有做一个视频来得实在。
然后,虽然都是面向对象编程语言,C++和Ruby有着极大不同,因此很多Ruby的现象让C++程序员都不能理解,再加上语言风格,关键字使用上的不同,让C/C++程序员很不适应。
所以,要真正弄懂还得去看专门的Ruby教程,推荐Ruby Programming
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
705 小时
注册时间
2007-12-23
帖子
874
42
发表于 2015-7-30 21:43:00 | 只看该作者
写得太好了,LZ真是业界良心

以前看了好多脚本相关的教程,我可以把他们简单分为两类:一类是从语言一点一点讲起:变量、运算符、函数、类……结果呢?——写到后来弃坑了,即使没弃坑别人也看不下去。另一类是从实例讲起:教你做一个美化的标题画面、教你做一个XX系统之类,在效果上可能会好一点,但是拓展性、系统性不强。

这份教程简直是为有编程基础却对RGSS理解不够的人量身定做的,真不错!

点评

我以前看过一些偏实例的教程,印象最深的是《脚本不是高手的专利》,如果能按照计划做完的确能形成知识体系,可惜作者弃坑了。。  发表于 2015-7-30 21:56
PS我最近就更了一个视频的实例教程,那个教程是专门给喜欢速成的人准备的orz  发表于 2015-7-30 21:49
其实我现在有一种感觉,就是教程越来越觉得不好写。写纯理论的就有一堆漏洞,写实践的又怕不太系统。所以只能尽力而为了。  发表于 2015-7-30 21:49
买了正版RMMV的同学进来看一下,谢谢~
https://rpg.blue/thread-393237-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
14 小时
注册时间
2015-8-19
帖子
11
43
发表于 2015-8-19 06:58:11 | 只看该作者
因为数组是从0号单元开始,但是游戏设定里面,ID是从1开始的,因此这两个全局变量的0号单元都是nil,我们用的时候,不必担心这方面的问题。$game_switches[1]就是指的1号开关(事件编译器中的1号开关),$game_variables[1]就是指的1号变量。


其实这个很讨厌的,太不一致了。其实 RM 完全可以从 0 开始的。或者为了照顾日常生活习惯,$data_xxx 和 $game_xxx 等可以用哈希表储存,id 作 key。

有的时候要遍历这些数组,然后首项 nil 当然就没有相应的属性(RGSS 叫属性,其实是 Ruby 的方法) ,然后就报错,必须写 [1..-1] 才行。

@a表示我们通常用到的类的变量,@@a表示类变量


类的变量 和 类变量,没听说过这种说法。。。直接说实例变量和类变量就是了。

赋值运算符“=”的作用是将右边的值赋给左边


实际上,= 不仅用于赋值, Ruby (以及很多语言中)还用于声明:
  1. # 声明变量 a,并赋值 1
  2. a = 1
  3. # 赋值 2
  4. a = 2
复制代码
比如,换成 JavaScript 就是声明和赋值分开的
  1. var a; # 声明
  2. a = 1; # 赋值
  3. a = 2; # 赋值
  4. var b = 2; 简写
复制代码
但是赋过去的是什么,这要根据你赋值对象而确定。如果你把一个整数或者浮点数赋给一个变量,那么实际上传过去的就是变量的值,但是如果你把一个数组或者一个类的实例(当然Fixnum类的除外)赋给一个变量,那么实际传递过去的就是指针


其实就是按值传递(Ruby 算传递对象),或是按引用传递(传递对象的引用),窃以为不必要引入指针。C 中的数组就是指针,还有空指针,指针可以加减,还有 a[p] 和 p[a] 一样等等,和  Ruby 的引用还是不一样的。

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

44
 楼主| 发表于 2015-8-19 08:55:46 | 只看该作者
bugmenot 发表于 2015-8-19 06:58
其实这个很讨厌的,太不一致了。其实 RM 完全可以从 0 开始的。或者为了照顾日常生活习惯,$data_xxx 和  ...

首先,非常感谢你的建议!提到的这些本来应该在第二版修正的(第一版的错误太多了),但是还是没有顾虑到。
不过我记得Ruby的一大特性就是“变量无需声明直接使用”,所以声明什么的,可以不必再提。
赋值那个地方其实讲得比较乱,完全可以用一句话代替:“赋值就是引用的重定向”。因为Ruby中并没有“值类型”和“引用类型”的说法,所以例如Fixnum类的对象,其实是即时值,赋值还是是改改引用而已。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
14 小时
注册时间
2015-8-19
帖子
11
45
发表于 2015-8-19 09:49:17 | 只看该作者


不过我记得Ruby的一大特性就是“变量无需声明直接使用”,所以声明什么的,可以不必再提。


无需声明是 a = 1 赋值语句隐含声明。这样大部分时候可以省打字,但是有时候需要:
  1. a = nil
  2. # a = nil,表面赋值,其实仅仅为了声明

  3. ......

  4.     # 内层
  5.     a = 1
  6.     # 这是给外层的 a 赋值,并未声明一个 内层变量
复制代码
所以是没有独立的声明语句,还是有声明语义(暗含在赋值语句中)。
当然,不讨论作用域的前提下,不提声明比较简洁。

点评

嗯,为了避免初学者产生混乱,还是不要提[声明]为好。  发表于 2015-8-19 09:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
63
在线时间
53 小时
注册时间
2012-7-17
帖子
40
46
发表于 2015-8-19 19:53:41 | 只看该作者
看不太懂-.……那些def之类的语句不懂什么意思
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
112
在线时间
136 小时
注册时间
2012-7-25
帖子
339
47
发表于 2015-8-23 21:57:58 | 只看该作者
好久没上6R发现居然还有人在写RMXP的教程,支持一下咯
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2016-6-11
帖子
3
48
发表于 2016-7-8 19:03:16 | 只看该作者
大神求教
class Person
  attr_accessor:name,:sex,:age
  def initialize(name,sex,age)
    @name = name ; @SEX = sex ; @age = age
  end
  def introduce
    print "我叫#{@name},我是#{@sex},我今年#{@age}岁。"
  end
end
xiaoming = Person.new("小明","男生",6)
xiaoming.introduce
xiaoming.name=("小红")
xiaoming.sex=("女生")
xiaoming.age=(7)
xiaoming.introduce
xiaohong = Person.new("小红","女生",7)
xiaohong.introduce
输出结果是:我叫小明,我是男生,今年6岁。
                  我叫小红,我是女生,今年7岁。
                  我叫小红,我是女生,今年7岁。
怎样修改才能变成这样
输出结果:xiaoming:我叫小明,我是男生,今年6岁。
               xiaoming:我叫小红,我是女生,今年7岁。
               xiaohong:我叫小红,我是女生,今年7岁。

点评

https://github.com/janx/ruby-pinyin 参考这个 将汉字转换成拼音  发表于 2016-7-9 18:24
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2016-6-11
帖子
3
49
发表于 2016-7-8 21:59:06 | 只看该作者
大神求教
class Cuboid
  def initialize(number)
    @cuboid_number = number
  end
  def shuchu
    number = @cuboid_number
    print "长方体#{number}"
  end
end
cuboid_001 = Cuboid.new(001)
cuboid_001.shuchu
结果:长方体1
怎样才能得到结果:长方体001
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

50
 楼主| 发表于 2016-7-8 22:13:33 | 只看该作者
银羽凌云 发表于 2016-7-8 21:59
大神求教
class Cuboid
  def initialize(number)

001表示一个八进制数,因此不建议你这样给实变量赋值。

一个可行的办法是这样
[pre lang=Ruby]def count
  print sprintf("长方体%03d", @cuboid_number)
end[/pre]

然后调用cuboid_001 = Cuboid.new(1)
利用sprintf可以进行格式化输出。

至于第一个问题,我不会写。你可以考虑使用eval来计算表达式的值。
name='xiaoming'
eval name+'.name = "小红"'
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 10:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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