Project1

标题: 請問兩個回圈的循環方法 [打印本页]

作者: sai90306    时间: 2012-5-18 16:51
标题: 請問兩個回圈的循環方法
本帖最后由 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


dsu_plus_rewardpost_czw
作者: orzfly    时间: 2012-5-18 17:02
本帖最后由 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
’’
作者: sai90306    时间: 2012-5-18 19:37
本帖最后由 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
复制代码
���
作者: orzfly    时间: 2012-5-18 19:56
我先吐槽一下……我会告诉你我就是那时候的蓝蓝小雪么……

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


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

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




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