[Webinar] Streamline your web hosting managementRegister Today

x
Solved

# reduce movement speed of moving picturebox

Posted on 2011-09-20
Medium Priority
252 Views
So I'm actually stuck at how to reduce movement speed (of my minigolf game)
To recap, I have a small picturebox and a timer set to 20ms.

So on mouseUp I have following code:
``````xVel = (e.X - gameBall.Location.X) * speed
yVel = (e.Y - gameBall.Location.Y) * speed
gameTimer.Enabled = True
``````

Now, in my timerTick I have the code to check for wall collision and this:
``````If speed > 0 Then
speed -= 0.01
Else
gameTimer.Enabled = False
End If
``````

Now that I think about it, the xVel and yVel are already multiplied by the speed (usually around 0,07). This might seem like a simple answer to you, but my brains wont function anymore :D
0
Question by:Mutsop
• 2

LVL 8

Expert Comment

ID: 36567385
I believe you want to reduce movement speed so that each gets 0 at the end.
That means you first need to calculate the distance that your picture box will travel.
I think the speed change should NOT be linear, but a some function speed=f(distance). And perhaps the function should be logarithmic, since it gives the best view of reducing speed, IMO.
Something like ln(D-d), where D is the total distance, and d is the current distance traveled.
0

LVL 3

Author Comment

ID: 36567452
How to get your total distance if you just have the speed?
Speed is actually calculated like so

``````Private Sub strengthTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles strengthTimer.Tick
If strengthBar.Value = 100 Then
strengthBar.Value = 0
End If
strengthBar.PerformStep()
End Sub

Private Sub Main_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
strengthTimer.Enabled = False
'Speed value
speed = strengthBar.Value / 500
If e.Button = Windows.Forms.MouseButtons.Left Then
ControlPaint.DrawReversibleLine(ptStart, ptEnd, Color.Black)
Cursor.Clip = Nothing
xVel = (e.X - gameBall.Location.X) * speed
yVel = (e.Y - gameBall.Location.Y) * speed
gameTimer.Enabled = True
End If
End Sub
``````

The strengthTimer_Tick is activated upon pressing down the left mouse button.
0

LVL 8

Accepted Solution

gena17 earned 2000 total points
ID: 36580301
The total distance should be calculated in advance at the moment when user clicks on Desired Location.
The total distance is the distance between Desired Location and Current Location. It is calculated only once and has nothing to do with speed.

Speed is calculated dynamically on every tick of the timer, based on Total Distance and Current Distance.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
The PowerShell Core 6.0 of .NET release is just the beginning. The upcoming PowerShell Core 6.1 would have artificial intelligence and internet of things capabilities. So many things to look forward to in the upcoming release.
How to fix display issue, screen flickering issue when I plug in power cord to the machine. Before I start explaining the solution lets check out once the issue how it looks like after I connect the power cord. most of you also have faced thisâ€¦
The video will let you know the exact process to import OST/PST files to the cloud based Office 365 mailboxes. Using Kernel Import PST to Office 365 tool, one can quickly import numerous OST/PST files to Office 365. Besides this, the tool also comesâ€¦
###### Suggested Courses
Course of the Month7 days, 14 hours left to enroll