2010-03-14 3 views
1

Я понимаю, что вы можете сделать один из каждого эффекта, установить ту же цель и нажать .play();, но это дает странные результаты (acknowledged by Adobe, fixed in Flex 4).Как вы комбинируете эффект перемещения и поворота в Flex 3?

Я пытаюсь переместить объект с верхней части экрана на дно, пока он вращается вокруг собственного центра. При вызове независимо оба этих эффекта работают отлично. Когда вызывается вместе, объект всегда вращается вокруг верхнего левого угла. Я даже попытался поместить их в тег <Parallel> без успеха. Кто-нибудь придумал обход?

+0

Позвольте мне угадать, является ли объект текстовым объектом? – Robusto

+0

Изображение, но я слышал ужасные истории ... Я бы сказал, что Flex 4 не скоро придет, но я скачал бета-версию SDK и получил вид присоски, поэтому кто знает. – Impirator

ответ

1

Я нашел решение затычка.

Проблема (как указано в моем ОП и в комментарии к Давиду), является то, что после того, как эффект Поворот завершен один полный цикл, если он был repeatCount=0 продолжать до бесконечности, это originX и originY значения получили сброс к регистрации (верхняя, левая) точка, что сделало весь внешний вид шатким.

Трюк, следовательно, заключается в том, чтобы не допустить полного цикла вращения. Если у вас есть

<mx:Image id="myImage" source="images/someImage.png" /> 
<mx:Rotate originX="{myImage.width/2}" originY="{myImage.height/2}" 
    angleFrom="0" angleTo="360" duration="2000" target="{myImage}" /> 

... то, что вам нужно сделать, это что-то вроде ...angleTo="360*100"... И ...duration="2000*100...

Установив angleTo свойство к чему-то очень высоко, он никогда не будет закончить один эффект Поворот перед удалением или перезапустите его и, следовательно, не сбросите originX и originY, и умножив duration на тот же коэффициент, что и angleTo, вы сохраните ту же скорость вращения, на которую надеетесь.

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

0

Вам нужно включить Move и Rotate внутри экземпляра Parallel, чтобы заставить их работать одновременно. Кроме того, для того, чтобы заставить Вращающийся эффект вращаться вокруг центра компонента, вам необходимо установить свойства originX и originY в центр вашей цели (свойства originX и originY определяют центральную точку вращения.)

examply следующие работы прекрасно:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
<mx:Image id='effectTarget' source="assets/waterfall.jpg" width="390" height="292" scaleContent="true" autoLoad="true"/> 
<mx:Parallel duration="5000" id="effectParallel"> 
    <mx:Move xFrom="0" xTo="500" yFrom="0" yTo="500" target="{effectTarget}"/> 
    <mx:Rotate originX="195" originY="149" angleFrom="0" angleTo="360" target="{effectTarget}"/> 
</mx:Parallel> 
<mx:Button x="856" y="27" label="Go" click="effectParallel.play()"/> 

+0

Давид, установите 'repeatCount' на Поворот на 0, чтобы он работал бесконечно. Для меня, после одного полного вращения 360, точки «originX» и «originY» получают сброс в верхнюю, левую (точку регистрации) изображения. Разумеется, я также использовал метод «originX =» {effectTarget/2} «типа», чтобы найти центр, так что, возможно, это имеет эффект. – Impirator

+0

Err, это должно быть 'originX =" {effectTarget.width/2} "' – Impirator

+0

Я все еще получаю вращение вокруг центральной точки, когда я повторяю неопределенно, только вращение, поворот и движение, и сама параллельная обертка , Я думаю, что ваша привязка - вот что вызывает проблему. Когда вы поворачиваете изображение, фактическая ширина и высота компонента меняются, чтобы скомпоновать повернутое изображение, так что это будет испортить начало. Попробуйте вычислить центр, установив статические значения для перемещения и поворота перед запуском эффекта, и если эффект повторится, то в случае события EffectEnd снова верните значения в статические числа. – David

Смежные вопросы