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

Project1

 找回密码
 注册会员
搜索

新手在脚本入门里遇到的问题。。。

查看数: 2148 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2010-7-1 10:29

正文摘要:

终于决定学学脚本了…… - -! 不过其中遇到了一些问题,希望各位帮忙解答一下。 1、定义父类的问题 class Person < Monkey end复制代码这样定义了父类之后,如果在class Person < Monkey这一句下面定义一个方法的话, ...

回复

FeebleGoblin 发表于 2010-7-1 19:44:36
本帖最后由 FeebleGoblin 于 2010-7-1 19:46 编辑

恩 完全懂了,谢谢大家哈!
话说……怎么结帖啊 - -!

点评

PM斑竹例如我,我可以帮你结账。这次就直接结了~  发表于 2010-7-1 19:54
后知后觉 发表于 2010-7-1 18:20:25
$data_actors = load_data("Data/Actors.rxdata")
上面这行就是 $data_actors 的初始化

每个方法都会有一个返回值
return 是中断其所在方法的运行.并返回 return 右边的表达式结果.
作为该方法的返回值
如果return 右边没有东西就会返回 nil
不过这个 return 返回值是有特殊情况的.
如果其所在方法.在定义方法名的时候用了 = 号.
那么这个方法的返回值就是传递给这个方法的参数的值而不是return右边的结果

运行下面这段会显示 1 而不显示return右边的2

  1. class Abc
  2.   def name
  3.     return @name
  4.   end
  5.   def name=(name)
  6.     @name = name
  7.     return 2
  8.   end
  9. end
  10. a = Abc.new
  11. p a.name = 1
  12. exit
复制代码
而下面这个就会显示return右边的 2

  1. class Abc
  2.   def name
  3.     @name
  4.   end
  5.   def name(name)
  6.     @name = name
  7.     return 2
  8.   end
  9. end
  10. a = Abc.new
  11. p a.name 1
  12. exit
复制代码
当某个方法里没有return或者运行的时候并没有运行return的情况
这个方法的返回值 楼上某位说过了.

评分

参与人数 1星屑 +300 收起 理由
「旅」 + 300 正确解答~

查看全部评分

古明地馨 发表于 2010-7-1 15:26:31
提示: 作者被禁止或删除 内容自动屏蔽
zhangbanxian 发表于 2010-7-1 12:16:05
恩 大概懂了,谢谢三位。
不过……
如果像这样的话,为什么还是错误呢?


另外,「旅」 ,你的第一个脚本 ...
FeebleGoblin 发表于 2010-7-1 11:43

return只能用于方法,否则找不到返回点。
确切的说实变量是这个类具有的特点,而值是这个类的对象的属性。

评分

参与人数 1星屑 +300 收起 理由
「旅」 + 300 正确解答~

查看全部评分

「旅」 发表于 2010-7-1 12:10:40
因为Scene_Title的内容只是定义,必须放到它的调用后面。所以放在Scene_Title的30行后面。

另外我刚才试了下,似乎只有def~end才可以用return。其他的用break。(失误0.0
  1. def a
  2. loop do
  3. break
  4. p 1
  5. end
  6. return
  7. p 1
  8. end
复制代码
为什么还要编写后面的内容?——一般都是放在判断里面,判断如果不需要后面的内容,就直接结束。

x、y、ox、oy、bitmap相当于Sprite类的实变量?——正确说是@x、@y、@ox,他们是Sprite的实变量~
zhangbanxian 发表于 2010-7-1 11:02:25
1.属于Person类的。
2.return的意思就是,在方法执行到return的时候就直接跳出方法,返回return后面的对象,后面没有字就返回nil,(当然不写返回也是可以的,他会一直执行到end的地方然后自动返回end前最后一个语句)
3.实变量就是只在一个类中通用的变量,相当于这个类的属性,要在其他类中调用这个类的实变量就必须定义这个方法,name=(name)则是赋值。
4.这个在f1中有写,initialize是对象的私有方法,在Class生成对象的时候自动将参数传递给initialize,并调用initialize
5.脚本从上至下执行,第一行的时候还没有定义$data_actors,自然为nil,这一段是在Scene_Title时定义的,所以必须在$data_actors定义完毕之后使用。
IamI 发表于 2010-7-1 11:01:01
本帖最后由 IamI 于 2010-7-1 11:04 编辑

补充下……initialize是Class类定义的回调方法。
在每次执行Class类定义的new方法时会调用定义的initialize方法。
可以不定义initialize方法,获得的对象是全空的,没有任何实变量。
$data_属于RGSS不属于Ruby,必须在游戏应用中使用。

评分

参与人数 1星屑 +300 收起 理由
「旅」 + 300 正确解答~

查看全部评分

「旅」 发表于 2010-7-1 10:49:56
本帖最后由 「旅」 于 2010-7-1 10:51 编辑

1.属于Person

2.这里的中断是指不执行后面的内容,直接结束。例如:
  1. loop do
  2. p 1
  3. return
  4. p 2
  5. end
复制代码
这个只会显示1,而且不会循环。

3.实变量是一种在类或模块内部使用的变量,@xxx的格式,但它只有在内部才可以写入或读取。例如
  1. class A
  2. def initialize
  3. @b = true
  4. end
  5. end
  6. @b = false
  7. p @b
复制代码
这里p出来@b的值为false。也就说明必须到内部才可读取。而你的那句(↓)就是用来读取的~
  1. def name
  2.    return @name
  3. end
复制代码
  1. class A
  2. def initialize
  3. @b = true
  4. end
  5. def b
  6. return @b
  7. end
  8. end
  9. a = A.new
  10. p a.b
复制代码
这里的return @b不单会中断事件,还会返回后面放的参数@b。所以用这个就可以读取到@b了~
至于为什么要特意去设@b呢?这是因为结构,还有保存时整个类的实变量都可以存入。另外不能认为一切变量都可以设为全局变量,那样的话,直到关闭游戏,那些全局变量都会爆满你的内存,导致卡机……

4.initialize就是 生成类a.new时 运行的。没有执行initialize的话,@name的值为nil,所以用+时会出现错误。

5.因为必须等到它生成才可以用,而他的生成在Scene_Title里面~可以复制出来,放在前面即可~
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-14 15:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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