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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.07.2012, 11:56
pestryakov вне форума Посмотреть профиль Отправить личное сообщение для pestryakov Посетить домашнюю страницу pestryakov Найти все сообщения от pestryakov
  № 1  
Ответить с цитированием
pestryakov

Регистрация: Jun 2004
Сообщений: 33
Отправить сообщение для pestryakov с помощью ICQ
По умолчанию Загрузка графики в мувиклип

Первый раз сталкиваюсь с подобной задачей, и что-то не пойму как поступить.

В приложении реализована вся необходимая логика геймплея, есть все необходимые мувиклипы.
Теперь задача стоит в том чтобы на разных уровнях менять графику в определенных мувиклипах. Т.к. графики много, то возникла необходимость делать подгрузку индивидуально для каждого уровня.
Так вот, муви клип который содержит 1 леер с 1 кадром, в нем лежит 1 схематичная картинка (просто вложенная руками из библиотеки флэша).
Я бы хотел подгружать SWF в котором лежит несколько картинок, и заменять их на текущие схематичные картинки, которые находятся в мувиклипе по умолчанию.

Т.е. не могу найти как сделать программный swap картинки в мувиклипе из подгружаемого swf.

Если знаете как это сделать, подскажите пожалуйста.

Добавлено через 31 минуту
Тут видимо из загружаемого swf нужно делать каким то образом массив битмап картинок, которые потом можно будет положить в мувиклип. Есть идеи как можно сделать такой массив?

Добавлено через 3 часа 8 минут
если в SWF находится одна картинка то загрузить не проблема, я не могу найти способ получить доступ к библиотеки внешнего SWF если там много картинок. Помогите пожалуйста.

Старый 04.07.2012, 15:34
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 2  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Цитата:
Сообщение от pestryakov Посмотреть сообщение
Я бы хотел подгружать SWF в котором лежит несколько картинок, и заменять их на текущие схематичные картинки, которые находятся в мувиклипе по умолчанию.
Или я не правильно понял задачу или всё действительно просто.
Логика такая.
У Вас есть:
- Загрузчик, который грузит skins.swf с клипами, картинками и видео.
- Есть парсер, который разбирает загруженный skins.swf на модули и добавляет на сцену всё, что необходимо из загруженного клипа.

Если необходимо поменять набор скинов - грузите другой skins_new.swf с теми же названиями клипов, картинок и т.п. но контент там другой.

Это решение может подойти?

Добавлено через 2 минуты
Цитата:
Сообщение от pestryakov Посмотреть сообщение
Добавлено через 3 часа 8 минут
если в SWF находится одна картинка то загрузить не проблема, я не могу найти способ получить доступ к библиотеки внешнего SWF если там много картинок. Помогите пожалуйста.
Сорри, не заметил этого сообщения. Буду за компом - скину пример.
__________________
http://artem-lobachenkov.ru/

Старый 04.07.2012, 15:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
В идеале, чтобы всё было упорядочено и предсказуемо, skin.swf должна иметь классом документа определенный класс (а лучше Интерфейс), в котором явно прописаны все необходимые геттеры на все ресурсы, которые такой файл скина должен содержать. Тогда и "разбирать" его проще, напрямую обращаясь к нужным свойствам, и контроль и порядок будут гарантированы. Если использовать Интерфейс, скажем ILevelSkin, то сами классы swf-ок могут быть и разными, но главное что это проще для основной флэшки — не надо импортировать конкретный класс (хотя, с другой стороны, какой-то первый дефолтный скин все-равно наверное будет содержаться в основной флэшке, хотя и необязательно).
__________________
Reality.getBounds(this);

Старый 04.07.2012, 16:06
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 4  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Прислушайтесь к совету Wolsh.

Набросал код.
Код AS3:
package
{
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.utils.getDefinitionByName;
 
	public class TestLoading extends Sprite
	{		
		protected var loader:Loader = new Loader();
		protected var skinsAppDomain:ApplicationDomain = new ApplicationDomain();
 
		public function TestLoading()
		{
			this.init();	
		}
 
		private function init():void
		{
			this.load();
		}
 
		private function load():void
		{			
			var context:LoaderContext = new LoaderContext(false, this.skinsAppDomain);			
			//
			this.loader.contentLoaderInfo.addEventListener(Event.INIT, this.onLoaded);
			this.loader.load( new URLRequest('skins.swf'), context );
		}
 
		protected function onLoaded(event:Event):void
		{
			// Symbol2 это Linkage-Class клипа во флешке skins.swf
			var SymbolFromLibrary:Class = this.skinsAppDomain.getDefinition('Symbol2') as Class;
			var clipFromLibrary:MovieClip = new SymbolFromLibrary();
			super.addChild(clipFromLibrary);
		}
	}
}
__________________
http://artem-lobachenkov.ru/

Старый 04.07.2012, 16:20
pestryakov вне форума Посмотреть профиль Отправить личное сообщение для pestryakov Посетить домашнюю страницу pestryakov Найти все сообщения от pestryakov
  № 5  
Ответить с цитированием
pestryakov

Регистрация: Jun 2004
Сообщений: 33
Отправить сообщение для pestryakov с помощью ICQ
Ребята спасибо, уже нарыл подобное решение.
Т.к. я хочу обойтись без внешних классов, делаю все в одном документКлассе - решил спрайты конвертировать в мувиклипы чтобы не пришлось ничего расширять. Получилось следующим образом:

Код AS3:
var blockClass:Class = e.target.applicationDomain.getDefinition("bl1"); // класс блока из загруженного SWF
var box:MovieClip = new blockClass();
addChild(box);

Старый 04.07.2012, 16:26
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
никакой конвертации при этом не произойдёт. Если в blockClass именно спрайт, то будет рантайм еррор при попытке присвоения спрайта в переменную мувиклипа.
__________________
:)

Старый 04.07.2012, 16:30
pestryakov вне форума Посмотреть профиль Отправить личное сообщение для pestryakov Посетить домашнюю страницу pestryakov Найти все сообщения от pestryakov
  № 7  
Ответить с цитированием
pestryakov

Регистрация: Jun 2004
Сообщений: 33
Отправить сообщение для pestryakov с помощью ICQ
Если полностью отобразить функцию лоадера, то получится следующее: (будет полезно для новичков как я ):
Код AS3:
private function loaderBlocks():void
{
	var loader:Loader = new Loader(); //создаем лоадер
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); // проверяем полную загрузку, чтобы добавить загруженный объект
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); // устанавливаем слушатель прогресса
	loader.load(new URLRequest("res/blocks-3x3_0.swf")); //загружаем необходимый swf файл
	function onComplete(e:Event):void
	{
		var blockClass:Class = e.target.applicationDomain.getDefinition("b1"); // класс блока из загруженного SWF, указывается в AS Linkage
		var block:MovieClip = new blockClass();
		addChild(block); // или ставите куда потребуется
	}
	function onProgress(e:ProgressEvent):void
	{
		trace (e.target.bytesLoaded/e.target.bytesTotal); // расчитываем процент загрузки лоадера
	}
}


Последний раз редактировалось pestryakov; 04.07.2012 в 16:32.
Старый 04.07.2012, 16:33
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 8  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
вложенные функции то зачем?
__________________
:)

Старый 04.07.2012, 18:04
pestryakov вне форума Посмотреть профиль Отправить личное сообщение для pestryakov Посетить домашнюю страницу pestryakov Найти все сообщения от pestryakov
  № 9  
Ответить с цитированием
pestryakov

Регистрация: Jun 2004
Сообщений: 33
Отправить сообщение для pestryakov с помощью ICQ
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
никакой конвертации при этом не произойдёт. Если в blockClass именно спрайт, то будет рантайм еррор при попытке присвоения спрайта в переменную мувиклипа.
я ее произвел руками - спрайт превратил в мувиклип - F8.

Старый 04.07.2012, 18:05
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 10  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
если так то всё ок
__________________
:)

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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