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

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

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

Регистрация: Dec 2009
Сообщений: 25
Question как заменить шейпы/спрайты в анимации из внешней SWF-ки?

Добрый день!

Описываю ситуацию. Имеется скелет анимации, созданный в среде Flash, таким образом, что на сцене помещается несколько объектов типа Graphic, каждый из которых внутри содержит несколько MovieClip-ов. Каждый MovieClip содержит от одного до нескольких Shape-ов, соответствующих разным вариантам отображения элементов скелета. Затем эти объекты анимируются средствами объектов Graphic (т.е. таймлайн меняется не у MovieClip-ов, а у Graphic-ов). После чего эта сцена экспортируется в SWF-ку. Эта SWF-ка должна подгружаться Flex-овским приложением, в котором в завимиости от условий все Shape-ы загруженной SWF-ки должны быть заменены на соответствующие спрайты (скины), чтобы из одного скелета можно было получить несколько разных персонажей.

Проблема появляется когда я подгружаю SWF-ку с анимацией (динамически loader-ом) во Flex-овское приложение, рекурсивно пробегаю по всем объектам на сцене и заменяю все нужные объекты спрайтами (по имени instance-а). Выясняется, что иерархия в этой SWF-ке не такая: объекты типа Graphic в ней отсутствуют, т.е. на сцену сразу помещаются MovieClip-ы, но только те, которые присутстуют в первом кадре. По мере проигрывания в ключевых кадрах анимации MovieClip-ы на сцене меняются: одни добавляются, другие удаляются, причем именно удаляются, а не скрываются, т.к. в кадрах, в которых участуют те же спрайты, что и в первом, удаленные мной Shape-ы снова рисуются. И более того, при зацикливании анимации, когда она возвращается на первый кадр, моих спрайтов там уже нет, всё возвращается в исходное состояние.

Без использования Graphic-ов (т.е. если анимируются непосредственно MovieClip-ы) всё работает отлично, но переделывать уже готовые анимации представляется довольно сложной задачей, которой хотелось бы избежать.

так вот вопрос как, собственно, заменить шейпы моими спрайтами?

я пытался в качестве эксперимента подписаться на событие ENTER_FRAME и заменять спрайты в каждом кадре. результаты это, конечно, дало (если не обращать внимания на высоковатую загруженность CPU), но вылезла еще одна проблема. Дело в том, что аниматор использовал одни и те же шейпы в нескольких местах (например, если у персонажа 4 ноги, для каждой из них может использоваться один и тот же шейп), что не дает возможности просто прицепить MovieClip-ам на сцене спрайты скинов (типа mc.addChild(skin)), т.к. спрайт в каждый момент времени может быть дочерним объектом только одного DisplayObjectContainer-а

идеальным выходом видется замена не instance-ов на сцене, а их символов в библиотеке загруженной SWF-ки. (ситуащия как бы противоположная описанной тут: http://newmovieclip.wordpress.com/20...-in-flash-cs3/)
Такая возможность вообще существует?
или может есть какие-то другие решения?

Старый 13.05.2010, 21:25
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Я как-то так делал:
- cоздается пустой MovieClip в библиотеке (начнем с ноги)
- импортируется некое изображение ноги
- в пустой мувиклип запихивается наше изображение
- изображению внутри клипа-контейнера задаются координаты x = 0, y = 0
- ... повторяем операцию, создавая контейнер (пустой mc) и контент (изображение) и помещая одно в другое
- создаем еще один мувик в библиотеке, называем его Skeleton и прописываем класс Skeleton
- внутри Skeleton перетаскиваем наши контейнеры (именно контейнеры с картинками, а не сами картинки)
- каждый контейнер в Skeleton как-то обзываем (instance-name)
- производим анимацию наших "частей тела"
...
- тупо удаляем из библиотеки наши картинки =)

В итоге мы имеем анимированные контейнеры.
Далее создаем класс Skeleton.as, внутри которого пишем что-то типа:
Цитата:
public class Skeleton extends MovieClip {

public var leg: DisplayObject; // контейнер для ноги
...

public function Skeleton() {

super();

this.leg = this.getChildByName("имя контейнера для ноги (instance-name)");

}

}
Теперь мы можем простым skeleton.leg.addChild() добавить дюбой скин в нужную часть тела
__________________
...вселенская грусть

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вот здесь я как раз по такой технологии делал)) Если на пацанов кликать - меняется скин. (над походкой не ржать!)
__________________
Reality.getBounds(this);

Старый 14.05.2010, 01:15
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Собственно картинки можно не удалять, а оставить какие-нибудь dummy конечности, для удобства просмотра и редактирования. А в конструкторе скелета просто чистить контейнеры. Этот прием используется в стандартных флэшовых компонентах.
__________________
тонкий тролль, осеянный благодатью

Старый 14.05.2010, 14:56
erectus вне форума Посмотреть профиль Отправить личное сообщение для erectus Найти все сообщения от erectus
  № 5  
Ответить с цитированием
erectus

Регистрация: Dec 2009
Сообщений: 25
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
....
- создаем еще один мувик в библиотеке, называем его Skeleton и прописываем класс Skeleton
....
собственно вопрос в том, как добиться такого же эффекта, если Skeleton является НЕ MoviClip-ом, а Graphic-ом... потому что переделывать готовую анимацию очень накладно.

хотя, если других вариантов нет, видимо придется

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Один вопрос - что такое Graphic?
Судя по тому что в нем есть таймлайн - это какой-то класс-наследник МувиКлипа?
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
как добиться такого же эффекта
Тупо щелкнуть по Graphic в библиотеке и поменять тип символа на MovieClip
__________________
...вселенская грусть

Старый 14.05.2010, 16:01
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 8  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Wolsh
Цитата:
Судя по тому что в нем есть таймлайн - это какой-то класс-наследник МувиКлипа?
У graphics-а есть таймлайн???

Старый 14.05.2010, 16:05
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 9  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от proxiServer Посмотреть сообщение
Wolsh

У graphics-а есть таймлайн???

Ыыыы... смешная тема - каждый думает о чем-то своем)))))))
__________________
скриптограф

Старый 14.05.2010, 16:07
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 10  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
Оу... Все, конец рабочей недели сказался))) отменяю вопрос.

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

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

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


 


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


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