0

「敵」が前後に移動する必要があるアプリケーションを作成していますが、画像を自動的に左から右に移動して繰り返すにはどうすればよいですか?

これが私の現在のコードです。

Private Sub Timer1_Timer()
    enemy1.Left = enemy1.Left - 5
End Sub
4

4 に答える 4

1
Option Explicit
Const nTwipsPerMove = 15
Private Sub Timer1_Timer()
    Static strDirection As String
    If strDirection = "" Then strDirection = "left"
    If enemy.Left > 0 Then
        If strDirection = "left" Then
            enemy.Left = enemy.Left - nTwipsPerMove
        ElseIf strDirection = "right" Then
            enemy.Left = enemy.Left + nTwipsPerMove
        End If
    End If
    If enemy.Left = 0 Then
        If strDirection = "left" Then strDirection = "right"
        enemy.Left = enemy.Left + nTwipsPerMove
    End If

    If enemy.Left + enemy.Width = Me.Width - nTwipsPerMove * 5 Then
        If strDirection = "right" Then strDirection = "left"
        enemy.Left = enemy.Left - nTwipsPerMove
    End If
End Sub

nTwipsPerMove各ループで移動する twip の数を意味する Timer1.Interval = 10

于 2012-10-09T08:35:17.900 に答える
0

速度に1つの変数を使用し、敵が反対方向に移動する必要がある場合は負にすることもできます

'1 form with :
'    1 timer : name=Timer1
'    1 picturebox : name=Picture1
Option Explicit

Private msngStep As Single

Private Sub Form_Load()
  Timer1.Interval = 200      'delay in milliseconds between steps
  msngStep = ScaleWidth / 20 'step size, and direction
End Sub

Private Sub Timer1_Timer()
  Dim sngX As Single
  With Picture1 'the enemy
    sngX = .Left + msngStep                              'calculate new position
    If (sngX < 0) Or (sngX > (ScaleWidth - .Width)) Then 'check boundary
      msngStep = msngStep * -1                           'adjust direction
      sngX = sngX + 2 * msngStep                         'keep enemy inside
    End If
    .Left = sngX                                         'move to new position
  End With 'Picture1
End Sub
于 2012-11-08T14:57:03.113 に答える
0

私のVBがさびていることを今認めています。使い始めて約10年。とにかくこのコードをテストする必要はありませんが、このサンプルはあなたを近づけるか、少なくとも正しい方向に向けさせるべきだと思います.

Private Sub Timer1_Timer()
    Do
       enemy1.Left = enemy1.Left - 5
       If enemy1.Left = < 5 Then
          Do
             enemy1.Right = enemy1.Right + 5
          Loop Until enemy1.Right = > 1000 'or whatever your size is
       End If
    Loop
End Sub
于 2012-09-27T18:27:00.040 に答える
-1

VB (C# など) には組み込みの Timer オブジェクトが必要です。タイマーを使用すると、一定時間後にトリガーされるイベント ハンドラーを作成できるはずです。その関数では、画像を移動し、必要に応じてタイマーを再起動できます。

于 2012-09-27T18:14:38.653 に答える