Клипы – кнопки

Уверен, чтобы создать кнопку во Flash, вы используете визуальные средства Flash. Да, это довольно просто. Но, если вы хотите добвавить сложное динамическое поведение кнопки на этапе выполнения, без клипов не обойтись.

В следующем примере создается клип, в него помещается текстовое поле, а затем определяется обработчик события кнопки onRelease():

//Создаем клип
this.createEmptyMovieCliip ("submit_mc", 1);

//Добавляем текстовое поле
this.submit_mc.createTextField ("submit_txt", 1, 0, 0, 50, 20);
this.submit_mc.submit_txt.text = "Умный Мозг";

//Определяем обработчик кнопки
this.submit_mc.onRelease = function() {
trace("Отлично. Вы нажали на кнопочку.");
}

Созданный нами клип отлично работает в качестве кнопки. Теперь давайте немного облегчим задачу пользователю. Для этого мы увеличим размер активной области нашего клипа, создав отдельный клип активной области (hit area movie clip), выполнив следующие действия:
1 Создадим клип, указав желаемые размеры
2 Скроем наш клип, установив для его свойства _visible значение false.
3 Присвоим клип активной области свойству hitarea клипа с событиями кнопки.

Обычно клип, выполняющий функцию активной области, помещают внутри клипа с событиями кнопки, чтобы активная оболасть перемещалась и меняла размеры вместе со своим родительским клипом.
Например, в следующем коде с помощью Drawing API создается клип активной области с размерами, большими чем у слова "Умный Мозг":

//Создаем hit_mc внутри submit_mc
this.submit_mc.createEmptyMovieClip("hit_mc", 0);

//Нарисуем в hit_mc прямоугольник
this.submit_mc.hit_mc.moveTo(-30, -15);
this.submit_mc.hit_mc.beginFill(0xFF0000);
this.submit_mc.hit_mc.lineTo(80, -15);
this.submit_mc.hit_mc.lineTo(80, 35);
this.submit_mc.hit_mc.lineTo(-30, 35);
this.submit_mc.hit_mc.lineTo(-30, -15);
this.submit_mc.hit_mc.endFill();

//Скрываем клип активной области
this.submit_mc.hit_mc.visible = false;

//Задаем hit_mc в качестве активной области submit_mc
this.submit_mc.hitArea = this.submit_mc.hit_mc;

Чтобы кнопка была заметна пользователю, выделим слово "Умный Мозг" жирным цветом в обработчике onRollOver() клипа submit_mc:

//Если указатель мыши над текстом, делаем его жирным
this.submit_mc.onRollOver = function() {
this.submit_txt.setTextFormat (new TextFormat(null, null, null, true));
}

//Обычный текст при выходе указателя за пределы кнопки
this.submit_mc.onRollOut = function() {
this.submit_txt.setTextFormat (new TextFormat(null, null, null, false));
}

На самом деле существует множество различных модификаций кнопки, но мы пока остановимся на достигнутом. Ведь и это уже немалый результат, не так ли?

Исходник >>

--- О экстримальных зимних занятиях и животных в блогах ---

  1. Самый популярный блог о пингвинах расскажет кто такие пингвины адели.
  2. Зимние модели верхней одежды на блоге о стиле и моде.
  3. На блоге про охоту в Тамани охотничьи собаки фото с похождений.
  4. А вот лирический блог пишет про зимнюю рыбалку.
This entry was posted in Movie Clip, Кодинг and tagged , , , . Bookmark the permalink.

8 Responses to Клипы – кнопки

  1. andrey911 andrey911 says:

    Всё сделал по шагам как тут и написано,но чёт чучуть не получилось.Наверно малёха не догнал или что-то пропустил,ща ещё раз пройду всё по очереди.

  2. cleverbrain SaGod says:

    Андрей, добавил исходник, попробуйте скачать и разобраться.

  3. Игорь Игорь says:

    Большое спасибо, я как раз искал как можно сделать кнопку так, чтобы по сути кнопкой она не была)). Не могли бы вы ещё рассказать внятно о том как с помощью AS копировать экземпляры. И да, ещё, можно ли заставить работать ваш код на AS3?

  4. cleverbrain SaGod says:

    Не могли бы вы ещё рассказать внятно о том как с помощью AS копировать экземпляры.

    Я так понимаю, вам нужно использовать duplicateMovieClip(target, newName, depth);, где target – строка, задающая имя экземпляра, который хотим копировать, newName – имя нового клипа, depth – место в стеке содержимого (глубина).

  5. Игорь Игорь says:

    Почти) Получилось реализовать чеез attachMovie().

  6. cleverbrain SaGod says:

    В вашем случае эти функции выполняют одну и ту же роль :)

  7. Игорь Игорь says:

    И ещё – не подскажите как в этих клипах-кнопках можно отловить событие другое, например, нажатие клавиши, а в идеале и не одной?

  8. Игорь Игорь says:

    Как вариант – this.onMouseDown=function(
    {if(Key.isDown(Key.ALT)){trace(“rg22″);}} :cool:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.
сделано dimoning.ru