Анимация ребенка независимо от родителя - PullRequest
0 голосов
/ 09 февраля 2012

Мы создаем систему, в которой элементы в блоке отображения определяются через xml. Это также означает, что вся система носит динамический характер. Таким образом, нет способа узнать, будет ли с элементом связана анимация движения или нет.

    <element id="name" type="txt" top="0" txt="Black look down" left="0" width="145" height="35"......>
    <transitions>
        <navIn>
        <tween type="default" orientation="horizontal" direction="1" time=".4" delay=".2" stagger="0" ease="Quint.easeOut" />
       </navIn>
       <navOut>
        <tween type="default" orientation="vertical" direction="1" time=".4" delay="0" stagger="0" ease="Quint.easeIn" />
        </navOut>
    </transitions>
</element>

Обратите внимание, что вокруг него есть другие элементы, а также что для каждого элемента не требуется переход.

Мы видим, что этот элемент является текстовым элементом. Давайте рассмотрим (для простоты), что этот текстовый элемент находится внутри элемента box. Этот элемент box может содержать другие элементы, такие как текст (больше 1). С коробкой, вероятно, всегда будет связан переход. Теперь, если этот текстовый элемент также имеет переход, он должен работать независимо от переходов блока. Любые идеи о том, как этого можно достичь?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Я мог видеть причины (слои, видимость, mouseChildren и т. Д.), Что вы хотите, чтобы дочерний элемент принадлежал родителю, но не получал его геометрические преобразования.

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

В этом примере, который я поднял, родительский контейнер (красная точка) перемещается / поворачивается / масштабируется, а дочерний (синяя точка) остается статичным, потому что я создал контейнер между это легко инвертирует эффекты родительских преобразований, используя Matrix.invert (ПРИМЕЧАНИЕ: вычисления выполняются для каждого кадра). Вы могли бы сделать это без контейнера, но тогда вам нужно было бы позаботиться о том, как вы воспитали ребенка.

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

package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.geom.Matrix;
  import flash.utils.setInterval;

  [SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
  public class tst extends Sprite
  {

    public function tst():void
    {
      var prnt:Sprite = new Sprite();
      var cont:Sprite = new Sprite();
      var child:Sprite = new Sprite();

      prnt.addChild(cont);
      cont.addChild(child);

      prnt.graphics.beginFill(0xff0000);
      prnt.graphics.drawCircle(0, 0, 10);

      child.graphics.beginFill(0x0000ff);
      child.graphics.drawCircle(0, 0, 10);


      cont.addEventListener(Event.EXIT_FRAME, function(e:Event):void {
        var m:Matrix = prnt.transform.matrix.clone();
        m.invert();
        cont.transform.matrix = m;
      });

      var n:Number = 0;
      setInterval(function():void {
        prnt.x = 50+40*Math.cos(n);
        prnt.y = 50+40*Math.sin(n);
        prnt.scaleX = 3*Math.sin(n);
        prnt.rotation += 7*Math.cos(n);
        n += 0.1;
      }, 100);

      addChild(prnt);
    }
  }
}

Посмотри в действии .

0 голосов
/ 09 февраля 2012

Когда вы настраиваете параметр для родителя, он также будет применяться к дочерним элементам. (перемещение, масштабирование, вращение)

Таким образом, переход коробки будет всегда применяться всеми детьми. Но, конечно, они могут иметь свои собственные переходы. (Например, поле имеет переход «двигаться вверх», а текст - переход «двигаться влево», тогда текст будет перемещаться вверх и влево.)

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

...