Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Прошу помощи / консультации по AS3
Flash Zone Forum > Macromedia Flash > Начинающим
aminmsk
Доброго всем времени суток!
Сам являюсь новичком в AS как таковом и в AS3 в частности, пишу свой первый "проект".
Для написания использую Adobe Flash 5.5.

Прошу помочь с следующим.
Есть функция:
Код
function smallFoto(getXPosition,getAlpha,imgAddrrPrev){
        var viewerFotoPreviewR:viewerFotoPreview= new viewerFotoPreview;
    var viewFoto= viewerFotoPreviewR.viewerUILoader;
    viewFoto.load(new URLRequest (imgAddrrPrev));
    stage.addChild(viewerFotoPreviewR);
            
    viewerFotoPreviewR.width= 135;
    viewerFotoPreviewR.height= 110;
    viewerFotoPreviewR.x= getXPosition;
    viewerFotoPreviewR.y= 770;
    viewerFotoPreviewR.alpha= getAlpha;
    
}


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

Код
var buttonClose = vieWer.viewButtClose; //кнопка находится внутри фрагмента ролика в библиотеке и сама является фрагментом ролика.
buttonClose.addEventListener(MouseEvent.CLICK, closeViewer);
        function closeViewer(e:MouseEvent):void{
            stage.removeChild(vieWer); //первый обьект удаляется нормально
            stage.removeChild(viewerFotoPreviewR); // получаю "Обращение несуществующего свойства viewerFotoPreviewR"
        }


Понимаю, что истинна где то рядом. Так же ясно, что проблема в том что переменная "viewerFotoPreviewR" доступна только внутри функции.
Как заставить флеш удалить все экземпляры viewerFotoPreviewR?
MustLive
Цитата
Как заставить флеш удалить все экземпляры viewerFotoPreviewR?

aminmsk

Так и есть, истина рядом. Тебе лишь нужно разобраться с основами ActionScript (или любого другого языка поддерживающего парадигму ООП).

Ты создаёшь экземпляр класса viewerFotoPreview - переменная viewerFotoPreviewR - внутри функции smallFoto. И он доступен только внутри неё. А потом ты обращается к viewerFotoPreviewR из другой функции closeViewer, что и приводит к ошибке.

Ты объяви данный объект (переменную viewerFotoPreviewR) в качестве глобальной переменной - в частности не в рамках функций, а в кадре. Что должно решить проблему. Но это AS1/AS2 подход, а у тебя код на AS3 и строка "stage.addChild(viewerFotoPreviewR);" должна была решить данную задачу. Но у addChild явно есть свои нюансы и ты должен с ними разобраться прочитав документацию по addChild (сам я с AS3 не работал, поэтому не помогу). Прочитай хелп к AS3 и научись правильно добавлять и удалять объекты на сцене.
aminmsk
Тема закрыта, разобрался.
Избавился от функции, создал цикл for который добавляет детей в спрайт, затем добавляет на сцену сам спрайт.
Соответственно кнопка просто делает removeChild...

Был еще вариант (на уровне размышлений), искать обьекты через getChildAt по типу и удалять. Но не пробовал реализовать..
MustLive
aminmsk, вот и хорошо, что разобрался.

Раз таким методом смог добиться, чтобы работало без ошибок, значит хорошо. Другим это также может пригодиться.
Русская версия IP.Board © 2001-2017 IPS, Inc.