tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルTimerだとうまくいかないんです!!
記事No11366
投稿日: 2008/02/08(Fri) 22:48
投稿者NAS
Loopでやると、結果がうまくいくのですが、
全く同じことをリアルタイムで追いたいので、タイマーを使いたいんですが、
うまくいかないので教えてください!
やりたいことは、温度勾配を作って、適温を27度にします。
基本はランダムウォークなんですが、27度に向かっているときは、
方向変換をしないようにして、遠ざかったら方向変換するというものです。
プログラムを下に載せます。
タイマーのところを、Do While j<=1000→j=j+1 Loop に変えると、
理想的な結果になります。タイマーにすると、ただのランダムウォークになります。
長くて、申し訳ないのですが、何かヒントがあれば教えてください!!


Private Sub Timer1_Timer()

Dim i As Single
Static T1 As Single
Static T2 As Single
Static T As Single
Static X As Single
Static X0 As Single
Static Y0 As Single
Static Y As Single
Static j As Long
Static N As Single
Dim Z As Single
Dim w As Single
w = 30
If i = 0 Then
Z = Rnd

If Z <= 0.25 Then
  Line (X, Y)-(X + w, Y), QBColor(15)
  X0 = X + w
  End If
  
  If Z > 0.25 And Z <= 0.5 Then
  Line (X, Y)-(X - w, Y), QBColor(15)
  X0 = X - w
  End If
  
  If Z > 0.5 And Z <= 0.75 Then
  Line (X, Y)-(X, Y + w), QBColor(15)
  Y0 = Y + w
  End If
  
  If Z > 0.75 Then
  Line (X, Y)-(X, Y - w), QBColor(15)
  Y0 = Y - w
  End If

End If
If i > 0 Then


  If Abs(T1 - T) - Abs(T2 - T) > 0 Then
  


  Z = N

  If Z <= 0.25 Then
  Line (X, Y)-(X + w, Y), QBColor(15)
  X0 = X + w
  End If
  
  If Z > 0.25 And Z <= 0.5 Then
  Line (X, Y)-(X - w, Y), QBColor(15)
  X0 = X - w
  End If
  
  If Z > 0.5 And Z <= 0.75 Then
  Line (X, Y)-(X, Y + w), QBColor(15)
  Y0 = Y + w
  End If
  
  If Z > 0.75 Then
  Line (X, Y)-(X, Y - w), QBColor(15)
  Y0 = Y - w
  End If
  
End If

If Abs(T1 - T) - Abs(T2 - T) <= 0 Then


  Z = Rnd

  If Z <= 0.25 Then
  Line (X, Y)-(X + w, Y), QBColor(15)
  X0 = X + w
  End If
  
  If Z > 0.25 And Z <= 0.5 Then
  Line (X, Y)-(X - w, Y), QBColor(15)
  X0 = X - w
  End If
  
  If Z > 0.5 And Z <= 0.75 Then
  Line (X, Y)-(X, Y + w), QBColor(15)
  Y0 = Y + w
  End If
  
  If Z > 0.75 Then
  Line (X, Y)-(X, Y - w), QBColor(15)
  Y0 = Y - w
  End If
  End If



End If


N = Z
T = 27
  T1 = 5 / 2400 * X + 25
  T2 = 5 / 2400 * X0 + 25
  
X = X0
Y = Y0

i = i + 1

End Sub

Private Sub Form_Click()

Dim T1 As Single
Dim A As Single
Dim B As Single

  For A = -2400 To 2400 Step 10
For B = -1800 To 1800 Step 10



T1 = 5 / 2400 * A + 25

  

Select Case T1
   Case Is >= 30
   PSet (A, B), RGB(100, 0, 0)
  Case Is >= 29
   PSet (A, B), RGB(200, 0, 0)
  Case Is >= 28
   PSet (A, B), RGB(255, 0, 0)
  Case Is >= 27
   PSet (A, B), RGB(255, 100, 0)
  Case Is >= 26
   PSet (A, B), RGB(255, 200, 0)
  Case Is >= 25
   PSet (A, B), RGB(255, 255, 0)
  Case Is >= 24
   PSet (A, B), RGB(200, 255, 0)
  Case Is >= 23
   PSet (A, B), RGB(0, 200, 255)
  Case Is >= 22
   PSet (A, B), RGB(0, 0, 200)
   Case Is >= 21
   PSet (A, B), RGB(0, 0, 100)
   Case Is >= 20
   PSet (A, B), RGB(0, 0, 50)
End Select

Next B
Next A

DrawWidth = 3


Line (2400, -1800)-(2400, 1800), QBColor(0)
Line (2400, 1800)-(-2400, 1800), QBColor(0)

Line (2400, -1800)-(-2400, -1800), QBColor(0)
Line (-2400, -1800)-(-2400, 1800), QBColor(0)


Line (-2400, 0)-(2400, 0), QBColor(0)
Line (0, 1800)-(0, -1800), QBColor(0)

End Sub

[ツリー表示へ]
タイトルRe: Timerだとうまくいかないんです!!
記事No11368
投稿日: 2008/02/09(Sat) 00:38
投稿者しんご
Timer1_Timerの中の変数「i」を
Dim → Static にすれば解決できると思います。

このプログラムだと、
タイマーイベント終了直前まで常にi = 0 です。

[ツリー表示へ]
タイトルRe^2: ありがとうございます
記事No11369
投稿日: 2008/02/09(Sat) 00:51
投稿者NAS
しんごさん!!迅速な返事ありがとうございます!
ホントですね!全く気づきませんでした(>_<)
本当にありがとうございました。

[ツリー表示へ]