Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Как заменить объект внутри клипа в сложной анимации? (http://www.flasher.ru/forum/showthread.php?t=192204)

caseyryan 10.01.2013 10:45

Как заменить объект внутри клипа в сложной анимации?
 
Никогда раньше не доводилось работать с таким типом персонажей, и тут я зашел в тупик просто.
Вобщем ситуация такая: мне прислали fla файл со сложной анимацией персонажа. В анимации 10 - 15 слоев, на каждом слое находится какая-то одна часть персонажа, например голова или рука. Эта часть представляет из себя объект Graphics (дизайнер далек от программирования, поэтому не сделал сразу как надо ) ). На каждом слое множество ключевых кадров, поэтому мне приходится в каждом ключевом кадре переделывать объект в MovieClip и давать ему instance name (что конечно дико напрягает, но писать jsfl скрипт будет дольше, чем вручную переименовать), но проблема даже не в этом.

Допустим задал я торсу персонажа имя экземпляра torso на первом ключевом кадре, потом у себя в коде мне нужно добавить к торсу бронежилет. Первое что пришло в голову - просто удалить ребенка на нулевом индексе и добавить туда бронежилет.
Но не тут то было. Естественно при проигрывании анимации бронежилет останется только на первом кадре. Т.е. добавлять его прийдется в каждом кадре, что больше походит на костыль. Вторая идея была заменить растровые данные. Но getChildAt(0) возвращает Shape, а не Bitmap, хотя во флещке они добавлены как png картинки.

Вопрос, как лучше сделать, чтобы можно было заменять внешний вид этих частей? В самой adobe flash я не очень соображаю, в основном работаю с кодом.

mooncar 10.01.2013 11:19

Если я правильно понял суть трудности и речь идет о символе Graphics, попробуй так:
1. Находишь в библиотеке этот символ. Открываешь его для редактирования.
2. Выделяешь всю начинку и преобразовываешь в мувик по F8 *. Получается мувик, вложенный в Graphics. Это ключевой момент решения. Задаешь мувику имя экземпляра.
Теперь не надо везде руками что-то менять по всему проекту. Везде, где на сцене есть этот символ, начинка изменится соответственно - во всех ключевых кадрах будет присутствовать видоизмененный символ, внутри которого есть мувик, к тому же с нужным имением экземпляра.**
3. Теперь в этот символ ты можешь добавить также какой-то дополнительный элемент. Как очевидно - дополнительный элемент появится во всех экземплярах.

---------
* Можно, если что, эту начинку раскидать по слоям автоматически - в контекстном меню есть такой пункт.
** Это имя будет доступно в той же общей области видимости, поскольку символы Graphics не вносят изменения в путь, а служат, по большому счету, только для группировки и образования дополнительного таймлайна.

FlashRus 10.01.2013 11:34

Как на счёт расширений?

http://flash-animated.com/plaginy-dl...lash-extension

смотреть в сторону "Milti Swap" и "Multi Name"

spirit2 10.01.2013 11:58

Ну если слоев 10-15, а перс 1, можно ж просто вырезать слои с таймлайна по одному и вставить в новые клипы.

caseyryan 10.01.2013 13:01

spirit2, я это уже сделал, проблема малость в другом. Мне надо внутри подвижных частей графику менять с помощью кода, а не во флеш иде.
mooncar, в мувиклипы я их конвертирую, с этим никаких проблем (за исключением того, что много где приходится вручную конвертировать), но в том и проблема, что при проигрывании анимации как только доходит до ключевого кадра, все в нем будет по умолчанию, и никакого моего объекта добавлено не будет. Т.е. для программы это совершенно другой экземпляр.
Интересно почему этот шейп нельзя битмапом сделать...
FlashRus, что-то даже не вижу каким образом здесь может понадобиться этот плагин

mooncar 10.01.2013 13:07

Цитата:

Сообщение от caseyryan (Сообщение 1114839)
mooncar, в мувиклипы я их конвертирую, с этим никаких проблем (за исключением того, что много где приходится вручную конвертировать), но в том и проблема, что при проигрывании анимации как только доходит до ключевого кадра, все в нем будет по умолчанию, и никакого моего объекта добавлено не будет. Т.е. для программы это совершенно другой экземпляр.

Может быть я неправильно понял, но я имел ввиду вносить изменения именно в старый символ, экземпляры которого уже находятся на нужных местах, просто залезть в него в библиотеке и отредактировать. Изменения коснутся всех экземпляров этого символа, находящихся на сцене. На которой ничего заменять не придется.

udaaff 10.01.2013 13:13

Не знаю, единственно верное ли это решение, но надо было делать анимацию motion tween'ом. Причем анимировать не сам элемент, а контейнер, и в контейнере уже заменять графику.

iflamberg 10.01.2013 13:47

Код AS3:

 Мне надо внутри подвижных частей графику менять с помощью кода, а не во флеш иде.

Ну как самый простой способ, раз уж ты конвертировал графику в мувики, то почему бы не сделать так:
вот мувик с анимацией персонажа "character", в нем именованный мувик торса "torso". Тогда в первом кадре мувика torso пусть будет голый торс, во втором кадре - торс в бронике и т.д. Тогда для того, чтобы сменить голый торс на одетый надо просто выполнить character.torso.gotoAndStop(2); вот так, скажем, в Sonny сделано.

Второй способ. Пишем jsfl скрипт для flash ide, который проходится по каждому кадру анимации и собирает для каждого кадра для каждого мувика вектор положения, масштаб, альфу - короче всю анимируемую инфу для каждого мувика в каждом слое, и пишет в, не знаю, xml или json, какой-нибудь свой формат. Потом эти данные переносим в нашу игрушку и просто программно покадрово анимируем нашего персонажа, руководствуясь данными, заменяя при этом мувики как надо. Такой способ подойдет для более сложных анимаций, где, скажем клип torso то появляется, то исчезает.

caseyryan 10.01.2013 13:48

Цитата:

Не знаю, единственно верное ли это решение, но надо было делать анимацию motion tween'ом. Причем анимировать не сам элемент, а контейнер, и в контейнере уже заменять графику
Анимация и так делалась с помощью твинов. Ключевые кадры при этом никуда не делись, и в них по прежнему каждому символу надо давать инстанс нейм. При этом замена графики в одном символе не заменяет ее во всех его экземплярах.
Цитата:

экземпляры которого уже находятся на нужных местах, просто залезть в него в библиотеке и отредактировать.
Это понятно, но мне-то нужно динамически ее менять. Допустим купил игрок новый наплечник, он бац, добавился к персонажу. У меня во флеш девелоп есть только swc библиотека с персонажем.

Цитата:

вот мувик с анимацией персонажа "character", в нем именованный мувик торса "torso". Тогда в первом кадре мувика torso пусть будет голый торс, во втором кадре - торс в бронике и т.д. Тогда для того, чтобы сменить голый торс на одетый надо просто выполнить character.torso.gotoAndStop(2); вот так, скажем, в Sonny сделано.
Не вариант. Этот персонаж во-первых будет очень увесистым, что серьезно прибавит время загрузки игры, а во вторых это сведет к нулю все будущее масштабирование проекта. В моем случае я бы мог просто на сервер выложить какой-то новый предмет, и он бы динамически подгружался в игру, а так я буду вынужден каждый раз фла файл пересобирать.

С jsfl вариант не самый удобный, но как вариант оставлю. Если никак подругому сделать не получится.

mooncar 10.01.2013 13:50

Значит внутри Graphics сделать не один мувик, а еще один мувик-контейнер. Слоеный пирог.
Итого
Код:

Graphics //его экземпляры везде
 └ MovieClip (instance-name1) //к этому обращаться
  └ MovieClip (instance-name2) //это динамически менять

Не?

Цитата:

При этом замена графики в одном символе не заменяет ее во всех его экземплярах.
Как-то не понятно. Если изменить в либе один конкретный символ, то все его экземпляры на сцене изменятся соответственно.


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

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