In this example we are pretending to measure height. Just click and drag the pointer to measure.
As you can see the code that prevents the ruler dropping off the end is a bit clunky, but it will do for now.
How to make it
Make a MovieClip of a ruler, with the scale spaced evenly along its entire length - set the registration point to be the bottom-left of the MovieClip. Then make another MovieClip for the ruler pointer - set the registration point to be the bottom-left of the MovieClip too.
Place both MovieClips onto the stage and scale them so that the fit together nicely, but also so the ruler is much much longer than the stage is high.
Give the ruler the instance name 'ruler_mc' and the pointer the instance name 'pointer_mc'.
Then insert the following code onto the first frame of the movie.
The code
The comments will give you some idea of what does what:
var damping:Number = 20;
/*the higher the number the slower the ruler will move*/
var rulerdivisions:Number = 20;
/*this helps us work out the how far the along the ruler you are*/
/*make the rule move when the pointer is dragged on*/
moveruler = function () {
if (_root.ruler_mc._y >= _root.pointer_mc._y && (_root.ruler_mc._y - _root.ruler_mc._height) <= _root.pointer_mc._y) {
movefactor = (clickstart - _ymouse) / damping;
_root.ruler_mc._y += movefactor;
} else if (_root.ruler_mc._y <= _root.pointer_mc._y) {
_root.ruler_mc._y = _root.pointer_mc._y;
} else if (_root.ruler_mc._y - _root.ruler_mc._height) {
_root.ruler_mc._y = (_root.pointer_mc._y + _root.ruler_mc._height);
}
measure = Math.floor ((_root.ruler_mc._y - _root.pointer_mc._y) / (_root.ruler_mc._height / rulerdivisions));
measure_txt.text = measure+" cm";
};
/*check when the pointer is dragged*/
_root.pointer_mc.onPress = function () {
clickstart = _ymouse;
moveRulerInterval = setInterval (moveruler, 15);
};
/*check when the dragging stops*/
_root.pointer_mc.onRelease = function () {
clearInterval (moveRulerInterval);
};
_root.pointer_mc.onReleaseOutside = function () {
clearInterval (moveRulerInterval);
};
And that's all there is to it. If you have a neater way of stopping the ruler from dropping off either end, feel free to post your solution as a comment.
Making it useful
If you want to use the input of this interface for something useful, perhaps to base other calculations on it, simply use the 'measure' variable within your formula, to represent the user's input.
No comments:
Post a Comment