Руководство по actionscript. часть 4, стр. 126

Чтобы избавиться от избыточности в классе Ellipse, мы должны изменить подход, применяемый для рисования фигуры. Вместо того чтобы вызывать метод draw ( ) всякий раз, когда изменяются данные концептуального эллипса, мы будем откладывать вызов этого метода до момента обновления экрана. Эта новая стратегия приведет к усложнению кода класса Ellipse, но при этом улучшит его производительность.

Первый шаг в реализации новой стратегии «один вызов метода dr aw ( )» заключается в удалении вызова метода draw ( ) из методов setWidht ( ) и setHeight ( ), а также вызова метода-конструктора класса El 1 ipse. Вместо непосредственного вызова метода draw ( ) эти функции будут вызывать метод stage. invalidate ( ), который приказывает среде выполнения Flash осуществить диспетчеризацию события Event. RENDER при очередной проверке необходимости обновления экрана. Затем из функции-приемника события Event. RENDER мы вызовем метод draw ( ). В листинге 23.3 представлен измененный класс Ell ipse — отличия от кода из листинга 23.2 выделены полужирным шрифтом. Стоит отметить, что метод draw ( ) не должен вызываться, когда объект Ellipse не находится в списке отображения, поэтому вызов метода stage. inval idate ( ) происходит только в том случае, когда объект Ell ipse находится в списке отображения. Чтобы определить, находится ли объект Ellipse в списке отображения, мы проверяем значение унаследованной переменной экземпляра stage этого объекта. Когда значение переменной stage равно null, объект Ellipse не находится в списке отображения.

*«, -

I Объект, запрашивающий уведомление о возникновении события Event. RENDER, м$ л* получит это уведомление даже в том случае, если он не находится в списке отобра-_ ffi жения.

Обратите внимание, что на данном промежуточном этапе нашей разработки класс Ell ipse не является полнофункциональным, поскольку он не регистрирует приемники для событий Event. RENDER. Эту проблему мы решим в ближайшее время.

Листинг 23.3. Измененный класс Ellipse, часть 1

package { import flash. display. Shape;

public class Ellipselnterim extends Shape { private var w:Number; private var h:Number;

public function Ellipselnterim (width:Number, height:Number) { w = width; h = height;

// Если этот объект находится в списке отображения… if (stage!= null) {

// …запрашиваем диспетчеризацию события Event. RENDER

stage. invalidate( );

}

}

public function setWidth (newWidth:Number):void { w = newWidth;

if (stage!= null) { stage. invalidate( );

public function getWidth ( ):Number { return w;

}

public function setHeight (newHeight:Number):void { h = newHeight;

if (stage!= null) { stage. invalidate( );

}

}

public function getHeight ( ).-Number { return h;

}

// Приемник события вызывается перед обновлением // экрана, если был вызван метод // stage. invalidate( )

private function renderListener (e:Event):void { draw( );

}

private function draw ( ):void { graphics. clear( ); graphics.1ineStyle(l); graphics. beginFill(OxFFFFFF. 1); graphics. drawEllipse(0. 0. w, h);

}

}

}

Чтобы метод renderListener ( ) выполнялся всякий раз, когда среда Flash осуществляет диспетчеризацию события Event. RENDER, мы должны зарегистрировать метод renderListener ( ) в экземпляре класса Stage для событий Event. RENDER. Однако когда объект Ellipse не находится в списке отображения, его переменной экземпляра stage присвоено значение null и, следовательно, она не может применяться для регистрации события. Для того чтобы обойти эту проблему, мы определим в классе Ellipse две функции-приемника событий — addedToStageListener( ) и removedFomStageListener( ), которые получают уведомления о возникновении пользовательских событий StageDetector. ADDED_TO_SТAGE и StageDetector. REMOVED_FROM_STAGE. Диспетчеризация первого события происходит, когда объект добавляется в список отображения, и при получении этого события класс Ellipse будет регистрировать метод renderListener ( ) для события Event. RENDER. Диспетчеризация второго события происходит в том случае, когда объект удаляется из списка отображения, и при получении этого события класс Ellipse будет отменять регистрацию метода renderListener ( ) для событий Event. RENDER.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 109
  • 26.07.2011">Ноутбук ACER AS7520G-502G16Mi
  • 21.10.2011">Мегафон
  • 10.04.2012">Twitter подала иск против разработчиков спам-приложений
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 153
  • 20.03.2011">Советы web-дизайнеру
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.73
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 048
  • 07.10.2010">Подбор цветовой палитры с помощью web — сервиса Adobe Kuler
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.36
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 026
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 028
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.46
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.31
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 091
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...