Есть ли документация о том, как flash управляет именованными экземплярами в ключевых кадрах? - PullRequest
1 голос
/ 03 марта 2011

Я ищу техническую документацию о том, как Flash управляет экземплярами объектов с одинаковыми именами в ключевых кадрах.

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

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

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

Аналогичный вопрос о «непрерывности экземпляров шкалы времени»: http://www.kirupa.com/forum/showthread.php?t=316612 Я тоже был удивлен, что свойства переносятся. Это похоже на функцию времени выполнения, где Flash создаст новый экземпляр, только если пара (имя экземпляра / тип символа) изменится в следующем ключевом кадре (т. Е. Если именованный экземпляр "obj" ссылается на "шар" в обоих ключевые кадры, тогда он останется тем же экземпляром, но если «obj» ссылается на «квадрат» в следующем ключевом кадре, то будет создан новый экземпляр «квадрат»). Это имеет смысл, но гарантируется ли такое поведение?

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

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

Пока что объект с одинаковым именем экземпляра в разных ключевых кадрах вызывает новые экземпляры длябыть созданным, только когда у нас есть:

  1. другой тип символа или
  2. тот же тип символа и другой слой
  3. перейти к промежуточному ключевому кадру, который несодержат объект

Другими словами, пока имя экземпляра, тип символа и слой, на котором находится объект, остается неизменным от кадра к кадру, и каждый кадр содержит именованный экземпляр, затем фильтрует иодно только преобразование не приведет к созданию новых экземпляров.

Все становится интересным, когда задействован ActionScript.

--- Если вы УДАЛЯЕТЕ ОБЪЕКТ С ПИСАНОМ :---

То же имя экземпляра, тот же тип символа, тот же слой:

  1. Если вы удалите объект с помощью removeChild в кадре 1, затем в кадре 2нет нового О.Б.Ject создан.Фактически, старый объект все еще существует, но он не виден, и НИЧЕГО из преобразований из кадра 2 не применяется (т. Е. Объект сохраняет свой исходный размер, фильтры и т. Д.).
  2. Если удалить объект с помощьюremoveChild в кадре 1, а затем немедленно повторно добавьте объект, затем он сохраняется и отображается в кадре 2, но все еще НЕТ преобразований из кадра 2 применяются (т. е. объект сохраняет свой первоначальный размер, фильтры и т. д.).

То же имя экземпляра, тот же тип символа, другой слой:

  1. Если вы удалите объект, новый объект будет создан навторой кадр, как и ожидалось, так как он был на другом слое.Нахождение на слое difnet - это почти гарантия того, что новый объект будет создан, как вы увидите из следующего оператора ...

  2. Если вы удалите объект, немедленно добавьте его снова(removeChild (obj); addChild (obj);), тогда вы получите DUPLICATE, потому что новый экземпляр с новыми преобразованиями в кадре 2 все еще создается И оригинальный объект остается (тогда как если вы его не удалили / добавили,изменение ключевого кадра уничтожило бы его).

Сводка

В ключевых кадрах единственные вещи, которые инициируют создание нового объекта с тем же именем экземпляраесли объект имеет другой тип символа или находится на другом слое, или вы посещаете ключевой кадр, который не содержит объект, а затем возвращаетесь к тому, который имеет.Ничто иное не приведет к созданию нового экземпляра.Удаление объекта с помощью ActionScript (даже если вы немедленно повторно добавите его), приведет к тому, что проигрыватель НЕ будет применять новые преобразования ключевых кадров к объекту, но сам по себе не вызовет создание нового экземпляра.

1 голос
/ 04 марта 2011

Я никогда не видел этого официально зарегистрированного, так как я начал с AS во Flash 5.

Ваши наблюдения совпадают с моими, но другой случай - это "то же имя, тот же тип, новый ключевой кадр, другой слой", который повторно инициализирует объект в AVM1. Я не уверен, что делает AVM2, так как я действительно стараюсь избегать таких ситуаций, но это может быть достойным способом заставить MC переустановить время, если вам нужно.

1 голос
/ 03 марта 2011

Это не задокументированное поведение, но ваши наблюдения верны.Однако есть потенциальная загвоздка, которая может случиться с вами, если два ваших объекта с одинаковым именем экземпляра имеют несовместимые типы, и Flash может попытаться заставить второй (или все последующие) «быть» или попытаться действовать как первыйодин это нашел.Это может быть характерно для fp9, но поведение было «рубцеванием» достаточно, чтобы рекомендовать НИКОГДА не использовать два разных объекта с одинаковым именем экземпляра на одной временной шкале.

Возможно, вы захотите взглянуть на Эта запись в блоге о временном графике и именах экземпляров , которую я написал о предмете для более подробного освещения.

Еще одна вещь, которую я могу затронуть или не затронуть, это то, что это поведение также можетПринесите огромный хаос, если вы вложили звуки временной шкалы в любой видеоклип, который может быть «пропущен», если вы используете gotoAndStop / Play для «пропуска» вокруг временной шкалы.

...