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

Project1

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

[已经解决] 关于一部分代码的解释 以及伪变量self

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
380 小时
注册时间
2010-8-11
帖子
68
跳转到指定楼层
1
发表于 2011-9-10 17:04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
def update_move
    distance = 2 ** @move_speed   # 转换成移动距离
    distance *= 2 if dash?        # 跑步中加倍
    @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
    @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
    @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
    @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
    update_bush_depth unless moving?
    if @walk_anime
      @anime_count += 1.5
    elsif @step_anime
      @anime_count += 1
    end
  end
以上是来自Game_character的一部分代码
@real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
比如这句话,
@real.x 后面的算式得到的值是怎样计算的?

还有一个问题就是
self 这个伪变量指的是“当前方法的执行对象本身”
我知道 a= b.c
           def b
             self.c = 1
           end
     p a      a=> 1
除此以外self还有什么其他的用法吗 ?

Lv2.观梦者

梦石
0
星屑
260
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

2
发表于 2011-9-10 17:20:43 | 只看该作者
本帖最后由 亿万星辰 于 2011-9-10 17:21 编辑

@real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
比如这句话,
@real_x 后面的算式得到的值是怎样计算的?

首先要明白在执行这句之前,@real_x 必须得先有值,之后先要判断 if 后面的条件,当满足后面的表达式时,再做前面的赋值语句,这句代码等价于:
  1. if @x * 256 < @real_x
  2.   @real_x = [@real_x - distance, @x * 256].max
  3. end
复制代码
self 可以理解为调用对象所在类里的其他方法,比如 self.index self.width
还有在定义module的方法时,可以用 def self.xxx 来进行定义。
对于这个理解的也不是十分透彻,期待高手补充。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
380 小时
注册时间
2010-8-11
帖子
68
3
 楼主| 发表于 2011-9-10 17:25:15 | 只看该作者
亿万星辰 发表于 2011-9-10 17:20
@real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
比如这句话,
@real_x 后面的算式得 ...

其实我想知道 @real_x = [@real_x - distance, @x * 256].max 这句话的意思 是取得 中括号中两个变量的最大值吗?
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
260
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

4
发表于 2011-9-10 18:14:32 | 只看该作者
max 对应的还有 min 方法,可以取到这个数组中的最大、最小值
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39607
在线时间
7482 小时
注册时间
2009-7-6
帖子
13482

开拓者贵宾

5
发表于 2011-9-10 18:53:26 | 只看该作者
亿万星辰 发表于 2011-9-10 17:20
@real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
比如这句话,
@real_x 后面的算式得 ...

self是模块方法,可以直接从任何位置访问,例如Math::sin(30),直接定义的方法只能被包含的类引用,或用extend等等送出,通常模块方法或类方法称为匿名方法。


fux2于2011-9-10 18:54补充以下内容:
这只是坐标算法,了解没有什么意义,它由设计者决定。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
380 小时
注册时间
2010-8-11
帖子
68
6
 楼主| 发表于 2011-9-10 18:56:12 | 只看该作者
fux2 发表于 2011-9-10 18:53
self是模块方法,可以直接从任何位置访问,例如Math::sin(30),直接定义的方法只能被包含的类引用,或用ex ...

略微懂得一些了,
就好像以前见到的一些脚本如果删掉self 就会出现错误提示no method的状况。原来是这个道理!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 06:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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