想动态模拟显示一小球与静止小球发生弹性碰撞的过程,
但是却不知怎么显示小球的运动及其碰撞,望英雄给予指点,
小弟将感激不尽!

解决方案 »

  1.   

    可以在PICTURE控件里通过代码画球,
    利时间控件,控制球的不同位置,
    结合坐标关系,实现所要模似效果。
      

  2.   

    Option Explicit
    Dim i As Integer
    Private Sub Form_Load()
    i = 0
    End SubPrivate Sub Timer1_Timer()
    Timer1.Interval = 100
    Command1.Move i
    i = i + 100
    End Sub楼主可以研究研究这段简单的代码,也许有帮助~~
      

  3.   

    Private WithEvents Timer1 As Timer
    Private Ball(1 To 2) As Shape
    Private dx(1 To 2) As LongPrivate Sub Form_Load()
        ScaleMode = vbPixels
        WindowState = vbMaximized
        
        Set Ball(1) = Controls.Add("VB.Shape", "Ball1")
        Ball(1).Shape = vbShapeCircle
        Ball(1).Move 0, 200, 100, 100
        Ball(1).Visible = True
        dx(1) = 1
        
        Set Ball(2) = Controls.Add("VB.Shape", "Ball2")
        Ball(2).Shape = vbShapeCircle
        Ball(2).Move 500, 200, 100, 100
        Ball(2).Visible = True
        
        Set Timer1 = Controls.Add("VB.Timer", "Timer1")
        Timer1.Interval = 10
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        If dx(1) Then
            Ball(1).Left = Ball(1).Left + dx(1)
            If Ball(2).Left - Ball(1).Left = 100 Then
                dx(2) = dx(1)
                dx(1) = 0
            End If
        Else
            Ball(2).Left = Ball(2).Left + dx(2)
        End If
    End Sub
      

  4.   

    MSDN中有个API绘制小球碰撞反弹的代码示例,你可参考,这是VB图形动画的基础。
      

  5.   

    控制位置,或者你也可以用directx
      

  6.   

    Option Explicit '变量必须先定义,才能使用
    Private Const SRCCOPY = &HCC0020
    Private Declare Function BitBlt Lib "gdi32" _
    (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
    ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
    ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongDim IsPlaying As Boolean '动画是否启动
    Dim DetaX%, DetaY% '沿X、Y轴的移动位置增量Private Sub Form_Load()
    IsPlaying = False '开始时,动画未启动
    Image1.ToolTipText = "开始" '鼠标移到书上时,将出现“开始”提示
    DetaX% = 100 '沿X轴的移动位置增量为100单位
    DetaY% = 100 '沿Y轴的移动位置增量为100单位
    End SubPrivate Sub Image1_Click() '用鼠标左键点击了书
    If IsPlaying Then '动画已启动,则停止
    IsPlaying = False
    Timer1.Enabled = IsPlaying
    Image1.ToolTipText = "开始"
    Else '动画未启动,则启动
    IsPlaying = True
    Timer1.Enabled = IsPlaying
    Image1.ToolTipText = "停止"
    End If
    End SubPrivate Sub Timer1_Timer() 'Timer事件
    '移动Image对象
    Image1.Move Image1.Left + DetaX%, Image1.Top + DetaY%'碰到边界,则校正位置,并反向
    If Image1.Left + Image1.Width >= Form1.Width Then '碰到右边界
    'Image1.Move Form1.Width - Image1.Width, Image1.Top
    DetaX% = -DetaX%
    ElseIf Image1.Top + Image1.Height >= Form1.Height Then  '碰到下边界
    'Image1.Move Image1.Left, Form1.Height - Image1.Height
    DetaY% = -DetaY%
    ElseIf Image1.Left <= 0 Then '碰到左边界
    'Image1.Move 0, Image1.Top
    DetaX% = -DetaX%
    ElseIf Image1.Top <= 0 Then '碰到上边界
    'Image1.Move Image1.Left, 0
    DetaY% = -DetaY%
    End If
    End Sub窗体上加一Timer控件,一Image。