Непрерывное вращение изображения

Я хочу непрерывно вращать изображение при загрузке страницы. Код отлично работает для 1 поворота при загрузке страницы, но для непрерывного достижения того же эффекта я включил оператор .play() в бесконечный цикл while, как показано ниже. Но это приводит к тому, что страница зависает, и ничего не появляется.

while (i == 1)
{
    if (rotEff.isPlaying != true)
    {
        rotEff.play();
    }
}

Любые указания о том, как добиться этого эффекта, будут очень полезны.


person sandy    schedule 10.07.2011    source источник


Ответы (3)


Попробуйте установить для свойства repeatCount вашего объекта Effect значение 0, чтобы оно повторялось бесконечно:

<fx:Declarations>
    <s:Rotate id="rotate" target="{image}" angleBy="360" duration="1000" repeatCount="0" autoCenterTransform="true"></s:Rotate>
</fx:Declarations>

[ОБНОВЛЕНИЕ]

В ответ на комментарий Сэнди:

спасибо taurayi... установка RepeatCount решила проблему.. Однако есть небольшая задержка перехода от одного полного 360 раунда к другому... возможно ли избавиться и от этого...?

Установите для свойства easer значение null следующим образом:

<fx:Declarations>
    <s:Rotate id="rotate" target="{image}" angleBy="360" duration="1000" repeatCount="0" autoCenterTransform="true" easer="{null}"></s:Rotate>
</fx:Declarations>
person Taurayi    schedule 10.07.2011
comment
спасибо taurayi... установка RepeatCount решила проблему.. Однако есть небольшая задержка перехода от одного полного 360 раунда к другому... возможно ли избавиться и от этого...? - person sandy; 11.07.2011

Очень простой. Просто настройте прослушиватель ввода кадра для работы при загрузке (не используйте анимацию на временной шкале).

obj.addEventListener(Event.ENTER_FRAME, doRotate);

function doRotate(e:Event):void{
    obj.rotation += 1; //in whatever direction / orientation / increment you wish
}

когда загрузка завершена, просто удалите слушателя.

person Bosworth99    schedule 10.07.2011
comment
этот объект является объектом изображения...? Можете ли вы объяснить это больше, как это сделать ...? Мне нужно добавить список событий при завершении создания и как его удалить... - person sandy; 10.07.2011
comment
obj — это имя экземпляра любого объекта (видеоклипа, растрового изображения и т. д.), который вы хотите переместить. Добавьте его сразу после того, как вы добавите экземпляр в список отображения (на сцену), и когда все, что загружается, завершит процесс загрузки, просто obj.removeEventListener(Event.ENTER_FRAME, doRotate); удалите его. ас3 101. - person Bosworth99; 10.07.2011
comment
хммм ... раньше я использовал класс поворота в сценарии действия, чтобы установить изображение для поворота от центра. публичная функция rotateImgEffect(img:Image):void{ var rotEff:Rotate = new Rotate(); //img — идентификатор компонента изображения в файле MXML rotEff.target = img; rotEff.originX = ширина изображения/2; rotEff.originY = img.height/2; rotEff.duration = 5500; rotEff.angleFrom = img.rotation; rotEff.angleTo = img.rotation + 360; rotEff.play(); } Как я могу установить это сейчас...? - person sandy; 10.07.2011
comment
а также, если я удалю список событий, изображение просто останется статичным после начального небольшого перехода - person sandy; 10.07.2011
comment
@ Bosworth99 Я думаю, между вами двумя может возникнуть небольшая путаница, потому что вы можете иметь в виду проект AS3, тогда как Сэнди может иметь в виду проект Flex, но я могу ошибаться. - person Taurayi; 10.07.2011
comment
это анимация старой школы, основанная на кадрах, я предлагаю использовать временную анимацию, чтобы частота кадров не влияла на вращение. @Taurayi - он помечен как гибкий, и с использованием экземпляра rotateEffect он, вероятно, действительно гибкий. - person Nate; 11.07.2011
comment
Эх - точно. Да, определенно помечен Flex. Хотя сам пост можно было бы прочитать как 3 (если бы кто-то ответил на него до того, как они выпили кофе ;) Лол. В любом случае... @Taurayi все правильно понял. - person Bosworth99; 11.07.2011
comment
@Bosworth, честно говоря, я бы не понял, если бы не читал комментарии. Первоначально я собирался ответить тем же ответом, что и ваш, но когда я увидел код в комментарии Сэнди (3-й комментарий), я понял, что это больше похоже на использование эффектов на IVisualElement объектах в гибкой структуре. - person Taurayi; 11.07.2011

Если это приложение Flex, я бы рекомендовал вам использовать объект Timer.

person Yordan Yanakiev    schedule 11.07.2011