Уроки Flash: Простенькое, вращающееся слайд-шоу, с XMLИсточник: demiart Steve O.
Нам понадобится 1 фрэйм и 2 мувика. И Флэш. Подойдет даже MX.
А теперь я опишу, как это делается. Сначала создайте новый документ. Затем Insert >> New Symbol >> Movie Clip и назовите его "zzz". Там нарисуйте прямоугольник, или круг... да что угодно. Это и будет у нас вращаться.
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.
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] - это имя нового мувика, который мы аттачим Теперь определяем действие каждого мувика 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); Т.е. кажды кадр будет что-то происходить. Ну и...
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; }; } } }; Здесь просто добавлено значение скорости, которое меняется в зависимости от положения курсора 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 - Это ссылка на которую юзер перейдет при нажатии. Спасибо за внимание. И удачи! |