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

Project1

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

[已经解决] 关于“迭代器”和“巨大事件通行判定”残留疑问??

[复制链接]

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
跳转到指定楼层
1
发表于 2012-5-17 14:49:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
真实的我不是这样子的~@

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2012-5-17 15:14:12 | 只看该作者
/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 这里不是计数器,是柜台……
这是英语的一词多义……
坑爹的翻译……
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
3
 楼主| 发表于 2012-5-17 15:28:23 | 只看该作者
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”呢,算不懂了…
真实的我不是这样子的~@
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

4
发表于 2012-5-17 18:26:07 | 只看该作者
dabojun 发表于 2012-5-17 15:28
为什么结果是“54”呢,算不懂了…

这个涉及到算法原理了。他举例子的作用是说明 sort 在比较时每次都会调用块来比较,而 sort_by 是先对每个元素计算块的值然后拿这个值来排序……
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
5
 楼主| 发表于 2012-5-19 10:28:52 | 只看该作者
orzfly 发表于 2012-5-17 18:26
这个涉及到算法原理了。他举例子的作用是说明 sort 在比较时每次都会调用块来比较,而 sort_by 是先对每 ...

嗯,细节先不计较了#版主啊,这个帖子先不要结掉啊~ 我要把迭代器的部分看完自己结@

点评

直接结掉吗?  发表于 2012-5-19 12:12
真实的我不是这样子的~@
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
154 小时
注册时间
2011-7-9
帖子
423
6
发表于 2012-5-19 12:12:31 | 只看该作者
这本书好像是ruby programing呢
我书柜里还有
New Game:  【QQ堂4.6单机版】(9月新版!【点此】)个人提供快速网盘http://ad.jlweb.tk/upload/ --- 密码:abcdefg
激零工作室孵化中.....网游make中。。招收游戏监督一名,上线时间:5~12 小时 招收脚本员,美工数位。。
本人Q:330639889 验证:zs    ----广:愿意帮我宣传签名的,站内PM
下面的东西是什么?!请进:http://tieba.baidu.com/p/1453289014【2012最新炸弹型ARPG游戏,历时2年间断坚持制作!】
[img=646,262]http://ftp.66rpg.com/WEB_PLUS/attachment/forum/201203/28/1655578kbk8bqkfazk2
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
45
在线时间
282 小时
注册时间
2012-2-18
帖子
161
7
 楼主| 发表于 2012-5-20 10:48:56 | 只看该作者
本帖最后由 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]  这样的数组排列吗?@  

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

点评

应该是短在前的。你运行一下不就知道了……  发表于 2012-5-22 10:36
真实的我不是这样子的~@
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 05:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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