Project1

标题: self.x = x 读不懂... [打印本页]

作者: a554187203    时间: 2013-3-17 21:40
标题: self.x = x 读不懂...
它的格式完全不懂
Window_Base的
  def initialize(x, y, width, height)
    super()
    @windowskin_name = $game_system.windowskin_name
    self.windowskin = RPG::Cache.windowskin(@windowskin_name)
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.z = 100
  end

猜测它是
让参数x等于 窗口的x坐标
不过目测是错的
作者: 亿万星辰    时间: 2013-3-17 21:52
self.x =是当前window_xxx类的一个继承方法,继承于Window,就是有个def x以及def x=(x)这样的东西,self.x =调用的就是后者,再或者你可以理解成attr_accessor :x
x 是上面初始化时传递进来的第一个参数x

self.x = x
就是调用当前类的 def x=(x) 方法,然后让左边的等于右边的

self.x = 100
让当前窗口的x坐标等于100
作者: a554187203    时间: 2013-3-17 21:57
亿万星辰 发表于 2013-3-17 21:52

我的理解其实就是
参数x =  Window的属性x
将右边的值赋予左边
对吗
另,膜拜大神啊啊啊啊啊啊啊!亲眼看到了大神啊啊啊啊啊啊!
用过好多您的脚本啊啊啊啊啊啊啊!
心情超激动的啊啊啊啊啊啊!!!!
作者: 亿万星辰    时间: 2013-3-18 09:00
a554187203 发表于 2013-3-17 21:57

“我的理解其实就是
参数x =  Window的属性x”


请注意在程序中 = 的意义,这个叫赋值号,不是等号,你上面的写法是错误的,参数x在这里属于被传递项,只可以在赋值号的右边,而左边是属性。
作者: a554187203    时间: 2013-3-18 16:48
亿万星辰 发表于 2013-3-18 09:00
“我的理解其实就是
参数x =  Window的属性x”

...晕了
以下引用以下帮助
x = 3
y = 4
第一行和第二行是进行变量的赋值。其中 = 号是赋值运算符。和数学上使用等号表示「左边等于右边」的意思不同,这里表示「左边的变量代入右边的数值」。在上述示例中,第一行 x 变量和第二行 y 变量分别代入数值 3 和 4。

self.x = x   
这里继续引用以下帮助
在游戏库的说明中会使用到「属性」这个术语。这并不是 Ruby 语言的概念,而是 RGSS 的独特用语。

例如精灵的 X 座标(Sprite#x),可以像下例那样对其进行取得和设定。

x = sprite1.x         # 取得
sprite2.x = x + 32    # 设定

像这个 x 那样,可以使用赋值运算符进行取得(读取)和设定(写入)两方面运算的方法,方便起见就称之为属性。


我已经完全不懂参数x应该在哪里了,帮助的内容这些要改变数值的东西不是应该在左边的么
或者说实际要改变的数值是  属性x?
作者: yagami    时间: 2013-3-19 12:36
本帖最后由 yagami 于 2013-3-19 12:40 编辑

def initialize(x, y, width, height)
里的x,y是形参用来接收的
self.x = x 也就是把形参X赋给self.x 赋值是将右边赋到左边
打个比方 你应该见过x=1这样的 但你见过1=x不


def initialize(a, b, width, height)
    super()
    @windowskin_name = $game_system.windowskin_name
    self.windowskin = RPG::Cache.windowskin(@windowskin_name)
    self.x = a
    self.y = b
    self.width = width
    self.height = height
    self.z = 100
  end

所谓形参也就是形式参数 所以不一定要XY  换成这样 和原脚本效果是一样的 应该懂了吧
作者: a554187203    时间: 2013-3-19 20:21
yagami 发表于 2013-3-19 12:36
def initialize(x, y, width, height)
里的x,y是形参用来接收的
self.x = x 也就是把形参X赋给self.x 赋值 ...

为什么x=1可以换成1=x呢?
其实主要关注的是这里
另外底下的高和宽也是同样的么
作者: yagami    时间: 2013-3-19 20:48
a554187203 发表于 2013-3-19 20:21
为什么x=1可以换成1=x呢?
其实主要关注的是这里
另外底下的高和宽也是同样的么 ...

x = sprite1.x         # 取得
sprite2.x = x + 32    # 设定


这段不理解对吧

我来解释下

前面我假设 有段
sprite1.x = 1
然后 x = sprite1.x    将 sprite1.x 的值 赋给x  由此得出x=1
然后 sprite2.x = x + 32 将x的值也就是1带入
所以 sprite2.x = 1+32
      
作者: 亿万星辰    时间: 2013-3-20 07:40
运算的时候先运算赋值号右边的东西,计算好以后,赋值给左边的。
作者: a554187203    时间: 2013-3-20 20:13
yagami 发表于 2013-3-19 20:48
x = sprite1.x         # 取得
sprite2.x = x + 32    # 设定

把右边的值附给左边可以理解
无法理解的是,这里的参数x不是还没数值么
无数值的赋给一个属性真的可以吗
其实我一直没弄懂的就是这个了
就算再笨帮助也是有好好的看了的!
作者: 亿万星辰    时间: 2013-3-21 11:14
a554187203 发表于 2013-3-20 20:13
把右边的值附给左边可以理解
无法理解的是,这里的参数x不是还没数值么
无数值的赋给一个属性真的可以吗

initialize 函数里的参数是通过 XXXX.new(xxx,xxx,xxx,xxx)中的参数来传递的




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1