creating a knob control ?
Blitz3D Forums/Blitz3D Programming/creating a knob control ?
| ||
| I want to know if the code is good or what I am doing wrong. trying to get it to read a variable that would carry the value from the last click . in other words save the mouse y location and then update that location with a new one. just look at the code to see what i am talking about and let me know if I am in the right track. |
| ||
| I'm not sure, that I understood you, and my english is not so good, but I can see, what the problem is: You first have to calculate a relativ MouseY (Difference between first Click and following moves of the Mouse). There for you check MouseHit(), which only apears 1x each click and store the MouseY() into FirstMouseY%. The you know the difference between this first position and actual MouseY() and store it in MouseDiff%. This you can add to the last knob position Range% to paint the current knob position. When release the Mouse, you have to add this value MouseDiff% to Range%, make MouseDiff%=0 and FirstMouseY%=0 for the next event.
While Not KeyHit (1)
mx = MouseX()
my = MouseY()
mb = MouseDown(1)
If MouseHit(1) Then
FirstMouseY=My
ElseIf (mb>0) And (mx > x_range-20) And (mx < x_range+20)
MouseDiff = My - FirstMouseY
RotateEntity knob,0,0,range+MouseDiff
Else
Range=range+MouseDiff
MouseDiff=0
FirstMouseY=0
EndIf
RenderWorld
Text 100,100, " Mouse relativ: " + MouseDiff + " Old Range: " + Range + " New Range:" + (range+MouseDiff)
Delay 15
Flip 0
Wend
note 1: to save energy and not to stress the processor it is always recomended to add a Delay 15 and a Flip 0 during the testing phase. note 2: You should use names for variables that say more about the use of the variable! sw, mr, mm=r ??? does not say anything and it is difficult to help you. mx, my, mb, Range ...maybe easy to remember for your, but XMouse%, YMouse%, MouseButton% and KnobValue% helps third person to have a fast overview about the codelines. |
| ||
| HI, the code works great. Thank you. but there is another problem I can not get a value to set a range, a MIN and MAX. where it will stop rotating. Then have a value to use from the MIN and MAX like 0 to 100. |
| ||
| But thats easy... you have to check it in the code part... ...
MouseDiff = My - FirstMouseY
RotateEntity knob,0,0,range+MouseDiff
... I would suggest that 270° of max turn radius looks like a typical knob. So you have to take care that the sum of Range% and MouseDiff% does not run out of 0...270: ...
MouseDiff = My - FirstMouseY
If (MouseDiff+Range)>270 then
MouseDiff=270-Range
ElseIf (MouseDiff+Range)<0 then
MouseDiff=-Range
Endif
RotateEntity knob,0,0,range+MouseDiff
...
The "value" of the knob is ValueMin + (ValueMax-ValueMin)/270*Range For exampel, if you wish to have a knob for values between 40 and 140: ...
Endif
RotateEntity knob,0,0,range+MouseDiff
KnobValue=40 + (140-40)/270.0*Range
...
Therefore I would suggest to declare the variables as FLOAT: KnobValue#, Range#, etc... |