Руководство по 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

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

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

Полезные ссылки
Случайные записи
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 055
  • 06.07.2011">Типичные ошибки начинающих веб-дизайнеров
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.8
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 076
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.27
  • 14.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.61
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 123
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.87
  • 12.04.2011">Photoshop для начинающих: как вставить фото в готовую рамку?
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 088
  • 29.02.2012">На сервисе микроблогов Futubra появился поиск
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.2
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 134
  • 28.02.2011">Руководство по actionscript. часть 5, стр. 136
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.32
Опрос

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

View Results

Loading ... Loading ...