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... |