Mouse Help Needed
#11
I just added your Delay .25 for the Fire! button. Thanks for all your help B+. I couldn't have made this without you.

Here is the fixed code: 

Code: (Select All)
'I've always wanted to make this game ever since I started programming in the 80's.
'This was created by Ken G. with much help from others below.
'Thank you to B+ for much of the math code and Mouse and slider help.
'It takes the computer a little time to learn how to hit your base.
'Created on June 26, 2019.
'Version 2 made on May 1, 2022.
'Added: Levels, random colored mountains, and better looking cannons.

_Title "Ken's Artillery 2"
_Limit 200
Cls
Screen _NewImage(1200, 700, 32)
Print "                                              Ken's Artillery 2"
Print: Print: Print
Print "                                        By SierraKen with help from B+."
Print: Print: Print
Print "                        Instructions: Red Slider   = Power"
Print "                                      Green Silder = Angle"
Print "                                      Fire! Button = Fire Cannonball"
Print
Print "                                      Hit enemy 5 times you advance to next level."
Print "                                      Get hit 5 times in a level and you lose."
Print: Print: Print
Print "                                          Press Any Key To Begin."
Sleep
Cls
level = 1

start:
c = 0
mountain = 0
win = 0
compoints = 0
points = 0
ground = 590 'up is negative in direction

'Your Cannon

cbx = 10 '              cannon butt end x, y
cby = ground - 20
cmx = 50 '              cannon mouth end
cmy = ground - 70

'Computer's Cannon

cbx2 = 1190
cby2 = cby
cmx2 = 1150
cmy2 = cmy


g = .15 '       with air resistance
Randomize Timer
air = Int(Rnd * 20)
air2 = air / 1000
Randomize Timer
air3 = Int(Rnd * 100)
If air3 > 50 Then air2 = -air2
airX = air2
Color , _RGB32(156, 210, 237)
Cls
'Bases
Line (cbx, ground)-(cbx + 100, ground - 20), _RGB32(4, 4, 4), BF
Line (cbx2, ground)-(cbx2 - 100, ground - 20), _RGB32(4, 4, 4), BF
'Mountain
Randomize Timer
sz = Int(Rnd * 300) + 100
circx = 595
cl1 = Int(Rnd * 55) + 50
cl2 = Int(Rnd * 55) + 50
cl3 = Int(Rnd * 55) + 50
Line (0, ground)-(1200, 700), _RGB32(cl1, cl2, cl3), BF 'ground
Circle (circx, ground), sz, _RGB32(cl1, cl2, cl3)
Paint (circx, ground - 2), _RGB32(cl1, cl2, cl3)
again:
Color _RGB(0, 0, 0)
Locate 10, 136: Print "              "
Locate 10, 2: Print "Your Turn     "
Randomize Timer
air = Int(Rnd * 20)
air2 = air / 1000
Randomize Timer
air3 = Int(Rnd * 100)
If air3 > 50 Then air2 = -air2
airX = air2
airx2 = airX * 1000
If airx2 < -1 Then winddir$ = "West"
If airx2 > 1 Then winddir$ = "East"
If airx2 > -1 And airx2 < 1 Then winddir$ = "Sunny"
If airx2 < 0 Then airx2 = airx2 * -1

GoSub Wind:
_PrintString (5, 50), "Power"
_PrintString (5, 80), "Angle"
Line (60, 40)-(260, 70), _RGB32(255, 255, 255), B
Line (60, 70)-(260, 100), _RGB32(255, 255, 255), B
Line (60, 100)-(120, 130), _RGB32(255, 0, 5), BF
Color _RGB32(0, 0, 0), _RGB32(255, 0, 5)
_PrintString (70, 110), "Fire!"
vel = 40
vel3 = 100
a = 45
a3 = 100
Line (61, 41)-(vel3, 69), _RGB32(255, 0, 1), BF
Line (61, 71)-(a3, 99), _RGB32(0, 255, 1), BF

go:
_Display ' update screen !!! sure like to know if my turn or not after computer
fired = 0
While _MouseInput: Wend
mx = _MouseX: my = _MouseY: mb = _MouseButton(1) ' this update the mouse x, y and button status save to variable because they change
If mb Then
    If mx >= 60 And my <= 260 Then
        If my >= 40 And my < 70 Then
            vel = (mx - 60) / 200 * 100 ' converts place in box to 0 to 100
            If mx > 259 Then mx = 259: vel = 100
            Line (61, 41)-(259, 69), _RGB32(156, 210, 237), BF
            Line (61, 41)-(mx, 69), _RGB32(255, 0, 1), BF
            Color _RGB32(0, 0, 0), _RGB32(255, 0, 0)
            _PrintString (265, 50), Str$(vel)
            _Delay .25 'wait for release of mouse button
            GoTo go
        ElseIf my >= 70 And my < 100 Then
            a = (mx - 60) / 200 * 90 ' converts place in box to 0 to 90
            If mx > 259 Then mx = 259: a = 90
            Line (61, 71)-(259, 99), _RGB32(156, 210, 237), BF
            Line (61, 71)-(mx, 99), _RGB32(0, 255, 1), BF
            Color _RGB32(0, 0, 0), _RGB32(0, 255, 0)
            _PrintString (265, 80), Str$(a)
            _Delay .25 'wait for release of mouse button
            GoTo go
        ElseIf my >= 100 And my < 130 Then
            fired = 1
            _Delay .25
            GoTo going
        End If
    End If
End If
If fired = 0 Then GoTo go '  need?

going:
Color _RGB32(0, 0, 0), _RGB32(156, 210, 237)
If a > 90 Then a = 90
If a < 0 Then a = 0
If vel < 0 Then vel = 0
If vel > 80 Then vel = 80
vel = Int(vel / 4)
a = 360 - a
ca = _D2R(a)
cmx = cbx + (100 * Cos(_D2R(a)))
cmy = cby + (100 * Sin(_D2R(a)))

'initialize
bx = cmx 'ball x, y same as cannon mouth at start of shot
by = cmy


dx = vel * Cos(ca) 'start at cannon mouth
dy = vel * Sin(ca)

'shot

Do
    _Limit 200
    GoSub Wind:

    a$ = InKey$
    If a$ = Chr$(27) Then End
    Circle (bx, by), 5, _RGB32(0, 0, 0)
    Paint (bx, by), _RGB32(0, 0, 0), _RGB32(0, 0, 0)
    For ccc = 0 To 7 Step .1
        Line (cbx, cby)-(cmx + ccc, cmy), _RGB32(150, 50, 0) 'cannon line
    Next ccc
    oldbx = bx: oldby = by
    dx = dx + airX
    dy = dy + g
    bx = bx + dx
    by = by + dy
    _Display
    _Limit 30
    Circle (oldbx, oldby), 5, _RGB(156, 210, 237)
    Paint (oldbx, oldby), _RGB(156, 210, 237)
    If Point(bx, by) = _RGB32(cl1, cl2, cl3) Then
        mountain = 1
        For explosion = 0 To 20 Step .5
            Circle (bx, by), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
    End If
    If bx > cbx2 - 120 And bx < cbx2 + 20 And by >= ground - 2 Then
        points = points + 1
        win = 0
        Locate 3, 64: Print "You: "; points; " Computer: "; compoints
        For explosion = 0 To 20 Step .5
            Circle (bx, by), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
        For sndd = 500 To 700 Step 50
            Sound sndd, 1
        Next sndd
        mountain = 1
        If points = 5 And win = 0 Then win = 1: level = level + 1: GoTo start:
    End If
Loop Until mountain = 1 Or by > 700
For ccc = 0 To 7 Step .1
    Line (cbx, cby)-(cmx + ccc, cmy), _RGB32(156, 210, 237) 'delete cannon line
Next ccc
mountain = 0
'The Computer's Turn

comp:

Color _RGB(0, 0, 0)
Locate 10, 2: Print "                      "
Locate 10, 137: Print "Computer Turn"
GoSub Wind:

'Computer learns as it goes but is not perfect, like a human.  ;-)
If c = 0 Then GoTo compstuff:
oldvel2 = vel2

compstuff:
Randomize Timer
vel2 = Int(Rnd * 35) + 30

a2 = a

vel2 = Int(vel2 / 4)

If c = 0 Then GoTo nex:
'Last shot was too far away.
If oldbx2 < cbx Then
    vel2 = oldvel2 - 1
    If vel2 < 8 Then vel2 = 8
End If
'Last shot wasn't far enough.
If oldbx2 > cbx Then
    vel2 = oldvel2 + 1
    If vel2 > 15 Then vel2 = 15
End If
nex:
c = 1
ca2 = _D2R(a2)
cmx2 = cbx2 - (100 * Cos(_D2R(a2)))
cmy2 = cby2 + (100 * Sin(_D2R(a2)))

'initialize
bx2 = cmx2 'ball x, y same as cannon mouth at start of shot
by2 = cmy2
dx2 = vel2 * Cos(ca2) 'start at cannon mouth
dy2 = vel2 * Sin(ca2)

'shot

Do
    _Limit 200
    a$ = InKey$
    If a$ = Chr$(27) Then End
    Circle (bx2, by2), 5, _RGB32(0, 0, 0)
    Paint (bx2, by2), _RGB32(0, 0, 0), _RGB32(0, 0, 0)
    For ccc = 0 To 7 Step .1
        Line (cbx2, cby2)-(cmx2 - ccc, cmy2), _RGB32(150, 50, 0) 'cannon line
    Next ccc
    oldbx2 = bx2: oldby2 = by2
    dx2 = dx2 + airX
    dy2 = dy2 + g
    bx2 = bx2 - dx2
    by2 = by2 + dy2
    _Display
    _Limit 30
    Circle (oldbx2, oldby2), 5, _RGB(156, 210, 237)
    Paint (oldbx2, oldby2), _RGB(156, 210, 237)
    If Point(bx2, by2) = _RGB32(cl1, cl2, cl3) Then
        mountain = 1
        For explosion = 0 To 20 Step .5
            Circle (bx2, by2), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
    End If
    If bx2 > cbx - 20 And bx2 < cbx + 120 And by2 >= ground - 2 Then
        compoints = compoints + 1
        Locate 3, 64: Print "You: "; points; " Computer: "; compoints
        For explosion = 0 To 20 Step .5
            Circle (bx2, by2), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
        For sndd = 500 To 700 Step 50
            Sound sndd, 1
        Next sndd
        mountain = 1
        If compoints = 5 Then Color _RGB(0, 0, 0): Locate 20, 65: Print "COMPUTER WINS!": GoTo asking:
    End If
Loop Until mountain = 1 Or by2 > 700

For ccc = 0 To 7 Step .1
    Line (cbx2, cby2)-(cmx2 - ccc, cmy2), _RGB32(156, 210, 237) 'delete cannon line
Next ccc
mountain = 0
GoTo again:

'This code is used in a few different places in the program.
Wind:
Color _RGB(0, 0, 0)
Locate 1, 73: Print "Wind"
If winddir$ = "West" Then
    Locate 2, 82: Print "                               "
    Locate 2, 59: Print airx2; " mph   "
End If
If winddir$ = "East" Then
    Locate 2, 59: Print "               "
    Locate 2, 82: Print airx2; " mph   "
End If
Locate 2, 68: Print "West <-> East"
Locate 3, 64: Print "You: "; points; " Computer: "; compoints
Locate 4, 71: Print "Level: "; level
Return

asking:
Locate 22, 65: Input "Again? (Yes/No):", ag$
If ag$ = "y" Or ag$ = "Y" Or ag$ = "yes" Or ag$ = "Yes" Or ag$ = "YES" Or ag$ = "yES" Or ag$ = "yeS" Then points = 0: level = 1: GoTo start:
End
Reply
#12
When computer shoots off screen x < 0 it never becomes the players turn?
b = b + ...
Reply
#13
(05-02-2022, 04:32 AM)bplus Wrote: When computer shoots off screen x < 0 it never becomes the players turn?

Yes it does. It was just that one time tonight when we were making the sliders when I accidentally used the wrong variable. That variable was already used is why. Try the newest code now.
Reply
#14
Line 312 Loop Until mountain = 1 Or by2 > 700 Or bx2 < 0 ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
b = b + ...
Reply
#15
B+, please use the newest code, here it is again. That problem with the fast cannon from the computer is fixed. So far the game looks good. Thanks for your help. Smile I'll post it on the other thread soon. 

Code: (Select All)
'I've always wanted to make this game ever since I started programming in the 80's.
'This was created by Ken G. with much help from others below.
'Thank you to B+ for much of the math code and Mouse and slider help.
'It takes the computer a little time to learn how to hit your base.
'Created on June 26, 2019.
'Version 2 made on May 1, 2022.
'Added: Levels, random colored mountains, and better looking cannons.

_Title "Ken's Artillery 2"
_Limit 200
Cls
Screen _NewImage(1200, 700, 32)
Print "                                              Ken's Artillery 2"
Print: Print: Print
Print "                                        By SierraKen with help from B+."
Print: Print: Print
Print "                        Instructions: Red Slider   = Power"
Print "                                      Green Silder = Angle"
Print "                                      Fire! Button = Fire Cannonball"
Print
Print "                                      Hit enemy 5 times you advance to next level."
Print "                                      Get hit 5 times in a level and you lose."
Print: Print: Print
Print "                                          Press Any Key To Begin."
Sleep
Cls
level = 1

start:
c = 0
mountain = 0
win = 0
compoints = 0
points = 0
ground = 590 'up is negative in direction

'Your Cannon

cbx = 10 '              cannon butt end x, y
cby = ground - 20
cmx = 50 '              cannon mouth end
cmy = ground - 70

'Computer's Cannon

cbx2 = 1190
cby2 = cby
cmx2 = 1150
cmy2 = cmy


g = .15 '       with air resistance
Randomize Timer
air = Int(Rnd * 20)
air2 = air / 1000
Randomize Timer
air3 = Int(Rnd * 100)
If air3 > 50 Then air2 = -air2
airX = air2
Color , _RGB32(156, 210, 237)
Cls
'Bases
Line (cbx, ground)-(cbx + 100, ground - 20), _RGB32(4, 4, 4), BF
Line (cbx2, ground)-(cbx2 - 100, ground - 20), _RGB32(4, 4, 4), BF
'Mountain
Randomize Timer
sz = Int(Rnd * 300) + 100
circx = 595
cl1 = Int(Rnd * 55) + 50
cl2 = Int(Rnd * 55) + 50
cl3 = Int(Rnd * 55) + 50
Line (0, ground)-(1200, 700), _RGB32(cl1, cl2, cl3), BF 'ground
Circle (circx, ground), sz, _RGB32(cl1, cl2, cl3)
Paint (circx, ground - 2), _RGB32(cl1, cl2, cl3)
again:
Color _RGB(0, 0, 0)
Locate 10, 136: Print "              "
Locate 10, 2: Print "Your Turn     "
Randomize Timer
air = Int(Rnd * 20)
air2 = air / 1000
Randomize Timer
air3 = Int(Rnd * 100)
If air3 > 50 Then air2 = -air2
airX = air2
airx2 = airX * 1000
If airx2 < -1 Then winddir$ = "West"
If airx2 > 1 Then winddir$ = "East"
If airx2 > -1 And airx2 < 1 Then winddir$ = "Sunny"
If airx2 < 0 Then airx2 = airx2 * -1

GoSub Wind:
_PrintString (5, 50), "Power"
_PrintString (5, 80), "Angle"
Line (60, 40)-(260, 70), _RGB32(255, 255, 255), B
Line (60, 70)-(260, 100), _RGB32(255, 255, 255), B
Line (60, 100)-(120, 130), _RGB32(255, 0, 5), BF
Color _RGB32(0, 0, 0), _RGB32(255, 0, 5)
_PrintString (70, 110), "Fire!"
vel = 40
vel3 = 100
a = 45
a3 = 100
Line (61, 41)-(vel3, 69), _RGB32(255, 0, 1), BF
Line (61, 71)-(a3, 99), _RGB32(0, 255, 1), BF

go:
_Display ' update screen !!! sure like to know if my turn or not after computer
fired = 0
While _MouseInput: Wend
mx = _MouseX: my = _MouseY: mb = _MouseButton(1) ' this update the mouse x, y and button status save to variable because they change
If mb Then
    If mx >= 60 And my <= 260 Then
        If my >= 40 And my < 70 Then
            vel = (mx - 60) / 200 * 100 ' converts place in box to 0 to 100
            If mx > 259 Then mx = 259: vel = 100
            Line (61, 41)-(259, 69), _RGB32(156, 210, 237), BF
            Line (61, 41)-(mx, 69), _RGB32(255, 0, 1), BF
            Color _RGB32(0, 0, 0), _RGB32(255, 0, 0)
            _PrintString (265, 50), Str$(vel)
            _Delay .25 'wait for release of mouse button
            GoTo go
        ElseIf my >= 70 And my < 100 Then
            a = (mx - 60) / 200 * 90 ' converts place in box to 0 to 90
            If mx > 259 Then mx = 259: a = 90
            Line (61, 71)-(259, 99), _RGB32(156, 210, 237), BF
            Line (61, 71)-(mx, 99), _RGB32(0, 255, 1), BF
            Color _RGB32(0, 0, 0), _RGB32(0, 255, 0)
            _PrintString (265, 80), Str$(a)
            _Delay .25 'wait for release of mouse button
            GoTo go
        ElseIf my >= 100 And my < 130 Then
            fired = 1
            _Delay .25
            GoTo going
        End If
    End If
End If
If fired = 0 Then GoTo go '  need?

going:
Color _RGB32(0, 0, 0), _RGB32(156, 210, 237)
If a > 90 Then a = 90
If a < 0 Then a = 0
If vel < 0 Then vel = 0
If vel > 80 Then vel = 80
vel = Int(vel / 4)
a = 360 - a
ca = _D2R(a)
cmx = cbx + (100 * Cos(_D2R(a)))
cmy = cby + (100 * Sin(_D2R(a)))

'initialize
bx = cmx 'ball x, y same as cannon mouth at start of shot
by = cmy


dx = vel * Cos(ca) 'start at cannon mouth
dy = vel * Sin(ca)

'shot

Do
    _Limit 200
    GoSub Wind:

    a$ = InKey$
    If a$ = Chr$(27) Then End
    Circle (bx, by), 5, _RGB32(0, 0, 0)
    Paint (bx, by), _RGB32(0, 0, 0), _RGB32(0, 0, 0)
    For ccc = 0 To 7 Step .1
        Line (cbx, cby)-(cmx + ccc, cmy), _RGB32(150, 50, 0) 'cannon line
    Next ccc
    oldbx = bx: oldby = by
    dx = dx + airX
    dy = dy + g
    bx = bx + dx
    by = by + dy
    _Display
    _Limit 30
    Circle (oldbx, oldby), 5, _RGB(156, 210, 237)
    Paint (oldbx, oldby), _RGB(156, 210, 237)
    If Point(bx, by) = _RGB32(cl1, cl2, cl3) Then
        mountain = 1
        For explosion = 0 To 20 Step .5
            Circle (bx, by), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
    End If
    If bx > cbx2 - 120 And bx < cbx2 + 20 And by >= ground - 2 Then
        points = points + 1
        win = 0
        Locate 3, 64: Print "You: "; points; " Computer: "; compoints
        For explosion = 0 To 20 Step .5
            Circle (bx, by), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
        For sndd = 500 To 700 Step 50
            Sound sndd, 1
        Next sndd
        mountain = 1
        If points = 5 And win = 0 Then win = 1: level = level + 1: GoTo start:
    End If
Loop Until mountain = 1 Or by > 700
For ccc = 0 To 7 Step .1
    Line (cbx, cby)-(cmx + ccc, cmy), _RGB32(156, 210, 237) 'delete cannon line
Next ccc
mountain = 0
'The Computer's Turn

comp:

Color _RGB(0, 0, 0)
Locate 10, 2: Print "                      "
Locate 10, 137: Print "Computer Turn"
GoSub Wind:

'Computer learns as it goes but is not perfect, like a human.  ;-)
If c = 0 Then GoTo compstuff:
oldvel2 = vel2

compstuff:
Randomize Timer
vel2 = Int(Rnd * 35) + 30

a2 = a

vel2 = Int(vel2 / 4)

If c = 0 Then GoTo nex:
'Last shot was too far away.
If oldbx2 < cbx Then
    vel2 = oldvel2 - 1
    If vel2 < 8 Then vel2 = 8
End If
'Last shot wasn't far enough.
If oldbx2 > cbx Then
    vel2 = oldvel2 + 1
    If vel2 > 15 Then vel2 = 15
End If
nex:
c = 1
ca2 = _D2R(a2)
cmx2 = cbx2 - (100 * Cos(_D2R(a2)))
cmy2 = cby2 + (100 * Sin(_D2R(a2)))

'initialize
bx2 = cmx2 'ball x, y same as cannon mouth at start of shot
by2 = cmy2
dx2 = vel2 * Cos(ca2) 'start at cannon mouth
dy2 = vel2 * Sin(ca2)

'shot

Do
    _Limit 200
    a$ = InKey$
    If a$ = Chr$(27) Then End
    Circle (bx2, by2), 5, _RGB32(0, 0, 0)
    Paint (bx2, by2), _RGB32(0, 0, 0), _RGB32(0, 0, 0)
    For ccc = 0 To 7 Step .1
        Line (cbx2, cby2)-(cmx2 - ccc, cmy2), _RGB32(150, 50, 0) 'cannon line
    Next ccc
    oldbx2 = bx2: oldby2 = by2
    dx2 = dx2 + airX
    dy2 = dy2 + g
    bx2 = bx2 - dx2
    by2 = by2 + dy2
    _Display
    _Limit 30
    Circle (oldbx2, oldby2), 5, _RGB(156, 210, 237)
    Paint (oldbx2, oldby2), _RGB(156, 210, 237)
    If Point(bx2, by2) = _RGB32(cl1, cl2, cl3) Then
        mountain = 1
        For explosion = 0 To 20 Step .5
            Circle (bx2, by2), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
    End If
    If bx2 > cbx - 20 And bx2 < cbx + 120 And by2 >= ground - 2 Then
        compoints = compoints + 1
        Locate 3, 64: Print "You: "; points; " Computer: "; compoints
        For explosion = 0 To 20 Step .5
            Circle (bx2, by2), explosion, _RGB32(156, 210, 237)
            Sound 100 + explosion, .25
        Next explosion
        For sndd = 500 To 700 Step 50
            Sound sndd, 1
        Next sndd
        mountain = 1
        If compoints = 5 Then Color _RGB(0, 0, 0): Locate 20, 65: Print "COMPUTER WINS!": GoTo asking:
    End If
Loop Until mountain = 1 Or by2 > 700

For ccc = 0 To 7 Step .1
    Line (cbx2, cby2)-(cmx2 - ccc, cmy2), _RGB32(156, 210, 237) 'delete cannon line
Next ccc
mountain = 0
GoTo again:

'This code is used in a few different places in the program.
Wind:
Color _RGB(0, 0, 0)
Locate 1, 73: Print "Wind"
If winddir$ = "West" Then
    Locate 2, 82: Print "                               "
    Locate 2, 59: Print airx2; " mph   "
End If
If winddir$ = "East" Then
    Locate 2, 59: Print "               "
    Locate 2, 82: Print airx2; " mph   "
End If
Locate 2, 68: Print "West <-> East"
Locate 3, 64: Print "You: "; points; " Computer: "; compoints
Locate 4, 71: Print "Level: "; level
Return

asking:
Locate 22, 65: Input "Again? (Yes/No):", ag$
If ag$ = "y" Or ag$ = "Y" Or ag$ = "yes" Or ag$ = "Yes" Or ag$ = "YES" Or ag$ = "yES" Or ag$ = "yeS" Then points = 0: level = 1: GoTo start:
End
Reply
#16
I also realize that when it becomes your turn, nothing changes, the sliders don't move and the numbers don't change, until you change them. So you have to get used to just using the sliders when it becomes your turn. When the computer's cannonball shoots off the screen, just wait until it says "Your Turn" and then you can move the sliders. I didn't want to move the sliders back every turn so it would be easier for the player to remember what he shot last time.
Reply
#17
Fun! Is there any disadvantage in making the _Delay smaller in line 125 and below? I changed .25's to .05's and the sliders were smoother. Thanks.
Reply
#18
(05-02-2022, 04:51 PM)dcromley Wrote: Fun!  Is there any disadvantage in making the _Delay smaller in line 125 and below?  I changed .25's to .05's and the sliders were smoother.  Thanks.

The delay is there to wait for user to release the mousebutton for a finished "click" .

Mousebutton(1) just reports whether the Left mousebutton is down or not after the most recent poll of mouse ie
While _MouseInput : Wend  ' this gets update of mouse position and buttoms and is what I call polling the mouse.

You could have a loop wait until the _mousebutton(1) is false but that is complicated but more accurate!

So yes, if you are a fast clicker you don't have to _delay .25. A delay is there so your loop doesn't keep telling you the mousebutton is down and repeat your mousebutton down instructions over and over. It's like you want to get clear of the mousedown signal that you already responded to.


BTW, I could have more efficiently put the _delay .25 once, before I exit the
Code: (Select All)
If MB Then
block instead of 3 places after each response to a so called "click" really a Left Mousebutton down = true signal.


Man, trying to be thoroughly accurate while not adding to confusion is hard to word sometimes!


Also confusing, we are calling them slider bars, but I just want to click the point where I want to be on the bar.
An actually slider will work different, more complex and then it would be best to keep polling mouse until the button is released and then little or no delay would make the slider less jerky, smoother but you have to check for release of mouse... more complicated so I went with "click" mouse function, so method I offer is "click" bars not slider drag mouse type bars.


I say master the "click" before advanced drag and drop, specially for people just learning mouse.
b = b + ...
Reply
#19
(05-02-2022, 05:10 PM)bplus Wrote: You could have a loop wait until the _mousebutton(1) is false but that is complicated but more accurate!

I'm a fan of Steve's MBS routine for mouse ops, which sets a function value for specific mouse use. When I check for a mouse click in the code, I immediately clear its cue by calling the following SUB, with the button number to be cleared, then go to the mouse click processing. I haven't had any click through events since I started doing that.

Code: (Select All)
SUB Clear_MB (var AS INTEGER)
    DO UNTIL NOT _MOUSEBUTTON(var)
        WHILE _MOUSEINPUT: WEND
    LOOP
END SUB 'Clear_MB
DO: LOOP: DO: LOOP
sha_na_na_na_na_na_na_na_na_na:
Reply
#20
@OldMoses Interesting a whole separate sub! Pretty sure Ken would like to avoid Subs like the plague but for demo's sake, we might show an alternate approach to doing actual sliders?

That sub will get clear of the _MouseButton(1) down state precisely, I suppose just substitute that in where _delay .25 is being used.

Clear_MB 1 ' <<< replace _Delay .25
b = b + ...
Reply




Users browsing this thread: 8 Guest(s)