![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 5
|
в уроке есть скрипт (AS3) который подгружает внешние картинки(png) в контейнеры для отображения в менюшке,
мне нужно заменить пнг на свф... учитывая моё аматорство во флеше, хватило меня на тупую подгрузку swf вместо png(переназначил путь в xml файле). После чего swf подгрузился но отображаться корректно отказался, размер заданый константами игнорируется. у меня есть подозрения что константы( const IMAGE_WIDTH:uint = 70; const IMAGE_HEIGHT:uint = 70; ) в скрипте расчитаны на подгрузку именно картинок а не swf файлов, вопрос в том, прав ли я и если так то как должны выглядеть константы? может что-то типа const MOVIECLIP_WIDTH:uint = 70; ?? или константы/контейнеры масштабировать не умеют и мне нужно задавать размер swf-ки 70х70 ? //Мы используем картинки размером 70x70 (измените это, если ваши картинки другого размера) const IMAGE_WIDTH:uint = 70; const IMAGE_HEIGHT:uint = 70; //Установим focal length var focalLength:Number = 500; //Установим точку исчезновения var vanishingPointX:Number = stage.stageWidth / 2; var vanishingPointY:Number = stage.stageHeight / 1.1; //3D пол для картинок var floor:Number = 20; //Мы вычисляем угловую скорость в слушателе ENTER_FRAME var angleSpeed:Number = 0; //радиус круга var radius:Number = 180; //Определим путь к XML файлу. //Вы можете использовать мой путь или ваш собственный. var xmlFilePath:String = "3D-carousel-settings.xml"; //Мы сохраним загружаемый XML в переменную var xml:XML; //Этот массив будет содержать все контейнеры картинок var imageHolders:Array = new Array(); //Мы хотим знать, сколько картинок было загружено var numberOfLoadedImages:uint = 0; //Общее число картинок в соответствии с XML файлом var numberOfImages:uint = 0; //Загружаем XML файл. var loader = new URLLoader(); loader.load(new URLRequest(xmlFilePath)); //Мы вызываем функцию xmlLoaded() когда загрузка закончилась. loader.addEventListener(Event.COMPLETE, xmlLoaded); //Эта функция вызывается, когда XML файл загружен function xmlLoaded(e:Event):void { //Создаем новый XML объект из загруженных XML данных xml = new XML(loader.data); xml.ignoreWhitespace = true; //Вызывем функцию, которая загружает картинки loadImages(); } //Эта функция загружает и создает контейнеры для картинок, определенных в 3D-carousel-settings.xml function loadImages():void { //Получим общее число картинок из XML файла numberOfImages = xml.number_of_images; //Цикл по всем картинкам, найденным в XML файле for each (var image:XML in xml.images.image) { //Создаем новый контейнер картинки var imageHolder:MovieClip = new MovieClip(); //Создаем загрузчик для загрузки картинки var imageLoader = new Loader(); //Добавим загрузчик картинки к контейнеру картинки imageHolder.addChild(imageLoader); //Мы не хотим отлавливать никикие события мыши из загрузчика imageHolder.mouseChildren = false; //Положение imageLoader такое, что точка регистрации контейнера - в центре imageLoader.x = - (IMAGE_WIDTH / 2); imageLoader.y = - (IMAGE_HEIGHT / 2); //Запомним ссылку для imageHolder imageHolder.linkTo = image.link_to; //Добавим imageHolder в массив imageHolders imageHolders.push(imageHolder); //Загружаем картинку imageLoader.load(new URLRequest(image.url)); //Слушаем когда картинка грузится imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); } } //Эта функция вызывается, когда картинка грузится function imageLoaded(e:Event):void { //Изменяем число загруженных картинок numberOfLoadedImages++; //Установим bitmap smoothing в true для картинки (мы знаем, что загруженное содержимое - это bitmap). e.target.content.smoothing = true; //Сделаем проверку, загружена ли последняя картинка if (numberOfLoadedImages == numberOfImages) { //установим карусель initializeCarousel(); } } //Эта функция вызывается, когда все картинки загружены. //Теперь мы готовы создать 3D карусель. function initializeCarousel():void { //Вычисляем угол между картинками (в радианах) var angleDifference:Number = Math.PI * (360 / numberOfImages) / 180; //Цикл по всем картинкам for (var i:uint = 0; i < imageHolders.length; i++) { //Присвоим imageHolder локальной переменной var imageHolder:MovieClip = (MovieClip)(imageHolders[i]); //Получаем угол для картинки (мы равномерно делаем интервалы между картинками) var startingAngle:Number = angleDifference * i; //Положение для imageHolder imageHolder.xpos3D = radius * Math.cos(startingAngle); imageHolder.zpos3D = radius * Math.sin(startingAngle); imageHolder.ypos3D = floor; //Установим атрибут "currentAngle" для imageHolder imageHolder.currentAngle = startingAngle; //Вычисляем коэффициент масштабирования для imageHolder (чем дальше картинка -> тем меньше масштаб) var scaleRatio = focalLength/(focalLength + imageHolder.zpos3D); //Масштабируем imageHolder в соответствии с scale ratio imageHolder.scaleX = imageHolder.scaleY = scaleRatio; //Установим альфа для imageHolder imageHolder.alpha = 1; //Мы хотим знать, когда мышь над imageHolder и когда уходит с imageHolder imageHolder.addEventListener(MouseEvent.MOUSE_OVER, mouseOverImage); imageHolder.addEventListener(MouseEvent.MOUSE_OUT, mouseOutImage); //Мы также хотим прослушать все клики imageHolder.addEventListener(MouseEvent.CLICK, imageClicked); //Положение imageHolder на сцене(из 3D в 2D координаты) imageHolder.x = vanishingPointX + imageHolder.xpos3D * scaleRatio; imageHolder.y = vanishingPointY + imageHolder.ypos3D * scaleRatio; //Добавляем imageHolder на сцену addChild(imageHolder); } //Добавляем ENTER_FRAME для поворота addEventListener(Event.ENTER_FRAME, rotateCarousel); } function rotateCarousel(e:Event):void { //Вычисляем угловую скорость angleSpeed в соответствии с положением мыши angleSpeed = (mouseX - vanishingPointX) / 9096; //Цикл по картинкам for (var i:uint = 0; i < imageHolders.length; i++) { //Присвоим imageHolder локальной переменной var imageHolder:MovieClip = (MovieClip)(imageHolders[i]); //Изменим текущий угол для imageHolder imageHolder.currentAngle += angleSpeed; //Установим новое 3D положение для imageHolder imageHolder.xpos3D=radius*Math.cos(imageHolder.currentAngle); imageHolder.zpos3D=radius*Math.sin(imageHolder.currentAngle); //Вычисляем коэффициент масштабирования var scaleRatio = focalLength/(focalLength + imageHolder.zpos3D); //Масштабируем imageHolder в соответствии с коэффициентом масштабирования imageHolder.scaleX=imageHolder.scaleY=scaleRatio; //Изменяем координаты imageHolder imageHolder.x=vanishingPointX+imageHolder.xpos3D*scaleRatio; imageHolder.y=vanishingPointY+imageHolder.ypos3D*scaleRatio; } //Вызываем функцию, которая сортирует картинки так, что они корректно накладываются друг друга sortZ(); } //Эта функция упорядочивает картинки таким образом, что они корректно перекрывают друг друга function sortZ():void { //Сортировка массива таким образом, что картинка, имеющая самое высокое //положение z (= самая дальняя) будет первой в массиве imageHolders.sortOn("zpos3D", Array.NUMERIC | Array.DESCENDING); //Установим новые дочерние индексы для картинок for (var i:uint = 0; i < imageHolders.length; i++) { setChildIndex(imageHolders[i], i); } } //Эта функция вызывается, когда мышь находится над imageHolder function mouseOverImage(e:Event):void { //Установим альфа в 1 e.target.alpha=1; } //Эта функция вызывается, когда мышь уходит с imageHolder function mouseOutImage(e:Event):void { //Установим альфа в 0.3 e.target.alpha=0.3; } //Эта функция вызывается,когда происходит клик по imageHolder function imageClicked(e:Event):void { //Навигация на URL, который в переменной "linkTo" navigateToURL(new URLRequest(e.target.linkTo)); } Последний раз редактировалось m1o; 27.05.2009 в 19:16. |
|
|||||
|
вероятнее всего константы не работают по причине того что скрипт пытается отресайзить СВФ-ку по событию Event.COMPLETE, вместо Event.INIT
Хотя без исходников сложно сказать что-нибудь... Добавлено через 37 минут константы IMAGE_WIDTH и IMAGE_HEIGHT у вас используются только для того чтобы позиционировать контейнер... сделайте свф-ки размером 70*70 или замените IMAGE_WIDTH и IMAGE_HEIGHT на правильный размер свф-ок |
|
|||||
|
Регистрация: May 2009
Сообщений: 5
|
выходит что константы не ресайзят?
это плохо( хотелось чтобы у ролика в контейнере и ролика на который осуществляется переход из по клику на контейнер был один источник. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|