Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Соединить точки линиями (http://www.flasher.ru/forum/showthread.php?t=202341)

cezar12 11.07.2013 12:48

Соединить точки линиями
 
Есть мини игра, где надо соединять объекты линиями. В некоторых случаях возникает ошибка.
Код:

ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
        at flash.display::DisplayObjectContainer/removeChild()
        at quiz_fla::MainTimeline/makeThread()

Никак не могу разобраться, прошу помощи!
Код AS3:

function makeThread(e:MouseEvent) {
        // нажатие на объект из первого столбца
        var dot = e.currentTarget;
        if(dot.line) {
                removeChild(dot.line);
                dot.line = null;
                if(dot.line)
                        dot.line.num2 = null;
 
        }
        addEventListener(Event.ENTER_FRAME, drawLine);
 
        function stopDrawing(e:MouseEvent) {
                // Повторное нажатие мыши
 
                for(var i:int = 0;i<dots2.length;i++) {
                        if(dots2[i].hitTestPoint(mouseX,mouseY,true)) {
                        // Если линия подведена к объекту из второго столбца
                                if(dots2[i].line) {
                                        removeChild(dots2[i].line);
                                        dots2[i].line = null;
                                        if(dots2[i].line)
                                                dots2[i].line.num1 = null;
                                }
                                var newLine:MovieClip = sprite;
 
                                dot.line = newLine;
                                dots2[i].line = newLine;
                                newLine.num1 = dot;
                                newLine.num2 = dots2[i];
                                lines.push(newLine);
                                sprite = null;
                                break;
                        }
                }
                if(sprite) {
                        removeChild(sprite);
                        sprite = null;
                }
                removeEventListener(MouseEvent.MOUSE_DOWN, stopDrawing);
                removeEventListener(Event.ENTER_FRAME, drawLine);
        }
 
        function drawLine(e:Event) {
                if(sprite) {
                        removeChild(sprite);
                        sprite = null;
                }
                sprite = new MovieClip();
                sprite.graphics.lineStyle(4,0x003366,0.7);
                sprite.graphics.moveTo(dot.x+dot.width/2,dot.y+dot.height/2);
                sprite.graphics.lineTo(mouseX,mouseY);
 
                addChild(sprite);
                addEventListener(MouseEvent.MOUSE_DOWN, stopDrawing);
        }
}


Snut 11.07.2013 12:53

проверяй наличие sprite.parent или dot.line.parent

cezar12 11.07.2013 15:56

Все, разобрался, поменял на
Код AS3:

if(dot.line) {
        removeChild(dot.line);
        dot.line.num2.line = null;
        dot.line = null;
}

и
Код AS3:

if(dots2[i].line) {
        removeChild(dots2[i].line);
        dots2[i].line.num1.line = null;
        dots2[i].line = null;
 
}



Часовой пояс GMT +4, время: 11:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.