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

Project1

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

[已经解决] 如何按任意键跳过一段含有多个循环的程序

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2009-12-22
帖子
82
跳转到指定楼层
1
发表于 2011-3-7 16:16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 天使怪盗 于 2011-3-8 23:22 编辑

看标题可能不太明白、其实是目前一段程序显示图片用了多个loop do、中间使用的是if Input.trigger?(Input::C) break、想实现在任意一个loop do中按了任意键就忽略之后所有的程序直接转到其它场景如Scene_title、但是只按任意键的话似乎只能中断当前循环、仍然会进行下一段循环、各位大虾求助

点评

"天使怪盗 主要是并列循环的一键所有跳出不是嵌套循环的中断跳出~" - 换汤不换药,我那个只是恰好写成嵌套了而已,完全可以写成并列。  发表于 2011-3-21 03:17

Lv1.梦旅人

梦石
0
星屑
60
在线时间
141 小时
注册时间
2010-12-30
帖子
312
2
发表于 2011-3-7 16:19:24 | 只看该作者
回复 天使怪盗 的帖子

按键之后使某个变量改变,然后再每个循环里判断并break,RUBY可不像C可以直接跳出来。

点评

已经解决了~感谢~不会写方法改程序还真麻烦啊~  发表于 2011-3-7 16:38

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
「旅」 + 200 + 2 认可答案

查看全部评分

一个字。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
3
发表于 2011-3-7 17:24:31 | 只看该作者
回复 天使怪盗 的帖子

表示可以把“循环的地方”抽出来,建一个方法调用它,需要退出循环时,return就好了

点评

这种方法在写的时候比较简单方便、但是每个循环的内容都不一样、多次调用方法的话在看脚本能力较弱的情况下并不直观…现在才刚刚入手脚本而已  发表于 2011-3-7 17:31
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

乌有君
4
乌有君  发表于 2011-3-7 17:50:01
本帖最后由 匿名 于 2011-3-7 17:51 编辑


C的年代,我们直接GOTO
RUBY的年代,我们catch/throw (直接丢个异常,我们就出去了,回头捕获一下)

吐槽:GOTO其实是神器,可惜一群不会用的小白吐槽它会搞坏代码……
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6940
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

5
发表于 2011-3-7 17:50:08 | 只看该作者
def abc
loop do
xxxxx
return if 按了某键
end # loop do 的end
loop do xxxxx
return if 按了某键
end # loop do 的end
end # def abc 的 end

调用 abc即可

点评

因为我直接用代码写的没有建立方法所以还是变量好点~毕竟是写OP~  发表于 2011-3-20 21:18
是么.你测试过了?  发表于 2011-3-9 09:52
这种return不能在第一个按键的时候同时忽略第二个loop do吧  发表于 2011-3-8 23:34











你知道得太多了

回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1265
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

6
发表于 2011-3-8 09:50:42 | 只看该作者
其實幫助中有:
catch(tag) {|tag| .... }
运行块并返回它的值。若在块的运行过程中,遇到与 tag 同名的 throw 的话,将把 throw 的第二参数的值作为返回值。

嵌套的循环不会因为遇到 break 就一下子跳出。这时可使用 catch。

catch(:loop1) {
  for i in 1..2
    for j in 1..2
      throw :loop1, j
    end
  end
}

点评

其实做连续图片播放的话、还不是嵌套、是连续的loop do、即这个循环完成之后进入下一个循环这样的并列循环~所以不知道这个脚本的可行性  发表于 2011-3-8 23:36
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
7
发表于 2011-3-10 07:41:34 | 只看该作者
Anonymous 发表于 2011-3-7 17:50
C的年代,我们直接GOTO
RUBY的年代,我们catch/throw (直接丢个异常,我们就出去了,回头捕获 ...

goto 在如今结构化编程的趋势下已经淡出很久了……
汇编层的跳转那真能算神器,C 层的 goto 只能局部跳转,和  setjmp/longjmp 小巫见大巫啊。

@楼主:
楼上各位说了不少,都是可行的,请你先测试一下再说。这里我再给出另一个方法——利用 Continuation 在 Ruby 层直接进行栈帧的跳转:
callcc do |cont|
  loop do
    loop do
      loop do
        # ...
        # 跳转到最外层
        cont.call
      end
    end
  end
end

p '跳出了所有循环'

另:Ruby 1.9 中 Continuation 只有再包含了其对应的标准库时才能使用。

点评

主要是并列循环的一键所有跳出不是嵌套循环的中断跳出~  发表于 2011-3-20 21:19
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-23 20:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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