Форум 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=206866)

NixMist 10.03.2014 21:02

Функция очистки сцены от нарисованной графики.
 
Предложите пожалуста функцию, которая будет очищать все графичесские элементы на сцене.

samana 10.03.2014 21:06

Если графические элементы сделаны с помощью встроенных средств рисования, то -
Код AS3:

this.graphics.clear();

А если на сцене объекты (спрайты, мувиклипы, шейпы), то -
Код AS3:

this.removeChildren();


NixMist 11.03.2014 11:21

Первый вариант я так понимаю, у меня нарисованы линии с помощью lineTO.
Я прицепил this.graphics.clear(); к кнопке, но по нажатию на кнопку линии не удаляются.


Где я наложал?(

Isfet 11.03.2014 11:39

значит линии нарисованы не в this , а в каком то другом объекте.
найдите тот объект в который вы рисуете линии
допустим
Код AS3:

spr.graphics.lineTo(100,100);

и именно в нем удаляйте
Код AS3:

spr.graphics.clear();

если же вы все-таки рисуете линии в this, тогда смотрите , может у вас при удалении потом опять перерисовывается все заного

NixMist 11.03.2014 11:53

Цитата:

Сообщение от Isfet (Сообщение 1161454)
если же вы все-таки рисуете линии в this, тогда смотрите , может у вас при удалении потом опять перерисовывается все заного

Точно, вы абсолютно правы.
Проблематично тогда получается удалить их.

samana 11.03.2014 12:26

Цитата:

Сообщение от NixMist (Сообщение 1161455)
Проблематично тогда получается удалить их.

Думаю проблем особых нет, нужно просто подправить ваш код.

NixMist 11.03.2014 12:39

Я ещё не совсем понял, какой кусок кода именно перерисовывает линии.
Вроде как либо этот, он вызывается при просто рисовании линий.
Код AS3:

public function update(): void
 
                {
                        graphics.clear();
                        graphics.lineStyle(2, 0x221322);
                        graphics.moveTo(_point1.parent.x + _point1.x, _point1.parent.y + _point1.y);
                        graphics.lineTo(_point1.parent.x + _point1.x, ((_point2.parent.y + _point2.y) + (_point1.parent.y + _point1.y)) / 2);
                        graphics.lineTo(_point2.parent.x + _point2.x, ((_point2.parent.y + _point2.y) + (_point1.parent.y + _point1.y)) / 2);
                        graphics.lineTo(_point2.parent.x + _point2.x, _point2.parent.y + _point2.y);
 
                }

Либо этот, он вызывается при передвижении объектов, из которых исходят и входят линии.
Код AS3:

public function redrawLines()
                {
                        var l: int = _lines.length;
                        for (var i: int = 0; i < l; i++)
                        {
                                _lines[i].update();
                        }
                }


samana 11.03.2014 12:59

По идее, вам нужно отчистить графику тут
Код AS3:

public function redrawLines()
{
    graphics.clear(); // <-------------
        var l: int = _lines.length;
        for (var i: int = 0; i < l; i++)
        {
                _lines[i].update();
        }
}

p.s. но не факт.

NixMist 11.03.2014 13:13

Нет вы не поняли, я хочу по нажатию на кнопку очищать сцену от всей нарисованной графики.

Isfet 11.03.2014 13:29

Код AS3:

btn.addEventListener(MouseEvent.CLICK,removeLines);
 
public function removeLines(e:MouseEvent = null):void{
    var l: int = _lines.length;
        for (var i: int = 0; i < l; i++)
        {
                _lines[i].graphics.clear();
              // но лучше в классе линии сделать еще одну функцию clear - например
        }
  // ну и дальше пишете что еще вам нужно удалить
 
}

и как выше писал самана, перед рисование линий нужно удалять старые, иначе они будут рисоваться поверх первых
Код AS3:

public function redrawLines()
{
        removeLines(); // <-------------
        var l: int = _lines.length;
        for (var i: int = 0; i < l; i++)
        {
                _lines[i].update();
        }
}


и вообще я не понял сути вашего кода, вы перетаскиваете родителя, и пересчитываете координаты всех линий внутри...
но эти линии будут переноситься автоматически, если они внутри контейнера (который тащим)


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

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