(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Уроки Flash: Простенькое, вращающееся слайд-шоу, с XML

Источник: demiart
Steve O.

Нам понадобится 1 фрэйм и 2 мувика. И Флэш. Подойдет даже MX.

Вот, что должно получиться в итоге.

А теперь я опишу, как это делается.

Сначала создайте новый документ. Затем Insert >> New Symbol >> Movie Clip и назовите его "zzz". Там нарисуйте прямоугольник, или круг... да что угодно. Это и будет у нас вращаться.
В библиотеке нажмите правой кнопкой по этому мувику и выберите linkage. Поставьте галочки на 1 и 3 квадратик. и ОК.
Теперь опять Insert >> New Symbol >> Movie Clip назовите "kart".
Двойной щелчек на "zzz" в библиотеке. Когда "zzz" откроется для редактирования перетащите в него "kart" из библиотеки. В этот мувик будет загружаться картинка.
И пропишите ему instance name - "kart".
Затем перемещаемся на сцену и в первом кадре пишем код
И готово!

CODE

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("http://........xml");
myXML.onLoad = function(success) {
if (success) {
 total = myXML.firstChild.childNodes.length;
 radius = 250;
 var nam:Array = [];
 ugol = 0;
 hhh.swapDepths(100);
 smes = (Math.PI*2)/total;
 for (i=0; i<total; i++) {
  nam[i] = "fgh"+i;
  _root.attachMovie("zzz", nam[i], i+10);
  _root[nam[i]].kart.loadMovie(myXML.firstChild.childNodes[i].attributes.kar);
  _root[nam[i]].num = _root[nam[i]];
  _root[nam[i]].sm = smes*i;
  _root[nam[i]].onEnterFrame = function() {
   glub = 100+radius*Math.cos(ugol+this.sm);
   this.num._x = 300+radius*Math.sin(ugol+this.sm);
   this.num._y = 100;
   this.num._xscale = 100*Math.cos(ugol+this.sm);
   this.num.swapDepths(glub);
   if (this.num._xscale<0) {
    this.num._yscale = this.num._yscale-((this.num._yscale/80)-1)*10;
    this.num._alpha = 20;
   } else {
    this.num._yscale = this.num._yscale+((100/this.num._yscale)-1)*10;
    this.num._alpha = 100;
   }
   ugol += total/1000;
  };
 }
}
};

Вот XML файл.
В кором указаны адреса к картинкам.

CODE

<images>
  <img kar="http://....jpg"/>
  <img kar="http://....jpg"/>
  <img kar="http://....jpg"/>
.......
  <img kar="http://....jpg"/>
</images>

Теперь разбор кода.

Для начала нам нужно загрузить XML.
Это делается так.
Была куча уроков про XML там вы сможете подробнее о них узнать.

CODE

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("xxx.xml");
myXML.onLoad = function(success) {
if (success) {

Теперь сделаем предварительные расчеты и определим переменные

CODE

total = myXML.firstChild.childNodes.length; // количество нодов, и как следствие картинок.
 radius = 250; // радиус окружности
 var nam:Array = []; // массив для хранения имен мувиков
 ugol = 0; // первоначальное значение угла-положения мувика на окружности.
 smes = (Math.PI*2)/total; // на какой угол будет размещен мувик относительно 0.

Шоу Начинается!
Начинаем цикл от нуля до количества Нодов.

CODE

for (i=0; i<total; i++) {
  nam[i] = "fgh"+i;
  _root.attachMovie("zzz", nam[i], i+10);
  _root[nam[i]].kart.loadMovie(myXML.firstChild.childNodes[i].attributes.kar);
  _root[nam[i]].num = _root[nam[i]];
  _root[nam[i]].sm = smes*i;

nam[i] - это имя нового мувика, который мы аттачим
Аттачивание происходит в следующей строке.
Т.е. аттачить мувик "zzz", присвоить ему ноовое имя nam[i] и поместить на уровень i+10.
Следующей строчкой мы вытаскиваем из XML в определенном ноде адрес картинки, которую нужно загрузить в _root[nam[i]].kart
Затем для каждого мувика в отдельности создаем новые значения
1- сам мувик
2- смещение, относительно 0. Чтобы каждый мувик размещался на равное расстояние, относительно предыдущего мувика равномерно.

Теперь определяем действие каждого мувика

CODE

_root[nam[i]].onEnterFrame = function() {
   glub = 100+radius*Math.cos(ugol+this.sm);
   this.num._x = 300+radius*Math.sin(ugol+this.sm);
   this.num._y = 100;
   this.num._xscale = 100*Math.cos(ugol+this.sm);
   this.num.swapDepths(glub);

Т.е. кажды кадр будет что-то происходить.
А именно меняться глубина (уровень) мувика, в зависимости от его положения. Делается это для того, чтобы не случилось такое, что мувик, который должен быть сзади, оказался впереди.
Потом определяем координаты каждого мувика по x и y
С y все ясно.
А вот с x... Это самая простая, знакомая каждопу пятикласснику тригометрическая формула движения по окружности. Где:
300 - Это координата центра окружности..
ugol+this.sm - Это положение мувика, относительно других мувиков ПЛЮС угол вращения, который постоянно меняется. Это мы разберем позже.
Следующей строчкой масштабируем по x наш мувик. ( чем ближе к краю, тем он меньше. В центре он максимального размера.
cos любого угла не может быть меньше -1 и больше 1. Поэтому умножая начение на 100, получае огигинальный размер мувика - 100*1 = 100.
-1 дает одну хорошую возможность. При минусовом значении мувик отражается зеркально. Поэтому я его помещаю в самый зад (извините за выражение) посредством следующей строчки, которая переместит его на тот уровень, который был определен выше.

Ну и...

CODE

if (this.num._xscale<0) {
    this.num._yscale = this.num._yscale-((this.num._yscale/80)-1)*10;
    this.num._alpha = 20;
   } else {
    this.num._yscale = this.num._yscale+((100/this.num._yscale)-1)*10;
    this.num._alpha = 100;
   }

Здесь мы определяем.
Если мувик отражен зеркально, т.е. перемещен в зад ))) то по y его надо уменьшить,и сделать полупрозрачным, чтобы улучшить эффект 3D.
Иначе сделать нормального размера и не прозрачным.

CODE

ugol += total/1000;

Здесь каждый кадр к углу прибавляется значение, чтоб обеспечить вращение.
Если картинок будет мало то вертеться будет очень быстро, а если много, то очень медлено. Поэтому я использовал значение total - для того, чтобы скорость была нормальной при любом количестве картинок.
1000 - это, так сказать скорость, но чем меньше это значение, тем быстрее вращается ротатор... и наоборот.

Вот что мы имеем сейчас. Немножко доработаем, и добавим навигацию по слайдам.

Вам нужно всего-то создать новый мувик с именем "zzz" И вставить в него еще один мувик "cl" в котором рисуете прямоугольник и вставляете в него "kart" для загрузки картинки.

CODE

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("http://.....xml");
myXML.onLoad = function(success) {
if (success) {
 total = myXML.firstChild.childNodes.length;
 radius = 250;
 var nam:Array = [];
 ugol = 0;
 smes = (Math.PI*2)/total;
 for (i=0; i<total; i++) {
  nam[i] = "clipz"+i;
  _root.attachMovie("zzz", nam[i], i+10);
  _root[nam[i]].cl.kart.loadMovie(myXML.firstChild.childNodes[i].attributes.img);
  _root[nam[i]].num = _root[nam[i]];
  _root[nam[i]].cl.clip = _root[nam[i]].cl;
  _root[nam[i]].sm = smes*i;
  _root[nam[i]].cl.link = myXML.firstChild.childNodes[i].attributes.link;
  _root[nam[i]].cl.onRollOver = function() {
   this.clip.onEnterFrame = function() {
    this.clip._yscale = this.clip._yscale+((130/this.clip._yscale)-1)*20;
    this.clip._xscale = this.clip._yscale;
   };
  };
  _root[nam[i]].cl.onRollOut = function() {
   this.clip.onEnterFrame = function() {
    this.clip._yscale = this.clip._yscale-((this.clip._yscale/100)-1)*20;
    this.clip._xscale = this.clip._yscale;
   };
  };
  _root[nam[i]].cl.onPress = function() {
   getURL (this.link,"_blank");
  };
  _root[nam[i]].onEnterFrame = function() {
   speed = (300-_xmouse)/1500;
   glub = 100+radius*Math.cos(ugol+this.sm);
   this.num._x = 300+radius*Math.sin(ugol+this.sm);
   this.num._y = 100;
   this.num._xscale = radius/2.5*Math.cos(ugol+this.sm);
   this.num.swapDepths(glub);
   if (this.num._xscale<0) {
    this.num._yscale = this.num._yscale-((this.num._yscale/80)-1)*10;
    this.num._alpha = 20;
   } else {
    this.num._yscale = this.num._yscale+((100/this.num._yscale)-1)*10;
    this.num._alpha = 100;
   }
   ugol += speed/total;
  };
 }
}
};

Здесь просто добавлено значение скорости, которое меняется в зависимости от положения курсора
speed = (300-_xmouse)/1500;
300 - Это координата центра вашего проекта.
Я делал документ 600х200, поэтому 600/2 = 300.

XML файл выглядит так

CODE

<images>
<kar img="http://......jpg" link="http://.........com" />
<kar img="http://......jpg" link="http://.........com" />
<kar img="http://......jpg" link="http://.........com" />
<kar img="http://......jpg" link="http://.........com" />
<kar img="http://......jpg" link="http://.........com" />
<kar img="http://......jpg" link="http://.........com" />
</images>

Где link - Это ссылка на которую юзер перейдет при нажатии.

Ну вот и готово!

Спасибо за внимание. И удачи!



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.02.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM RATIONAL Quality Manager Quality Professional Authorized User Single Install License + Sw Subscription & Support 12 Months
ABBYY Lingvo x6 Английская Домашняя версия, электронный ключ
Delphi Professional Named User
Bamboo
SAP CRYSTAL Reports 2013 WIN INTL NUL
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование в AutoCAD
Компьютерный дизайн - Все графические редакторы
Реестр Windows. Секреты работы на компьютере
Компьютерные книги. Рецензии и отзывы
3D и виртуальная реальность. Все о Macromedia Flash MX.
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100