var dx = 200;
dy = 400;
// Величина отступа от верхнего края рабочего листа
var х = 0;
var у = 0;
lineStyle(1, 0×000000);
for(х = -20; х < 21; х++) {
у = х * х;
beginFill(0×000000);
moveTo(dx + х — 1, dy — у + 1);
lineTo(dx + x + 1, dy — у + 1);
lineTo(dx + x + 1, dy — у — 1);
lineTo(dx + х — 1, dy — у — 1);
lineTo(dx + x — 1, dy — у + 1);
endFill ();
}
После этих изменений наш график будет нарисован нормально.
Программное управление масками
А теперь выясним, что можно сделать с масками, используя методы объекта movieClip
.Чтобы маскировать вложенный клип другим клипом (который будет превращен в маскирующий), используется метод setMask
:<Маскируемый клип>.
setMask(<Клип-маска>);Самое интересное заключается в том, что оба клипа совсем не обязательно должны находиться в разных слоях (о слоях см. главу
5, о маскирующих слоях — главу 14). Кроме того, и маскирующий, и маскируемый клипы могут содержать сложную анимацию и даже двигаться. Ух, каких чудес можно натворить!Давайте создадим новый документ Flash, поместим на рабочий лист клип, содержащий любое растровое изображение, а на него наложим клип с какой-либо простой геометрической фигурой. Назовем нижний клип masked
, а верхний — mask. После этого привяжем к единственному кадру анимации такой вот сценарий:masked.setMask(mask);
mask.startDrag(true);
Первое выражение этого сценария маскирует клип-растровое изображение masked
клипом mask. Второе выражение заставляет клип mask (т. е. маску) перемещаться вслед за курсором мыши.Теперь запустим на воспроизведение созданный фильм в отдельном окне и начнем перемещать курсор мыши с места на место. Забавно получилось, не правда ли?
Кстати, маски, созданные путем вызова метода setMask
, имеют приоритет над масками, созданными вручную. Иными словами, если мы создадим маскирующий слой с клипом-маской mask и замаскируем им другой клип masked, то выражение:mask.setMask(masked);
сделает клип masked
маской, а клип mask — маскируемым.Маскируемый клип в данный момент времени может иметь только одну маску. Так, если для клипа masked
вызвать метод setMask еще раз, но передать ему в качестве параметра клип mask2, то он станет новой маской для masked, а предыдущая маска mask "уйдет в отставку".Чтобы убрать маску совсем, достаточно вызвать метод setMask
с параметром null:masked.setMask(null);
Работа с кнопками
А теперь поговорим о кнопках и работе с ними с помощью сценариев. (Подробнее о кнопках см. главу 18
.)Все находящиеся на рабочем листе кнопки, для которых было задано имя, представляют собой экземпляры объекта Button
. Их создает сам Flash; нам же остается только использовать их свойства и методы.Оператор typeof
для кнопки возвращает строку "object" — это значит, что кнопка относится к объектному типу данных.Свойства и методы объекта Button
По своим свойствам и методам объект Button
во многом похож на объект movieclip. Имея весьма схожие наборы свойств и методов, эти два объекта зачастую ведут себя одинаково. В частности, объект Button поддерживает свойства х, _у, _xmouse, _ymouse, _height, _width, _alpha и _rotation, уже знакомые нам по объекту movieClip. Однако объект Button не поддерживает методы play, stop, gotoAndPiay, gotoAndStop и подобные им, так как назначение его все же иное, чем у объекта movieclip. Так что кнопку можно рассматривать как очень специализированный, "урезанный" вариант клипа.Рассмотрим специфические свойства объекта Button
, которые обязательно пригодятся нам в работе с его экземплярами. (Кстати, многие из этих свойств поддерживаются и объектом movieclip, но редко используются в клипах.)Свойство enabled
позволяет разрешить или запретить пользователю нажимать кнопку. Оно имеет логический тип: значение true разрешает доступ к кнопке, а значение false — запрещает.Свойство _visibie
позволяет сделать кнопку видимой или невидимой. Оно имеет логический тип: значение true делает кнопку видимой, а значение false — невидимой. При этом невидимая кнопка также недоступна для нажатия.