2017-02-01 3 views
1

私はゲームのためのこのポップアップカウントダウンタイマーを構築しています。問題は、アニメーションを更新してディスプレイが変更されるようにする方法を見つけることができないことです。これまでのところ動作しますが、数字が変わるのを見ることはできません。それは00:00に混じります。私はこれまでのところ、この変更に問題があることはかなり肯定的です。これは緑色の靴で行われます。私がここで間違っていることは何ですか?ルビー緑の靴のタイマー

#Timer button used for creating a countdown timer for the game. 
    #Game ends when timer is zero. 
    flow width: 80, height: 0.2 do 
    button 'Timer', width: 1.0, height: 1.0 do 
     window do 
     def time_change! 
      @clock = '%02d:%02d' % [@second/60, @second % 60] 
      if(@second == 0) 
      alert "game is over" 
      @clock = '00:00' 
       close() 
      para @clock, size: 50, stroke: black 
      end 
     end 

     background whitesmoke 
     @clock = '00:00' 
     para @clock, size: 50, stroke: black 


     @second = 10 

     animate(1) do 
      @second -= 1 
      time_change! 
      para @clock, size: 50, stroke: black 

     end 
    end 
end 
+0

ウィンドウブロック内にメソッドを定義することについて説明しているリファレンスはありますか?私はdefが現在のクラスが何であれ自分自身を添付していることを知っています。ウィンドウブロック内の自己はウィンドウですが、必ずしも現在のクラスがウィンドウであるとは限りません。 'instance_eval'ブロックではselfが呼び出し側ですが、現在のクラスは呼び出し側のシングルトンクラスです。一方、クラス内では 'class Dog'と言うが、defの外にある、self = Dogであり、現在のクラスはDogです。あなたのコードはエラーなく実行されるので、 'self = window = current_class'です。 – 7stud

+0

私は実際にルビーには新しいので、私はそれを推測した、あなたは間違いなく実行されます。面白いのは、@ p.textとsegフォールトのメソッドエラーを取得して、パラの呼び出しの中でインスタンス変数を呼び出そうとしたときです。悲しいことに、緑色の靴は現在の靴に比べて少し役に立たないけど、それは私のグループの選択肢です。今回はブロック外のメソッドを作成し、それが何か変わるかどうかを確認します。 – LogNIsGood

+0

大丈夫です。私はあなたの質問に答えるために定期的な靴(walkabout)を使用しました。そしてOSXではひどく見えます。ウィンドウのタイトルはぼやけており、最小、最大、および閉じるボタンもあります。これは、誰かがひどい携帯電話でOSXのウィンドウを撮影し、それを.pngに変換してから、それを使ってウィンドウを表現したようなものです。他にも問題があります:要素のタイトル、サブタイトル、キャプションのテキストがベースラインで切り取られます。何年も前、私はwxRubyを使いこなしました。残念ながら、メンテナーはwxRubyをあきらめました。 – 7stud

答えて

0

あなたは時計を表示し、現在のパラのテキスト置き換えることができます。時計はactualy各時間増分を示している、あなたはanimate(1)animate(10)を変更することで、物事を遅くすることができていることを確認するには

Shoes.app do 
    flow do 
    button 'Timer', width: 100, height: 50 do 
     window width: 200, height: 100 do #Open a child window when the button is clicked 
     seconds = 3 
     tenths = 0 
     clock = '%02d:%02d' 

     flow do 
      @p = para clock % [seconds, tenths], #Assign the clock para to an instance variable, 
      size: 50,       #which will make the variable visible outside this block. 
      stroke: black 
     end 

     a = animate(10) do #Upate the clock every 1/10 of a second. 
      tenths -= 1 

      if tenths < 0 
      tenths = 9 
      seconds -= 1 
      end 

      @p.text = clock % [seconds, tenths] #Replace the clock text. 

      if seconds == 0 and tenths == 0 
      a.stop 
      alert("game over") 
      close #=>self.close where self is the window whose block contains this code 
      end 
     end #animate 

     end #window 
    end #button 
    end #flow 
end #app 

を。

関連する問題