Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Дублирование клипов при помощи прототипа

div.main {margin-left: 20pt; margin-right: 20pt}

Дублирование клипов при помощи прототипа

Каждый из нас рано или поздно сталкивается с проблемой дублирования клипов. Задача эта довольно несложная, но у начинающих она зачастую вызывает ряд вопросов. Особенно, когда дело касается дублирования клипов с кнопками и присваивания каждой из кнопок своего собственного заголовка. Решает ее каждый по-своему, и этот, найденный единожды вариант решения, с небольшими необходимыми модификациями кочует из программы в программу.
Между тем, можно создать единый метод, позволяющий дублировать клипы при помощи всего одного простого действия. Этот метод предполагает использование прототипов.
Я не стану подробно вдаваться в то, что такое прототип и с чем его едят. В самом деле, намного ли станет понятнее, если написать, что-то вроде «прототип – это метод объекта»? Поэтому постараюсь попроще. Если есть у нас нечто, называемое объектом (string, movieclip, date и т.д.) то прототип объекта – это некая функция, которую можно применить ко всем объектам данного типа. Ко всем строкам, ко всем мувикам и т.д. Причем, для ее применения достаточно знать лишь имя этого объекта и список параметров прототипа.
Нет, не стало намного яснее.
Давайте лучше разберем один весьма полезный прототип, предназначенный для дублирования клипов. По мере продвижения вперед мы и разберемся в том, что это есть и с чем его есть!

Начнем с постановки задачи.

Пусть у нас есть некий клип, в который помещена кнопка, снабженная заголовком. И мы хотим продублировать эту кнопку, скажем, раз 5-6. И хотим, чтобы у каждой такой кнопки был свой собственный заголовок.
Ну, саму-то кнопку мы рисовать умеем. А то?! И поместить внутрь нее заголовок умеем тоже.
Заголовок наш – это какое-то динамическое динамическое поле с каким-то именем. Зафиксируем этот факт в памяти и пойдем дальше.
Когда мы дублируем кнопку (вернее, мувик с кнопкой, а может, и без кнопки и даже без заголовка), мы хотим, чтобы этот мувик лежал в каком-то конкретном месте экрана и затем повторялся по горизонтали или вертикали, а возможно – и то и другое одновременно. Значит, нам нужно определиться с координатами первого мувика и смещением новых мувиков по осям X и Y. Так и назовем наши координаты: x0,y0 – начальная точка, dx,dy – смещения.
Что еще? Имя есть, координаты тоже… Ах, да, количество мувиков. Пусть будет n.
Все? Почти. Забыли об именах. Вспоминаем, что в мувике лежит какое-то динамическое поле с каким-то заголовком. Так и назовем его в нашем будущем прототипе – captionName. И, наконец, сами заголовки кнопок будем размещать в некоем массиве, который назовем captions.

Итак, приступим к написанию прототипа.
Начнем с заголовка.

movieClip.prototype.DMC=function(n,x0,y0,dx,dy,captionName,captions){
}

В теле прототипа пока еще ничего нет, но зато мы знаем, что сам прототип будет называться DMC и в него будут передаваться все те параметры, что указаны в заголовке. Дело осталось за малым – написать содержимое. Что же, напишем!
Определим локальные имена

var name=this._name;
var basename=this._name;
var yt=y0;
var xt=x0;

Почему локальные? Чтобы при использовании прототипа предотвратить возможные коллизии и не ограничивать себя в выборе переменных при программировании.

Теперь спозиционируем первый клип и присвоим ему первый заголовок из массива.
this._x=x0;
this._y=y0;
this[captionname]=captions[0];

Ну, а теперь размножим этот клип и присвоим копиям свои заголовки.

for (i=1;i<n;i++){
name=basename+i;
yt+=dy;
xt+=dx;
this.duplicateMovieClip(name,i);
_parent[name]._y=yt;
_parent[name]._x=xt;
_parent[name][captionname]=captions[i];
}

Вроде бы, все… Но на самом деле – не совсем.
Дело в том, что при применении прототипа к реальному клипу имена новых клипов будут формироваться путем прибавления порядкового номера к базовому имени, т.е., если клип, подлежащий дублированию называется MyMovie, то дублированные клипы будут иметь имена MyMovie1, MyMovie2, MyMovie3 и т.д.
Это может быть не совсем удобно для последующей обработки. Логичнее было бы исходный клип назвать MyMovie0. Но тогда последующие имена будут MyMovie01, MyMovie02… Чтобы избежать такой ситуации, необходимо проверить исходный клип на наличие в нем этого самого нуля в конце и удалить его из новых имен.

Перепишем базовое имя.

var name=this._name;
if (name.charAt(name.length-1)=="0"){name=name.substr(0,name.length-1)}
var basename=name;

Вот теперь, кажется, все. Наш прототип будет выглядеть следующим образом:

movieClip.prototype.DMC=function(n,x0,y0,dx,dy,captionName,captions){
var name=this._name;
if (name.charAt(name.length-1)=="0"){name=name.substr(0,name.length-1)}
var basename=name;
this._x=x0;
this._y=y0;
this[captionname]=captions[0];
var yt=y0;
var xt=x0;
for (i=1;i<n;i++){
name=basename+i;
yt+=dy;
xt+=dx;
this.duplicateMovieClip(name,i);

_parent[name]._y=yt;
_parent[name]._x=xt;
_parent[name][captionname]=captions[i];
}
}

Вроде бы, красиво. Осталось понять, что со всем этим делать дальше.
Тут есть два варианта.

Вариант первый.
Копируем прототип в первый кадр первой сцены.
Создаем мувик с кнопочкой (или без нее), снабженной заголовком. Или без заголовка. Как нравится.
Назовем наш мувик, скажем, myButton0. Помните, зачем в конце нолик? Впрочем, если его и не поставить – тоже сработает.
Определим заголовки через массив.

c=new array("qwer","asdfg","qaz","wsx","qdbrhm");

Определяемся с начальными координатами, смещениями по x и y, именем текстового поля внутри кнопки (пусть это будет text).

И, наконец, применяем наш прототип к нашему мувику.

myButton0.DMC(5,20,70,40,20,"text",c);
stop();

Мы получим 5 кнопочек (или мувиков) с заголовками, записанными в нашем массиве.

Ну, а если это не кнопки? Тогда не нужно указывать в обращении к прототипу ни имени текстового поля внутри мува, ни имени массива.

В чем же фишка? А она во втором варианте.
Перепишите текст прототипа в файл с именем, скажем, mylib.as.
В первом кадре первой сцены вместо текста прототипа напишите такую вот строку:
#include "mylib.as"

И-все! И ваш мувик будет дублироваться без всяких дальнейших затрат, вам даже не требуется понимание того, как все это работает. Причем, дублировать можно как клипы, находящиеся в «руте», так и вложенные внутри другого клипа.

Вот, собственно, и все, что я хотел рассказать про дублирование клипов при помощи прототипа.
Желаю удачи!
vol

Скачать Исходник (3.8 кб)


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте