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

Project1

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

[已经解决] 【提问】类里的变量寿命问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
210 小时
注册时间
2012-7-19
帖子
259
跳转到指定楼层
1
发表于 2014-11-1 19:53:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
# Problem 1

# 我在类里定义的变量,在函数(方法)中使用的时候提示不存在。

RUBY 代码复制
  1. class Window_TitleCommand < Window_Command
  2.  
  3.   @img_the_story = {}
  4.   @img_the_story["oi"] = Cache.img_titlecommand("Option.png")
  5.   @img_the_story = Cache.img_titlecommand("Option.png")
  6.   # 函数体
  7.   def img_rect_test
  8.     @img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
  9.     contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
  10.   end
  11.  
  12. #
  13. # ...
  14. #
  15.  
  16. end


# 但是当我把定义写在函数(方法)体内,则顺利执行;去掉 @ 标识也通不过解释。
#############################################################################################################

# Problem 2

# Window_Command 类中 add_command 的用法,这个函数(方法)有四个参数,其中第四个参数 ext 提示的是可扩展数据,
# 那它可以是一个 Bitmap 对象,甚至是链表或者哈希表的一个元素吗?

#############################################################################################################

# Problem 3

# nil 的用法。nil 应该用在什么场合?值为 nil 变量能用 Bitmap 对象再赋值吗?

#############################################################################################################

# 谢谢大家的指导和指教!o(∩_∩)o

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-11-1 20:09:09 | 只看该作者
本帖最后由 taroxd 于 2014-11-1 20:13 编辑

文本编辑器对输入法支持不好,英文解释凑合看看吧

# Problem 1

# 我在类里定义的变量,在函数(方法)中使用的时候提示不存在。

see the comment
RUBY 代码复制
  1. class Window_TitleCommand < Window_Command
  2.       # the instance variable of Window_TitleCommand
  3.       # it will last forever, unless the class Window_TitleCommand is destroyed
  4.       @img_the_story = {}
  5.  
  6.       @img_the_story["oi"] = Cache.img_titlecommand("Option.png")
  7.       @img_the_story = Cache.img_titlecommand("Option.png")
  8.       # 函数体
  9.       def img_rect_test
  10.         # the instance variable of an instance of Window_TitleCommand
  11.         # it will exist as long as the instance exists
  12.         @img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
  13.         contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
  14.       end
  15.  
  16.     #
  17.     # ...
  18.     #
  19.  
  20.     end


# Problem 2

# Window_Command 类中 add_command 的用法,这个函数(方法)有四个参数,其中第四个参数 ext 提示的是可扩展数据,
# 那它可以是一个 Bitmap 对象,甚至是链表或者哈希表的一个元素吗?

ok.

#############################################################################################################

# Problem 3

# nil 的用法。nil 应该用在什么场合?值为 nil 变量能用 Bitmap 对象再赋值吗?

nil is just an object indicating 'nothing'. It can be used in a if statement, just like false.

Actually, you may be frequently using nil in an if condition, even without knowing it!

Just treat it as false.

The variable can always be assigned with a bitmap, or an object of any class.

#############################################################################################################

点评

但是,刚才又一个发现——在子类定义的实例变量,在初始化super前声明也能通过,不明白这是为什么。 感谢解答!  发表于 2014-11-1 21:42
了解了,但是之后发现不是这个问题,而是——我定义在子类中的东西,它的调用是在父类(超类?)中,因而无法使用,所以只能在父类中定义。  发表于 2014-11-1 21:41

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
3
发表于 2014-11-1 20:10:45 | 只看该作者
本帖最后由 test 于 2014-11-1 21:03 编辑

>问题1
把@xxx的变量定义到类的initialize方法里。
@xxx是类实例变量,实例化之后在当前的实例里面有效。
@@xxx是类变量,在同一个类里面共通使用,在一个实例里改变它,其他实例里也会跟着变。
xxx是局部变量,只在当前函数里面有效。
$xxx是全局变量,从定义开始任何地方都有效。

>问题2
可以。

>问题3
nil表示什么都没有。
nil通常可以用来判断变量是否定义、数组或哈希表某个元素是否存在等等。

>值为 nil 变量能用 Bitmap 对象再赋值吗?
这句话不知道什么意思。变量不管值是什么都可以重新赋值(?)

点评

可以了,谢谢你的帮助!  发表于 2014-11-3 19:30
还有,Sprite的坐标值会受Viewport的位置影响的。如果如果z轴改得很大都不行,看一下Sprite所在Viewport的z轴吧,同样,z值大Viewport的的会显示在前面。  发表于 2014-11-3 17:51
Sprite的z轴大的会档住z轴小的,z轴相同时,y轴大的显示在y轴小的前面。被档住的话试着把Sprite的z轴改大,这样就不会被档住了。  发表于 2014-11-3 17:42
谢谢你的解答!  发表于 2014-11-2 22:03
而且只有当比208小的时候,会完全消失而不是消失一截,如果是208以上就出现了  发表于 2014-11-2 22:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2014-11-1 21:45:58 | 只看该作者
刚刚文本编辑器没弄好中文输入法,抱歉……

ruby 的 initialize 并没有像 C++ 的构造函数那样有严格的先后顺序。事实上你可以创建一个类的对象而不调用这个类的 initialize 方法(这是邪道,我就不说怎么做了)
注意,Ruby 的 new 并不是关键字。new 只是在创建对象之后顺便帮你调用了一下 initialize 而已。因此并不需要把 initialize 特殊看待

点评

z值相同时,y值高的精灵显示在上方  发表于 2014-11-3 12:34
而且只有当比208小的时候,会完全消失而不是消失一截,如果是208以上就出现了  发表于 2014-11-2 22:05
另外 在标题画面的时候,我新建了一个Sprite,结果当这个Sprite的y轴小于208时,就看不见这个Sprite了,这是为什么?  发表于 2014-11-2 22:05
懂了,创建类的对象这个方法我还是看不懂,因为太陷进C++了,对与这样灵活的语言感觉有点麻烦…… 谢谢解答!  发表于 2014-11-2 22:04
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-2 02:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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