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

Project1

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

[已经解决] 請問兩個回圈的循環方法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
跳转到指定楼层
1
发表于 2012-5-18 16:51:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sai90306 于 2012-5-18 16:53 编辑

有兩個回圈想要進行循環操作

例如
一開始先進入迴圈1
選C進入迴圈2
選B跳出迴圈1
進入迴圈2後
選C留在迴圈2
選B跳出迴圈2進入迴圈1
請問要怎麼寫呢?


以下是猜想的架構...
#迴圈1
loop do
  if Input.trigger?(Input::C)
  進行迴圈2
  end
  if Input.trigger?(Input::B)
  跳出回圈1
  end
end

#迴圈2
loop do
  if Input.trigger?(Input::C)
  留在迴圈2
  end
  if Input.trigger?(Input::B)
  跳出回圈2 且進入回圈1
  end
end


点评

再来看一下帖子 @@  发表于 2012-5-18 17:51

评分

参与人数 1星屑 +90 收起 理由
hys111111 + 90 贤者评分区间提高

查看全部评分

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

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

烫烫烫开拓者

2
发表于 2012-5-18 17:02:04 | 只看该作者
本帖最后由 orzfly 于 2012-5-18 17:05 编辑

  1. catch(:loop1){
  2.   loop do
  3.     if Input.trigger?(Input::C)
  4.       catch(:loop2){
  5.         #迴圈2
  6.         loop do
  7.           if Input.trigger?(Input::C)
  8.             #still还在loop2
  9.           end
  10.           if Input.trigger?(Input::B)
  11.             throw :loop2
  12.           end
  13.         end
  14.       }
  15.     end
  16.     if Input.trigger?(Input::B)
  17.       throw :loop1
  18.     end
  19.   end
  20. }
复制代码


‘‘──orzfly于2012-5-18 17:51补充以下内容

那是因为你需要对 Input 和 Graphics 进行刷新。

在 loop do 后面的判断前加上
Graphics.update
Input.update
’’

点评

太厲害了...竟然光看這樣的結構就知道必須加Graphics.update和 Input.update... 不過我有加的 可是仍然會無限  发表于 2012-5-18 19:32
好像會無限循環@@  发表于 2012-5-18 17:43
好像19行(相對位置)會報錯@@  发表于 2012-5-18 17:37
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
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
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
3
 楼主| 发表于 2012-5-18 19:37:58 | 只看该作者
本帖最后由 sai90306 于 2012-5-18 20:34 编辑
orzfly 发表于 2012-5-18 17:02
‘‘──orzfly于2012-5-18 17:51补充以下内容

那是因为你需要对 Input 和 Graphics 进行刷新。


目前是改成這樣子...

是在(據說已退出R界?)藍藍小雪大人的模組裡增加一個def

(因為藍藍小雪大人原本腳本的部分對這個問題應該沒有影響 為了避免版面佔用就先不付上來了)

這腳本有三個窗口
@text_window : 純粹顯示文字用 可以不理會
@sortcommand_window : 用來重新排列選單
@sort_window : 被重新排列後的選單


想要做到的效果是...
(LOOP1)
@sortcommand_window 一開始active = true
@sort_window一開始active = false

選擇@sortcommand_window的任何一個選項按C後
@sortcommand_window.active = false
@sort_window.active = true

     然後(LOOP2)
     如果在@sort_window的任何一個選項按C
     就傳回returnval = @sort_window.index
     如果按B
     @sortcommand_window.active = true
     @sort_window.active = false
     跳出本循環(LOOP2)

如果按B
跳出本循環(LOOP1)

類似這這樣子的
  1. module BlueSnow
  2. end


  3. module BlueSnow::RMWindows
  4.   #--------------------------------------------------------------------------
  5.   # ● 脚本 (sortbox)
  6.   #--------------------------------------------------------------------------
  7.   def sortbox(text,width,commands,lists)
  8.     returnval=-1
  9.     Graphics.update
  10.     @text_window = Window_Base_Sai.new(160,72,320,240)
  11.     @text_window.opacity = 0
  12.     @text_window.contents = Bitmap.new(288,208)
  13.     @text_window.z=9999
  14.     @sort_window = Window_Sort.new(width,commands,lists)
  15.     @sort_window.x = 160
  16.     @sort_window.y = 312
  17.     @sort_window.opacity = 0
  18.     @sort_window.z=9999
  19.     @sort_window.active = false
  20.     s41 = "name_sort"
  21.     s42 = "name_reverse"
  22.     s43 = "age_sort"
  23.     s44 = "age_reverse"
  24.     s45 = "height_sort"
  25.     s46 = "height_reverse"
  26.     @sortcommand_window = Window_Command.new(160, [s41, s42, s43, s44, s45, s46])
  27.     @sortcommand_window.x = 0
  28.     @sortcommand_window.y = 312
  29.     @sortcommand_window.opacity = 0
  30.     @sortcommand_window.z=9999
  31.     @sortcommand_window.active = true
  32.    
  33.     i=0
  34.     begin
  35.       loop do
  36.         @text_window.contents.draw_text(0,32 * i,288,32,text.split(/\\n/)[i])
  37.         i+=1
  38.       end
  39.     rescue
  40.     end
  41.     for i in 0...32
  42.       @text_window.opacity = 8 * i
  43.       @text_window.update
  44.       @sort_window.opacity = 8 * i
  45.       @sort_window.update
  46.       @sortcommand_window.opacity = 8 * i
  47.       @sortcommand_window.update
  48.       Graphics.update
  49.     end
  50.     catch(:loop1){
  51.       loop do
  52.       @text_window.update
  53.       @sort_window.update
  54.       @sortcommand_window.update
  55.       Graphics.update
  56.       Input.update
  57.         if Input.trigger?(Input::C)
  58.           case @sortcommand_window.index
  59.           when 0  #
  60.           lists.sort!{|a,b|
  61.           a.name <=> b.name}
  62.           when 1  #
  63.           lists.sort!{|a,b|
  64.           b.name <=> a.name}
  65.           when 2  #
  66.           lists.sort!{|a,b|
  67.           a.age <=> b.age}
  68.           when 3  #
  69.           lists.sort!{|a,b|
  70.           b.age <=> a.age}
  71.           when 4  #
  72.           lists.sort!{|a,b|
  73.           a.height <=> b.height}
  74.           when 5  #
  75.           lists.sort!{|a,b|
  76.           b.height <=> a.height}
  77.           end
  78.           @sort_window.refresh(commands,lists)
  79.           @sortcommand_window.active = false
  80.           @sort_window.active = true
  81.           @sort_window.index = -1
  82.           catch(:loop2){
  83.             #迴圈2
  84.             loop do
  85.             if @sort_window.active == true
  86.               if Input.trigger?(Input::C)
  87.                 returnval = @sort_window.index
  88.                  throw :loop1
  89.               end
  90.               if Input.trigger?(Input::B)
  91.                 @sort_window.active = false
  92.                 throw :loop2
  93.               end
  94.             end
  95.            end
  96.           }
  97.         end
  98.         if Input.trigger?(Input::B)
  99.           throw :loop1
  100.           break
  101.         end
  102.       end
  103.     }

  104.     for i in 0...32
  105.       @text_window.opacity = 256 - (8 * i)
  106.       @text_window.update
  107.       @sort_window.opacity = 256 - (8 * i)
  108.       @sort_window.update
  109.       @sortcommand_window.opacity = 256 - (8 * i)
  110.       @sortcommand_window.update
  111.       Graphics.update
  112.     end
  113.     @text_window.dispose
  114.     @sort_window.dispose
  115.     @sortcommand_window.dispose
  116.     Graphics.update
  117.     Input.update
  118.     return returnval
  119.   end
  120. end
复制代码
���

点评

迴圈2里也要 update @sortwin, input, graphics  发表于 2012-5-18 20:46
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

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

烫烫烫开拓者

4
发表于 2012-5-18 19:56:26 | 只看该作者
我先吐槽一下……我会告诉你我就是那时候的蓝蓝小雪么……

看着是没有什么问题了,唯一可能的就是#still那个
改成
returnval = .....
throw :loop1


‘‘──orzfly于2012-5-18 20:43补充以下内容

. #迴圈2里也要
update @sortwin, input, graphics
’’

点评

嗚嗚~~~太感動了!完美運行! 感謝大大幫忙!  发表于 2012-5-18 20:49
我已經修改為上面那個腳本了 在@sortcommand_window按下C後會正常刷新選單順序 不過怎麼刷玩就自動跳出了(整個sortbox自動關閉)?  发表于 2012-5-18 20:39
錯字..用到>遇到  发表于 2012-5-18 20:12
太好了!用到原作者!! 其實我懷疑過是不是大大你耶XDD 因為之前的頭像好像和博課上的一樣  发表于 2012-5-18 20:10
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 21:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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