Начинающий: динамическая вставка кадра в мувиклип в Haxe / ActionScript3 - PullRequest
2 голосов
/ 15 января 2009

Допустим, у меня есть файл ресурсов, который экспортирует mc1 с 4 кадрами в нем. Я хотел бы создать новый MovieClip и вставить кадры, как это:

mc2:flash.display.MovieClip = new flash.display.MovieClip()

mc1.gotoAndStop(2);
mc2.gotoAndStop(1);
mc2.currentFrame = mc1.currenctFrame
mc1.gotoAndStop(1);
mc2.gotoAndStop(2);
mc2.currentFrame = mc1.currenctFrame
mc1.gotoAndStop(2);
mc2.gotoAndStop(3);
mc2.currentFrame = mc1.currenctFrame
mc1.gotoAndStop(4);
mc2.gotoAndStop(4);
mc2.currentFrame = mc1.currenctFrame

[редактировать] Подробнее

Я не использую Flash IDE. Я использую:

  • Inkscape (для генерации SVG)
  • swfmill (для создания файлов активов)
  • Haxe (для создания анимации)

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

В качестве альтернативы я могу создать MovieClip и просто рисовать на нем кадр за кадром программно. (а затем, конечно, играть в петле)

По сути, я хотел бы использовать ActionScript для генерации контента вместо XML swfmill (не диалект simple, simple - это хорошо). Поскольку я новичок, я не знаю, какую еще информацию я могу вам дать. Так скажите, пожалуйста, могу ли я предоставить какие-либо другие данные?

Ответы [ 2 ]

5 голосов
/ 15 января 2009

Без Flash IDE нет смысла использовать gotoAndStop () и т. Д.

Поскольку вы не можете добавлять свои различные активы в разные кадры, вы должны добавить их все как слои, используя addChild (assetToAdd) и установить для всех, кроме одного, значение visible = false. Затем добавьте простую функцию, подобную этой:

function showFrame(num:int):void
{
    for (var i:int = 0; i < numChildren; i++)
    {
       if (i == num)
       {
          getChildAt(i).visible = true;
       }
       else
       {
          getChildAt(i).visible = false;
       }
    }
}
0 голосов
/ 15 января 2009

Мне не известен удобный способ сделать то, что вы пытаетесь сделать. Ваш пример не будет работать, потому что currentFrame - это свойство только для чтения, и все, что он возвращает, это целое число, представляющее номер кадра, а не данные, составляющие фактический кадр.

Мое предложение, если вам нужно динамически переставить кадры, заключалось бы в том, чтобы обернуть этот конкретный MovieClip в пользовательский класс, который переводит gotoAndPlay (x) в любое число, которое вы хотите.

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

...