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

Project1

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

[已经解决] 脚本基础问题 求各位前辈指点QAQ!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
跳转到指定楼层
1
发表于 2013-8-16 17:09:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 kuangding66 于 2013-8-18 19:05 编辑

本人是纯新手..{:2_264:}正在发奋自学脚本中,如果问得很弱智还请海涵。
问题很多很多,都是一步步阅读RMXP自带脚本时出现的问题...我一条一条整理好:

这部分问题源自XP自带脚本中的class Game_Temp

1.
关于attr_accessor : 这个代码的意思是不是 冒号右边写了什么就是实例化一个局部变量?
比如attr_accessor : a就是实例化了一个局部变量a?
然后从此之后只要出现 ABC.a就是获得a的值?
ABC.a = 15 就是说给a赋值为15?
如果可以的话,能不能介绍一下attr_accessor :使用的意义呢?

2.在class Game_Temp类中,出现了
  attr_accessor :shop_goods               # 商店 商品列表            
随后初始化对象
def initialize
在这里面却出现了一个
@shop_id = 0

这里就不清楚了,之前定义实例变量,所有变量都在初始化对象中一一对应,为什么shop_goods  和shop_id 不对应呢?

3.
依然是初始化对象中的
@map_bgm = nil   

我的理解是:
scene-map中的 调用战斗 部分,代码如下
记忆地图 BGM 、停止 BGM
$game_temp.map_bgm = $game_system.playing_bgm
$game_system.bgm_stop

全局变量使用map-bgm的方法,其值使之相等于全局变量playing-bgm的方法的值
这段代码是否意味着,记住正在播放的bgm,以便于以后使用,然后停止播放bgm
(即切换场景),可是,需要解决的是,这里面两个全局变量的方法相等?可以吗?

Scene-battle1中的 胜负判定 部分,代码如下
还原为战斗开始前的 BGM
$game_system.bgm_play($game_temp.map_bgm)
这段代码可以看出,全局变量使用bgm-play的方法,参数为$game_temp.map_bgm
的值。既然解释是还原战斗前bgm,那么猜测如下
bgm-play方法就是播放bgm,其参数就是某某音频对象
map-bgm方法就指自身(是否,各种bgm变化都带入这个对象中,以后就在调用呢?)

4.
@message_proc = nil              # 信息 返回调用 (Proc)

这个...鄙人完全不明白什么叫 返回调用...完全不懂,恳求指点

5.
@choice_start = 99               # 选择项 开始行
为什么是99呢?
还有,这个实例变量是不是控制选项最开始的位置呢?
紧接下来
@choice_max = 0      
这个就变成0了
所以不明觉厉...

6.
关于各种“标志”
比如
@gameover = false                # 游戏结束标志
@save_calling = false            # 存档 调用标志  

这些都只是一个是或否的判断,我可不可以理解为这个实例变量就是一个开关,以后检测如果true将会如何如何如果false将会如何如何?


{:2_264:} 感谢!先问这么多吧!我想先把原始的脚本啃下来。













Lv1.梦旅人

梦石
0
星屑
50
在线时间
141 小时
注册时间
2013-8-6
帖子
114
14
发表于 2013-8-19 06:14:21 | 只看该作者
要搞清楚accessor, reader 和writer的区别。accessor同时拥有reader和writer两个的功能。即方法化实例变量,同时允许对该变量的获取和修改。
另外为何要方法化? 很简单。在本类的实例方法中你可以直接调用和修改实例变量,但是在本类外(其他类)调用某一类的实例的时候只能使用方法来调用。如果你直接在类A中修改类B中的实例变量@b = 5, 系统提示该变量不存在。因此你要在A中调用B类的对象并修改其实例时只能先用accessor/reader/writer方法化然后再用类方法调用:B.b = 5
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
13
 楼主| 发表于 2013-8-18 21:59:05 | 只看该作者
yagami 发表于 2013-8-18 20:10
给你写了很通俗的一个例子

{:2_264:}太感谢啦!!!
这个例子太棒啦非常感谢!!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3588
在线时间
3065 小时
注册时间
2011-11-17
帖子
980
12
发表于 2013-8-18 20:10:20 | 只看该作者
给你写了很通俗的一个例子

  1. class A
  2. attr_reader :aa
  3. attr_accessor :bb   
  4. def initialize
  5.    @aa="aa"
  6.    @bb="bb"
  7.    @cc=1
  8. end

  9. def getcc
  10.    return @cc
  11. end

  12. def setcc(x)
  13.   @cc=x
  14. end

  15. def setaa(x)
  16.   @aa=x
  17. end
  18. end


  19. a=A.new
  20. p a.aa ###attr_accessor可以直接访问
  21. p a.bb###attr_reader 可以直接访问
  22. p a.getcc##没标识attr_ 所以不能直接访问 通过成员函数访问
  23. a.bb="bbb"###attr_accessor所以可以直接赋值
  24. a.setaa("aaa")###attr_reader 只能访问不能更改 所以通过成员函数修改
  25. a.setcc(10)###没标识attr_ 所以不能直接修改 通过成员函数修改
  26. p a.aa
  27. p a.bb
  28. p a.getcc

  29. #######以下都不合法
  30. a.aa="aaa"
  31. p a.cc
  32. a.cc=10

复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
11
 楼主| 发表于 2013-8-18 19:38:44 | 只看该作者
clear仔 发表于 2013-8-17 09:49
给个例子:
class A
attr_accessor:b#定义实例变量

所以说,变量c和d中@a之所以为nil是因为定义实例变量的时候只写了attr_accessor:b而没有attr_accessor:a吗?
虽然初始化中给@a的值为1,但是因为之前没有attr_accessor:a所以之后生成新实例的时候就没有@a的事了?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
10
 楼主| 发表于 2013-8-18 19:04:48 | 只看该作者
yagami 发表于 2013-8-16 21:05
你先搞清楚神马是类 神马是对象 面向对象的意思

{:2_264:}好的多谢建议
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
13 小时
注册时间
2013-8-16
帖子
31
9
 楼主| 发表于 2013-8-18 19:04:26 | 只看该作者
clear仔 发表于 2013-8-17 09:49
给个例子:
class A
attr_accessor:b#定义实例变量

实在是太感谢了!!!!{:2_264:}
感谢这么耐心的讲解!!!非常受用!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
8
发表于 2013-8-17 09:49:41 手机端发表。 | 只看该作者
本帖最后由 clear仔 于 2013-8-17 09:50 编辑

给个例子:
class A
attr_accessor:b#定义实例变量
def initialize#初始化
@a=1
@b=0
end
def add(@a,@b)
@b-=@a
end
end
c=A.new
d=A.new
d.b=5
这样c就是A的实例,则c就有变量b却没有a(或者说c的b就是初始化的0,c的a是nil,因为没有定义),且d也是A的实例,但是这时候c的b(0)却不等于d的b(5),它们就是实例变量,所以就同名却不同值,但它们都没有a(nil),所以不用类方法定义a,@a仅仅只是实变量,和全局变量差不多的性质:它是在这个类中都可以用的变量。
至于返回调用,参考4的原因,应该就是判定然后调用某个方法。(我也是头一回听返回调用)
5那个你仅仅只给变量,连什么类都不说的话,真没办法……

点评

纠正你一点 他们都是有a的 a好比是C++里的私有成员 只能通过公有接口访问或修改 在对象存在期间 a这个成员变量是一直存在的 他占据了一片内存空间  发表于 2013-8-18 20:18
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
7
发表于 2013-8-17 09:37:21 手机端发表。 | 只看该作者
本帖最后由 clear仔 于 2013-8-17 09:54 编辑

不好意思,多点了一下还没来得及取消,就占了一楼……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3588
在线时间
3065 小时
注册时间
2011-11-17
帖子
980
6
发表于 2013-8-16 21:05:20 | 只看该作者
你先搞清楚神马是类 神马是对象 面向对象的意思
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-8 11:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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