Как создать динамический Flash Player с возможностью изменения размера - PullRequest
3 голосов
/ 09 ноября 2009

Утренние накопители! Так что мой вопрос сегодня не касается какого-либо кода, а о том, как сделать это правильно с самого начала. У меня есть видеоплеер, созданный для статического размера (максимум: 800x600), который мне придется перекодировать каждый раз, когда он мне нужен, чтобы иметь другой размер.

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

Теперь у меня есть 2 способа сделать это:

  • Начните с наименьшего возможного размера и измените размер в сторону увеличения, но я не уверен в том, как на самом деле Flash-фильм будет расширяться вверх на данный момент.
  • Или 2, начните с максимально возможного размера (в данном случае 800x600) и уменьшите все.

Шаг 1, я думаю, кажется, лучший способ сделать это (в стиле YouTube), но Шаг 2 также кажется, что это может быть проще? Мой друг сказал, что я должен пойти с большим размером и иметь размеры элементов в каждом классе, а затем зафиксировать в верхнем левом углу. Однако для того, чтобы проигрыватель помещался внутри определенных столбцов div на сайтах, в блогах, где бы он ни говорил, должна быть сторона HTML / CSS ... это означает, что div, содержащий измененный размер flash-проигрывателя, должен будет покрывать области из фильма Flash, которые не должны быть показаны? Можно ли поместить флэш-фильм 800x600 в делитель шириной менее 800 пикселей? И накрыть это другим делом?

В любом случае, моя миссия - иметь игрока динамического размера, такого как:

alt text
(источник: flickr.com )

Мысли? Рекомендации? Лучшие практики для этого, прежде чем я начну?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2009

Добавляя к ответу Грега, взгляните на событие "resize" от объекта stage. Затем stage.stageWidth и stage.stageHeight предоставят вам фактическую высоту и ширину вашего swf, чтобы вы могли соответствующим образом позиционировать и масштабировать свои активы. Типичный способ сделать это из конструктора класса документа таков:

public function Main() {
    addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}

function addedToStage(e:Event) {
    // clean up our listeners
    removeEventListener(Event.ADDED_TO_STAGE, addedToStage);

    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.align =  StageAlign.TOP_LEFT;
    stage.addEventListener(Event.RESIZE, resize);

    // force a resize event
    dispatchEvent(new Event(Event.RESIZE));
}

function resize(e:Event) {
    var W:uint = stage.stageWidth;
    var H:uint = stage.stageHeight;
    mysprite1.x = W - mysprite.width;
    mysprite2.height = H;
    //etc...
}
3 голосов
/ 10 ноября 2009

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

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align =  StageAlign.TOP_LEFT;

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

...