![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Всем привет,
Хочу реализовать следующее. На экране N кол-во окружностей, соединенное между собой линиями. При перетаскивании окружностей мне нужно чтоб линии растягивались/укорачивались. На текущий момент реализовал перетаскивание и отрисовку линий, но линии ведут себя как трассер т.е. рисуются новые а предыдущие не удаляются. Не удается сделать removeChild() Подскажите чем ошибка? Спасибо import flash.events.Event; import flash.events.MouseEvent; var totalCircles:Number = 5; //Количество окружностей/линий addEventListener(Event.ENTER_FRAME,drawLine); circle1.addEventListener(MouseEvent.MOUSE_DOWN,C1_sd); circle2.addEventListener(MouseEvent.MOUSE_DOWN,C2_sd); circle3.addEventListener(MouseEvent.MOUSE_DOWN,C3_sd); circle4.addEventListener(MouseEvent.MOUSE_DOWN,C4_sd); circle5.addEventListener(MouseEvent.MOUSE_DOWN,C5_sd); function C1_sd(e:MouseEvent){ circle1.startDrag(); } function C2_sd(e:MouseEvent){ circle2.startDrag(); } function C3_sd(e:MouseEvent){ circle3.startDrag(); } function C4_sd(e:MouseEvent){ circle4.startDrag(); } function C5_sd(e:MouseEvent){ circle5.startDrag(); } circle1.addEventListener(MouseEvent.MOUSE_UP,C1_stop); circle2.addEventListener(MouseEvent.MOUSE_UP,C2_stop); circle3.addEventListener(MouseEvent.MOUSE_UP,C3_stop); circle4.addEventListener(MouseEvent.MOUSE_UP,C4_stop); circle5.addEventListener(MouseEvent.MOUSE_UP,C5_stop); function C1_stop(e:MouseEvent){ circle1.stopDrag(); } function C2_stop(e:MouseEvent){ circle2.stopDrag(); } function C3_stop(e:MouseEvent){ circle3.stopDrag(); } function C4_stop(e:MouseEvent){ circle4.stopDrag(); } function C5_stop(e:MouseEvent){ circle5.stopDrag(); } function drawLine(e:Event):void { for (var i:uint = 1; i <= totalCircles; i++) { var line:Sprite = new Sprite(); line.graphics.moveTo(this["circle" + i].x, this["circle" + i].y); line.graphics.lineStyle(2, 0x009900, 1); if (i == totalCircles){ line.graphics.lineTo(circle1.x, circle1.y); removeChild(line); } else { line.graphics.lineTo(this["circle" + (i + 1)].x, this["circle" + (i + 1)].y); } addChild(line); } //this.e.updateAfterEvent; } |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Лови
![]() import flash.events.MouseEvent; import flash.display.Sprite; import flash.display.DisplayObject; var totalCircles:Number = 5; //Количество окружностей/линий var lines:Sprite = new Sprite(); var drawFlag:Boolean = false; this.addEventListener(MouseEvent.MOUSE_MOVE, drawLine); for (var i:uint = 0; i < totalCircles; i++) { var circle:Sprite = new Sprite(); circle.graphics.lineStyle(1, rndColor()); circle.graphics.beginFill(rndColor()); circle.graphics.drawCircle(0,0, rndRadius()); circle.x = rndCoord(); circle.y = rndCoord(); circle.name = "circle" + i; circle.buttonMode = true; this.addChild(circle) circle.addEventListener(MouseEvent.MOUSE_DOWN, circle_mouseDown); circle.addEventListener(MouseEvent.MOUSE_UP, circle_mouseUp); } function circle_mouseDown(event:MouseEvent):void { drawFlag = true; event.target.startDrag(); } function circle_mouseUp(event:MouseEvent):void { drawFlag = false; event.target.stopDrag(); } function drawLine(event:MouseEvent):void { if (!drawFlag) return; lines.graphics.clear(); lines.graphics.lineStyle(3, rndColor()); for (var i:uint = 0; i < totalCircles; i++) { var dispObjCurr:DisplayObject = this.getChildByName("circle" + i); var dispObjNext:DisplayObject = this.getChildByName("circle" + (i+1)); if (i == (totalCircles-1)) dispObjNext = this.getChildByName("circle0"); lines.graphics.moveTo(dispObjCurr.x, dispObjCurr.y); lines.graphics.lineTo(dispObjNext.x, dispObjNext.y); this.addChild(lines); } } function rndColor():uint { return Math.random() * 0xFFFFFF; } function rndRadius():uint { return Math.random() * 50 + 30; } function rndCoord():uint { return Math.random() * 300; }
__________________
Нормально делай — нормально будет! Последний раз редактировалось tsarapkabel; 09.10.2012 в 15:30. |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Спасибо,
выдает кучу ошибок о невозможности загрузить классы и интерфейсы ((( Все работает просто в AS2 проверял по ошибке Слушай, подскажи пожалуйста, а как сделать чтоб мой circle приаттачивался из библиотеки (addChild()) и при этом получал соответствующее имя circle1, circle2...circle5? Т.е. мне не нужно чтоб круг рисовался, менялись его радиус и координаты. Я хочу именно приаттачивать нарисованный объект и соединять их линиями. в AS2 можно было прямо задать в attachMovie имя копии, а тут не знаю как сделать? Заранее спасибо. |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Так:
__________________
Нормально делай — нормально будет! |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Эээ... немного не то,
мне нужно чтоб аттачились копии мувика из библиотеки с id например MC, и на сцене уже эти копии имели имена типа circle1, circle2... circle5. а тут как я понял получается мы даем имена спрайтовым объектам. Я взял объект окружность для простоты, а в идеале мне нужно соединить линиями мувиклипы, например сложные рисунки (не спрайты) |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
а спрайт по-вашему не сложный? Мувиклипы это расширение спрайта + временная линия.
Меняем var circle:Sprite = new cls() as Sprite; // на var circle:MovieClip = new cls() as MovieClip; Если бы сначала Вы объяснили всё более понятно, получили бы более конкретный ответ, а теперь будем каждый раз добавлять условия ![]()
__________________
Нормально делай — нормально будет! |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Ну я думал что все было понятно, не хотел никого в заблуждение вводить,
в моем коде изначально были мувики созданные руками. circle1.addEventListener(MouseEvent.MOUSE_DOWN,C1_sd); circle2.addEventListener(MouseEvent.MOUSE_DOWN,C2_sd); ... circle5.addEventListener(MouseEvent.MOUSE_DOWN,C5_sd); ... Теперь по поводу текущей проблемы, у меня в библиотеке мувик с меткой/классом "MC" написал for (var i:uint = 1; i <= totalCircles; i++) { var MC:Class = getDefinitionByName("circle" + i) as Class; // circle1,circle2,... var circle:MC = new MC() as MovieClip; this.addChild(circle); } "Монтажный кадр 1, слой "Слой 1", кадр 1, строка 25 1046: Тип не найден или не является константой времени компиляции: MC." Если писать так то работает но это получается сново усложнение, от которого можно наверное уйти. |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Ну мувик-то не один, наверное?
MC1, MC2, MC3... ? Если так, то:
__________________
Нормально делай — нормально будет! |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 282
|
Спасибо
|
![]() |
![]() |
Часовой пояс GMT +4, время: 08:37. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|