Post

 Resources 

Console

Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 VBGamer
 VBGamer
 Phisics Difficulties

Note: You must be registered in order to post a reply.

Screensize:
UserName:
Password:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkInsert EmailInsert Image Insert CodeInsert QuoteInsert List Spell Checker
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

   Insert an File
Check here to include your profile signature.
Check here to subscribe to this topic.
    

T O P I C    R E V I E W
cbx Posted - Jul 12 2003 : 10:25:29 AM
Can anyone assist me in pointing out why this source code does not work? The full source code is availible if requested.

I am trying to create a few simple phisics interfaces/objects. But I can't quite seem to get it to work. I think it might be the timer that causing it to not function?

I have reviewed a number of docs on luckys vb , and gamedev sites but they only serve to annoy me. All I want is a very short phisics example of a ball being propelled into the air and falling back down aka gravity.

None of these web site have that, there too busy copy and pasting off of each other and bla bla bla-ing on and on. I can't focus when people just shove numbers infront of me and expect me to get it. I learn best by watching then doing. or in this case stepping through a simple source example.

I have downloaded the vb6 phisics demo from this site Phisics.zip
http://www.vbgamer.com/files/ by andy owen but I don't like that it is not based on actual phisics. IE: F = ma etc. etc. I could convert it to vb.net but like i said i don't like that it uses "Verlet Integration" as opposed to "Euler Integration" whatever the hell that means!

I don't what to know what the names for all this stuff is I just want to know how to do it. I don't know the proper names for alot of the stuff I program against but yet I can still do it!

Am I even on the right track or is my code critically flawed? Any help is appreciated.

  
'Created by: X
'E-Mail: mailto:createdbyx@yahoo.com
'Web: http://www.createdbyx.com/
'Date: March 30, 2003
'=============================================
<ComClass(GameTimer.ClassId, GameTimer.InterfaceId, GameTimer.EventsId)> _  
Public Class GameTimer  
    Private mlngLastCapturedTime As Long
  
#Region "COM GUIDs"  
    ' These  GUIDs provide the COM identity for this class  
    ' and its COM interfaces. If you change them, existing  
    ' clients will no longer be able to access the class.  
    Public Const ClassId As String = "FA355364-E0B2-45F0-B12D-2CF6B00C09A4"  
    Public Const InterfaceId As String = "83E1ACD8-31D8-4AB7-B3A9-8929F711241E"  
    Public Const EventsId As String = "A269A864-CB3E-4226-A642-E4F452316F78"  
#End Region  
  
    Public Overridable Function GetCurrentTime() As Long
        Return Now.Ticks  
    End Function
  
    Public Overridable ReadOnly Property LastCapturedTime() As Long
        Get
            Return mlngLastCapturedTime  
        End Get
    End Property
  
    Public Overridable Sub CaptureTime()  
        mlngLastCapturedTime = Now.Ticks  
    End Sub
  
    Public Function MilliToTicks(ByVal Milliseconds As Long) As Long
        Return Milliseconds * 10000  
    End Function
  
    Public Function TicksToMilli(ByVal Ticks As Long) As Long
        Return Ticks \ 10000  
    End Function
  
    Public Sub New()  
        MyBase.new()  
        mlngLastCapturedTime = Now.Ticks  
    End Sub
End Class  
  
Public Interface IPhisics  
    Property Mass() As Single
    Property Velocity() As PointF  
End Interface  
  
Public Class WorldObject  
    Private mobjPosition As PointF  
  
    Public Property Position() As PointF  
        Get
            Return mobjPosition  
        End Get
        Set(Byval Value As PointF)  
            mobjPosition = Value  
        End Set
    End Property
End Class  
  
Public Class CircleObject  
    Inherits WorldObject  
    Implements IPhisics  
  
    Private msngMass As Single
    Private mobjVelocity As PointF  
    Private msngRadius As Single
  
    Public Property Mass() As Single Implements Phisics_1.IPhisics.Mass  
        Get
            Return msngMass  
        End Get
        Set(ByVal Value As Single)  
            msngMass = Value  
        End Set
    End Property
  
    Public Property Velocity() As System.Drawing.PointF Implements Phisics_1.IPhisics.Velocity  
        Get
            Return mobjVelocity  
        End Get
        Set(ByVal Value As System.Drawing.PointF)  
            mobjVelocity = Value  
        End Set
    End Property
  
    Public Property Raduis() As Single
        Get
            Return msngRadius  
        End Get
        Set(Byval Value As Single)  
            msngRadius = Value  
        End Set
    End Property
End Class  
  
Public Class RectangleObject  
    Inherits WorldObject  
    Implements IPhisics  
  
    Private msngMass As Single
    Private mobjVelocity As PointF  
    Private mobjSize As SizeF  
  
    Public Property Mass() As Single Implements Phisics_1.IPhisics.Mass  
        Get
            Return msngMass  
        End Get
        Set(ByVal Value As Single)  
            msngMass = Value  
        End Set
    End Property
  
    Public Property Velocity() As System.Drawing.PointF Implements Phisics_1.IPhisics.Velocity  
        Get
            Return mobjVelocity  
        End Get
        Set(ByVal Value As System.Drawing.PointF)  
            mobjVelocity = Value  
        End Set
    End Property
  
    Public Property Size() As SizeF  
        Get
            Return mobjSize  
        End Get
        Set(Byval Value As SizeF)  
            mobjSize = Value  
        End Set
    End Property
End Class  
  
Public Class Form1  
    Inherits System.Windows.Forms.Form  
  
    Private mobjBox As RectangleObject  
    Private mobjBall As CircleObject  
    Private mobjGravity As PointF = New PointF(0, 0.5)  
    Private mobjTimer As GameToolsR2.GameTimer  
  
  
#Region " Windows Form Designer generated code "  
  
    Public Sub New()  
        MyBase.New()  
  
        'This call is required by the Windows Form Designer.  
        InitializeComponent()  
  
        'Add any initialization after the InitializeComponent() call  
  
    End Sub
  
    'Form overrides dispose to clean up the component list.  
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)  
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()  
            End If
        End If
        MyBase.Dispose(disposing)  
    End Sub
  
    'Required by the Windows Form Designer  
    Private components As System.ComponentModel.IContainer  
  
    Friend WithEvents Timer1 As System.Windows.Forms.Timer  
    'NOTE: The following procedure is required by the Windows Form Designer  
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.  
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  
        Me.components = New System.ComponentModel.Container()  
        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)  
        '  
        'Timer1  
        '  
        '  
        'Form1  
        '  
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)  
        Me.BackColor = System.Drawing.Color.White  
        Me.ClientSize = New System.Drawing.Size(544, 454)  
        Me.ForeColor = System.Drawing.Color.Black  
        Me.Name = "Form1"  
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen  
        Me.Text = "Form1"  
  
    End Sub
  
#End Region  
  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
        'Me.SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserMouse Or ControlStyles.AllPaintingInWmPaint, True)  
  
        mobjBall = New CircleObject()  
        mobjBox = New RectangleObject()  
        mobjTimer = New GameToolsR2.GameTimer()  
        DoReset()  
        Me.Refresh()  
    End Sub
  
    Private Sub DoReset()  
        With mobjBall  
            .Mass = 0.1  
            .Position = New PointF(CSng(Me.Size.Width) / 2, 150)  
            .Raduis = 50  
            .Velocity = New PointF(0, 0.1)  
        End With
  
        With mobjBox  
            .Mass = 0  
            .Position = New PointF(CSng(Me.Size.Width) / 2, 50)  
            .Size = New SizeF(100, 25)  
            .Velocity = New PointF(0, 0)  
        End With
    End Sub
  
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove  
        Static last As Point  
  
        Me.Text = "X: " & (last.X - e.X).ToString & " - " & "Y: " & (last.Y - e.Y).ToString  
        last.X = e.X  
        last.Y = e.Y  
        mobjBox.Velocity = New PointF(last.X - e.X, last.Y - e.Y)  
        mobjBox.Position = New PointF(e.X, e.Y)  
        DrawItems()  
    End Sub
  
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick  
        'Dim TimeStep As Long  
        Dim objPos As PointF  
        Dim TimeStamp As Single
        Dim LastTimeStamp As Single
        Dim TimeStep As Single
        Dim Force As PointF  
  
  
        mobjTimer.CaptureTime()  
        '  mobjBall.Velocity = New PointF(0, -1)  
        While Timer1.Enabled And Me.Created  
  
            'Work out how long it has been since the last  
            'frame  
            'TimeStep = mobjTimer.TicksToMilli(mobjTimer.GetCurrentTime - mobjTimer.LastCapturedTime)  
            TimeStep = (mobjTimer.GetCurrentTime - mobjTimer.LastCapturedTime)  
  
            'LastTimeStamp = TimeStamp  
            'TimeStamp = Microsoft.VisualBasic.Timer  
            'TimeStep = (TimeStamp - LastTimeStamp) * 20  
  
  
  
            '  update ball  
            With mobjBall  
  
                '.Velocity = mobjBox.Velocity  
                '.Velocity = New PointF()  
  
                Force.X = .Mass * mobjGravity.X  
                Force.Y = .Mass * mobjGravity.Y  
                ' objPos = New PointF(.Velocity.X * TimeStep, _  
                '  .Velocity.Y * TimeStep)
  
  
                objPos = New PointF(.Velocity.X + ((Force.X / .Mass) * TimeStep), _  
                                    .Velocity.Y + ((Force.Y / .Mass) * TimeStep))  
                .Velocity = objPos  
  
                ' update position  
                .Position = New PointF(.Position.X + (.Velocity.X * TimeStep), .Position.Y + (.Velocity.Y * TimeStep))  
  
                ' keep in bounds  
                KeepObjsInBounds()  
  
            End With
  
  
            DrawItems()  
            Application.DoEvents()  
            mobjTimer.CaptureTime()  
  
        End While
    End Sub
  
    Private Sub KeepObjsInBounds()  
        Dim objPos As PointF  
  
  
        With mobjBall  
            objPos = .Position  
  
            If objPos.X < .Raduis Then
                objPos.X = .Raduis  
                mobjBall.Velocity = New PointF(0, mobjBall.Velocity.Y)  
            End If
            If objPos.X > Me.ClientSize.Width - .Raduis Then
                objPos.X = Me.ClientSize.Width - .Raduis  
                mobjBall.Velocity = New PointF(0, mobjBall.Velocity.Y)  
            End If
  
            If objPos.Y < .Raduis Then
                objPos.Y = .Raduis  
                mobjBall.Velocity = New PointF(mobjBall.Velocity.X, 0)  
            End If
            If objPos.Y > Me.ClientSize.Height - .Raduis Then
                objPos.Y = Me.ClientSize.Height - .Raduis  
                mobjBall.Velocity = New PointF(mobjBall.Velocity.X, 0)  
            End If
  
            .Position = objPos  
        End With
  
    End Sub
  
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown  
        Select Case e.KeyCode  
            Case Keys.R  
                Timer1.Stop()  
                DoReset()  
  
            Case Keys.Space  
                If Timer1.Enabled Then Timer1.Stop() Else Timer1.Start()  
  
            Case Keys.Escape  
                Me.Close()  
        End Select
    End Sub
  
    Private Sub DrawItems()  
        If Not Me.Visible Then Exit Sub
  
        ' draw items  
        With Me.CreateGraphics  
            .Clear(Me.BackColor)  
  
            ' draw cuircles  
            .DrawEllipse(New Pen(Color.Black), New RectangleF(mobjBall.Position.X - mobjBall.Raduis, _  
                                                                                          mobjBall.Position.Y - mobjBall.Raduis, _  
                                                                                          mobjBall.Raduis * 2, _  
                                                                                          mobjBall.Raduis * 2))  
  
  
            ' draw rects  
            .DrawRectangle(New Pen(Color.Blue), New Rectangle(mobjBox.Position.X - mobjBox.Size.Width / 2, _  
                                                                              mobjBox.Position.Y - mobjBox.Size.Height / 2, _  
                                                                              mobjBox.Size.Width, _  
                                                                              mobjBox.Size.Height))  
        End With
  
    End Sub
  
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint  
        If Timer1.Enabled Then Exit Sub
        DrawItems()  
    End Sub
  
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize  
        DrawItems()  
    End Sub
End Class  
  
  

1   L A T E S T    R E P L I E S    (Newest First)
cbx Posted - Jul 13 2003 : 4:49:18 PM
Nevermind I got it to work. ... at least for now.

VBGamer © Go To Top Of Page
This page was generated in 1.05 seconds. Snitz Forums 2000

Copyright © 2002 - 2004 Eric Coleman, Peter Kuchnio , et. al.