Project1

标题: 关于“迭代器”和“巨大事件通行判定”残留疑问?? [打印本页]

作者: dabojun    时间: 2012-5-17 14:49
标题: 关于“迭代器”和“巨大事件通行判定”残留疑问??
本帖最后由 dabojun 于 2012-5-17 14:56 编辑


‘‘──dabojun于2012-5-16 18:26补充以下内容

正在看迭代器的讲解,既http://blog.csdn.net/classwang/article/details/4692856  {:2_265:}
想知道里面的"/n"是什么意思呀??反复出现@

’’
还有这一段也不理解……~ 划红线的部分都不大理解的说呵…   {:2_261:}

20.4.4  sort_by方法
sort方法会在每次进行比较时判断元素。让我们来计算一下前面比较字符串长度的示例中,length方法到底被调用了几次。

ary = %w(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)

num = 0                  # 调用的次数

ary.sort {|a, b|

  num += 2               # 累加调用的次数

  a.length <=> b.length

}

p num                      #=> 54

这个示例可以知道有20个元素的时候,length方法要调用54次。按理说对每个字符串调用一次length方法再排序就可以了,所以这里做了很多次多余的调用动作。当数组很长,或者判断元素的运算很耗时的时候,这些多余的调用动作会对整体执行时间造成很大的影响。




‘‘──dabojun于2012-5-17 14:16补充以下内容

关于over_trigger是否可以这样解释?                    {:2_260:}
# 跳跃中以外的情况下、启动判定是正面的事件
106.                if not event.jumping? and not event.over_trigger?
107.                  event.start
108.                  result = true
109.                end
110.              end
111.            end      # (“if not”用法)(over为:以上,以外,trigger为:触发,启动判定/触发条件:0,1,2,3,4)

’’


‘‘──dabojun于2012-5-17 14:33补充以下内容

还有这段也不知是何意? 和计数器有何关系呢?计数器是计步数,还是时间倒计时窗口呢?  {:2_255:}  
# 找不到符合条件的事件的情况下
113.            if result == false
114.              # 正面的元件是计数器的情况下
115.              if $game_map.counter?(new_x, new_y)
116.                # 计算 1 元件里侧的坐标 (里侧的坐标又是何意?)
117.                new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
118.                new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)


追加“巨大事件通行判定”部分脚本:
86.        class Game_Player
87.          #--------------------------------------------------------------------------
88.          # ● 正面事件的启动判定
89.          #--------------------------------------------------------------------------
90.          def check_event_trigger_there(triggers)
91.            result = false
92.            # 事件执行中的情况下
93.            if $game_system.map_interpreter.running?
94.              return result
95.            end
96.            # 计算正面坐标
97.            new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
98.            new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
99.            new_point = [new_x, new_y]
100.            # 全部事件的循环
101.            for event in $game_map.events.values
102.              # 事件坐标与目标一致的情况下
103.              if event.areas.include?(new_point) and
104.                 triggers.include?(event.trigger)
105.                # 跳跃中以外的情况下、启动判定是正面的事件
106.                if not event.jumping? and not event.over_trigger?
107.                  event.start
108.                  result = true
109.                end
110.              end
111.            end
112.            # 找不到符合条件的事件的情况下
113.            if result == false
114.              # 正面的元件是计数器的情况下
115.              if $game_map.counter?(new_x, new_y)
116.                # 计算 1 元件里侧的坐标
117.                new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
118.                new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
119.                new_point = [new_x, new_y]
120.                # 全事件的循环
121.                for event in $game_map.events.values
122.                  # 事件坐标与目标一致的情况下
123.                  if event.areas.include?(new_point) and
124.                     triggers.include?(event.trigger)
125.                    # 跳跃中以外的情况下、启动判定是正面的事件
126.                    if not event.jumping? and not event.over_trigger?
127.                      event.start
128.                      result = true
129.                    end
130.                  end
131.                end
132.              end
133.            end
134.            return result
135.          end
dsu_plus_rewardpost_czw
作者: orzfly    时间: 2012-5-17 15:14
/n 只是一个字符串啊……这个关你什么事情了……

a=%w (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
p a
你自己看看 a 是什么即可
这是定义数组的简便方法,来源于 Perl。

counter 这里不是计数器,是柜台……
这是英语的一词多义……
坑爹的翻译……
作者: dabojun    时间: 2012-5-17 15:28
orzfly 发表于 2012-5-17 15:14
/n 只是一个字符串啊……这个关你什么事情了……

a=%w (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

为什么结果是“54”呢,算不懂了…
作者: orzfly    时间: 2012-5-17 18:26
dabojun 发表于 2012-5-17 15:28
为什么结果是“54”呢,算不懂了…

这个涉及到算法原理了。他举例子的作用是说明 sort 在比较时每次都会调用块来比较,而 sort_by 是先对每个元素计算块的值然后拿这个值来排序……
作者: dabojun    时间: 2012-5-19 10:28
orzfly 发表于 2012-5-17 18:26
这个涉及到算法原理了。他举例子的作用是说明 sort 在比较时每次都会调用块来比较,而 sort_by 是先对每 ...

嗯,细节先不计较了#版主啊,这个帖子先不要结掉啊~ 我要把迭代器的部分看完自己结@
作者: 灵魂の补给    时间: 2012-5-19 12:12
这本书好像是ruby programing呢
我书柜里还有
作者: dabojun    时间: 2012-5-20 10:48
本帖最后由 dabojun 于 2012-5-22 10:12 编辑
dabojun 发表于 2012-5-19 10:28
嗯,细节先不计较了#版主啊,这个帖子先不要结掉啊~ 我要把迭代器的部分看完自己结@ ...


我要自己结,呵呵~ 其实,orz提供了三段关于迭代器的资料,我想尽量看完整再结@


‘‘──dabojun于2012-5-21 12:21补充以下内容

像这种要对所有元素使用相同的运算方式所运算出的结果进行排序时,使用sort_by方法可以节省不少时间。

ary = %w(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)

ary.sort_by {|item|

  item.length

}

sort_by方法会对每个元素先执行一次区块指定的动作,再以这个结果进行排序。

那么这一段的结果会是什么呢??   {:2_257:}
会是 ary = [10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9]  这样的数组排列吗?@  

问题就先问到这儿了,提问结束~




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