Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 27.05.2009, 18:40
m1o вне форума Посмотреть профиль Отправить личное сообщение для m1o Найти все сообщения от m1o
  № 1  
Ответить с цитированием
m1o
 
Аватар для m1o

Регистрация: May 2009
Сообщений: 5
Flame замена png на swf для заполнения контейнеров

в уроке есть скрипт (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 ?

Код AS3:
//Мы используем картинки размером 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.
Создать новую тему   Часовой пояс GMT +4, время: 21:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.