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

Project1

 找回密码
 注册会员
搜索
查看: 6004|回复: 25
打印 上一主题 下一主题

[讨论] 脚本学习~提问教程贴~~(更新:2月11日)

 关闭 [复制链接]

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1460
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

跳转到指定楼层
1
发表于 2011-2-8 01:40:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 「旅」 于 2011-2-11 10:25 编辑

【提问区域】
喵最近比较有空~~所以开了这个帖子~~大家可以到这里提基础脚本的问题,或者实用脚本的写法~~~
p.s小旅对理论的东西知道得比较少,不过如果你是来制作游戏的话,理论不重要,关键是怎么运用哦~~
p.s.2千万不要在这个帖子里索要什么脚本哦,这里只负责给大家学习的~~
  1. 范例如下,都是我以前搞不懂的问题,各位需要的话可以提出来~~
  2. Q1:脚本里的def [](id)~end是怎么回事呢?怎么运用?
  3. Q2:怎么可以描绘图型啦、血条啦之类的呢?
  4. Q3:如果我要看默认脚本的话,应该从哪里看起合适?
  5. Q4:能不能介绍一下默认脚本中各类脚本的用途和特征呢?
  6. Q5:什么return然后返回并中断的,可以说明一下到底是怎么回事吗?
  7. Q6:self或super之类的到底是怎么用的?
复制代码


【教程区域】
喵另外顺便写一些教程好了~~~嗯最近对脚本的写法有研究,试试看写出大家都能很容易理解的教程~~~
p.s教程将先讲解整体脚本的格式,随后渐渐会有一些实用脚本、必须了解的脚本等内容献上~~希望认真学习的同学要多点来捧场哦~~~

评分

参与人数 7星屑 +3332 收起 理由
IamI + 1092 塞糖不解释
阿夏依岚 + 6 凑整的糖果~~~
忧雪の伤 + 10 糖果
小角色 + 332 小旅开始燃烧了
david50407 + 1332 塞糖表示支持~~
禾西 + 280 塞個新年糖
kakarot + 280 塞糖支持旅喵=w=

查看全部评分

Lv2.观梦者

旅之愚者

梦石
0
星屑
250
在线时间
812 小时
注册时间
2007-7-28
帖子
2148

贵宾

26
发表于 2011-2-11 12:35:56 | 只看该作者
回复 认真的学 的帖子

clone是一种浅复制,只有被复制的对象本身会产生一个全新的拷贝,可以任意操作clone对象而对本对象无影响,但是注意:对象内部关联的对象仅仅是复制了引用
举例如下:
a=[1,2]
b=[a]
c=b.clone
b[0][1]=3   #这时a=[1,3]
p c            #[[1,3]]

clone可以复制单例类而dup不可以

点评

抄书的。不过刚才测试了一下,clone会复制对象的单例方法,而dup不会  发表于 2011-2-14 12:21
dup 和 clone 都会拷贝对象的污染状态,但 dup 不会拷贝对象的冻结状态,这就是区别。“clone可以复制单例类而dup不可以”这个何以见得?  发表于 2011-2-14 11:31
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
869 小时
注册时间
2009-3-13
帖子
782
25
发表于 2011-2-11 10:47:44 | 只看该作者
本帖最后由 认真的学 于 2011-2-11 10:47 编辑

嗯......讲解一下clone吧......具体的问题是:
1、原值和原值clone之后有什么区别?
2、clone和dup的区别......
另外什么是【整型(数?)的clone值】,整数不是没有clone方法么?

点评

整数和符号均为全局常量,不可以clone也不能设置单例方法  发表于 2011-2-11 12:39
我的寒假活动作品:http://rpg.blue/forum.php?mod=viewthread&tid=281065
咱的龙蛋,求点击:
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
40255
在线时间
7510 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

24
发表于 2011-2-11 09:52:15 | 只看该作者
本帖最后由 fux2 于 2011-2-11 10:02 编辑

回复 「旅」 的帖子

果断删除错误言论,事实是
    ! 叹号结尾说明此方法很危险,有副作用 传入参数会被修改
    ? 问号结尾说明这是一个查询方法, 通常是返回布尔值的方法
    = 等号结尾说明此方法用于赋值

这才是RGSS的巨大黑手……


点评

那只是一般的命名习惯而已,并不是一定是这样的。!方法比较常用的叫法是“破坏性方法”  发表于 2011-2-14 20:03
><啊列凶手原来是RGSS……  发表于 2011-2-11 10:08
终于弄明白了= =  发表于 2011-2-11 10:02
母鸡哥好好加油哦~~~  发表于 2011-2-11 09:56
待咱去研究一下XD  发表于 2011-2-11 09:54
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1460
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

23
 楼主| 发表于 2011-2-11 09:50:15 | 只看该作者
回复 fux2 的帖子

唔喵不过好像不是的说~~如果是整型的话,返回值是整型的clone值~~所以返回后操作不会影响原本的数值的说~~还有那两个方法是缺一不可的说,喵很奇怪的说><

点评

a += 1等同于a = a + 1,所以同时需要getter和setter  发表于 2011-2-11 12:28
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
40255
在线时间
7510 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

22
发表于 2011-2-11 09:33:27 | 只看该作者
本帖最后由 fux2 于 2011-2-11 09:52 编辑

回复 「旅」 的帖子

内啥,这里错了,于是编辑掉了。

点评

啊列原来是这样喵><  发表于 2011-2-11 09:35
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1460
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

21
 楼主| 发表于 2011-2-11 09:22:03 | 只看该作者
话说上楼讲了@command_window.opacity = 120的奥秘~~但是其实呢不单是写入和读取,只要你定义了如下格式的:

  1.    def name
  2.     return @name
  3.   end
  4.   def name=(name)
  5.     @name = name
  6.   end
复制代码
那么就会附送一个功能哦~~~就是@command_window.opacity += 120或@command_window.opacity -= 120啦~~~
是不是很奇怪呢,其实这个东西是RGSS自动给的~~~具体怎么操作的我们没必要知道,反正只用知道如上代码那样定义的话,我们就可以仿真的制作出一个变量了。

p.s不过如果你不把实变量(例如上面的@name)初始化,那么是不能用+=或-=的~~因为那时@name是nil,而nil是没有这些操作的~~~必须把它初始化为整型,也就是整数哦(例如0或999之类)~~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1460
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

20
 楼主| 发表于 2011-2-11 09:18:56 | 只看该作者
本帖最后由 「旅」 于 2011-2-11 09:28 编辑

也许大家接触过@command_window.opacity = 120这个东西~~给新人讲解一下好了~~~
喵告诉大家哦~~其实.opacity这个东西并非真正的变量哟~~注意他有一个点~~而这个格式就是操作方法的~~
所以其实它是一个方法来着~~
(p.s其实这个内容在脚本入门里有,不过他讲得很模糊呢~~)



  1. class Person
  2.   def name
  3.     return @name
  4.   end
  5.   def name=(name)
  6.     @name = name
  7.   end
  8. end
复制代码
这个代码就是脚本入门里的~~~首先是return的用法~~~return可以将一个数值运送到调用它的地方~~
例如——
a = Person.new
p a.name
这时就会出现一个nil的提醒~~~因为@name根本没有初始化~~所以是nil(空)哦~~~
(那么我们试试初始化吧~~~有些同学也许注意到了,在默认脚本里类的开头常可以看到initialize(中文就是初始化)~~那个东西其实在a = Person.new时就会调用到哦~~也就是说只要.new就会调用initialize。p.s这个情况是唯一的哟~~)

各位加上这句~~~
  1.   def initialize
  2.     @name = "阿尔南瓜"
  3.   end
复制代码
然后再使用p a.name~~我们发现真的把@name给运送来了~~撒花~~
(p.s大家要注意运送的功劳都是return的哦~~def name这个name可以改成别的,因为他只是一个方法名~~但如果我们改为"return @other"的话,就不会显示"阿尔南瓜"了~~~)
所以return的好处在于,一般情况下,我们是不能读取类里的实变量的~可是有了这个后我们可以突破界限了~

然后还有def name=(name)这个~~也就是我们最开始用到的~~他附带了一个参数~~
这样的话,我们就可以从外界写入一个数值,然后改变类里面的实变量了~~~这两样可以简单理解为"读取"和"写入"~~~
(p.s大家要记住这两样东西~~真正写起脚本的话,这个是无处不在的哟~~~)

最后介绍一下attr_reader、attr_writer、attr_accessor~~~
其实更简单哟~~~他就是等于简化了代码~~~例如我们写入attr_accessor :name
就等于自动完成了下面这两句~~~

  1.   def name
  2.     return @name
  3.   end
  4.   def name=(name)
  5.     @name = name
  6.   end
复制代码
而attr_reader(读取)就是只有前一句~~attr_writer(写入)是只有后一句~~~
喵现在大家应该大致可以了解默认脚本里Game_Xxxxx那些东西了吧~~~

点评

最后一句return的话可以省略return  发表于 2011-2-11 09:28
回复 支持 反对

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
19
发表于 2011-2-10 18:32:27 | 只看该作者
回复 clannad 的帖子

显示伤害的开关,设置了damage后再把damage.pop打开就可以显示伤害

PS:如果没有命中damage是"Miss" 注意是字符串

点评

好的,学习了  发表于 2011-2-10 18:48

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1055 小时
注册时间
2010-6-17
帖子
85
18
发表于 2011-2-10 18:24:50 | 只看该作者
回复 「旅」 的帖子

。。。。。.damage.pop是什么意思啊?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-15 01:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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