![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
Доброго времени!
Возникла необходимость в подвижном указателе-стрелке, состоящем из двух маркеров (прямоугольного[начала] и треугольного[конца]), соединённых линией. При перемещении одного из маркеров линия следует за ними. Приведённая ниже реализация работает, но отъявленно мерцает - видно, как линия мечется за маркером, при этом не всегда корректно останавливается. Никто не подскажет, как это можно побороть? Пример кода (Flash MX 2003, Ctrl+C, Ctrl+V): // создаём линию _root.createEmptyMovieClip("line1", 0); with (_root.line1) { moveTo(0,0); lineStyle(0, 0x4B78FE, 100); lineTo(200,0); _width = 150; } // создаём маркер начала - прямоугольник _root.createEmptyMovieClip( "r1", 1); with (_root.r1) { lineStyle(0, 0x4B78FE, 100); beginFill(0x4B78FE, 100); moveTo(-8,-8); lineTo(8,-8); lineTo(8,8); lineTo(-8,8); lineTo(-8,-8); endFill(); }; _root.r1.onPress = function(){startDrag(this)}; _root.r1.onRelease = function(){stopDrag()}; _root.r1.onReleaseOutside = function(){stopDrag()}; _root.r1.onMouseMove = function() {if (_root.isDown) {_x = _root._xmouse; _y = _root._ymouse;}}; // создаём маркер конца - треугольник _root.createEmptyMovieClip( "tr1", 2); with (_root.tr1) { lineStyle(0, 0x4B78FE, 100); beginFill(0x4B78FE, 100); moveTo(-8,-8); lineTo(8,0); lineTo(-8,8); lineTo(-8,-8); endFill(); _x = 150; }; _root.tr1.onPress = function(){startDrag(this)}; _root.tr1.onRelease = function(){stopDrag()}; _root.tr1.onReleaseOutside = function(){stopDrag()}; _root.tr1.onMouseMove = function() {if (_root.isDown) {_x = _root._xmouse; _y = _root._ymouse;}}; // создаём обработчик событий мыши mh = new Object(); isDown = false; mh.onMouseDown = function() { isDown = true; } mh.onMouseUp = function() { isDown = false; } mh.onMouseMove = function() { if (isDown) { with (_root) { ax = r1._x; ay = r1._y; bx = tr1._x; by = tr1._y; dx = line1._x - bx; dy = line1._y - by; dxp = 1; if (dx<0) { dxp = 0;} line1._x = ax; line1._y = ay; line1._rotation = (Math.atan(dy/dx)/Math.PI + dxp)*180; line1._width = Math.abs(bx - ax); line1._height = Math.abs(by - ay); r1._rotation = line1._rotation; tr1._rotation = line1._rotation; } } } Mouse.addListener(mh); |
|
|||||
|
тобы крутились сам делай
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 128
|
Спасибо!
|
![]() |
Часовой пояс GMT +4, время: 07:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|