Как создать Flash-плеер с возможностью динамического изменения размера

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

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

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

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

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

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

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

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


person Leon Gaban    schedule 09.11.2009    source источник


Ответы (2)


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

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

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

person greggreg    schedule 10.11.2009

Добавляя к ответу greg, посмотрите на событие "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...
}
person Cay    schedule 10.11.2009
comment
У вас есть ошибка в функции addedToStage; вы перехватываете событие ADDED_TO_STAGE вместо события RESIZE ... - person kkyy; 10.11.2009
comment
Привет, спасибо, да, я пробую это :) Я уверен, что мои следующие вопросы о stackoverflow будут связаны с элементами, которые я пытаюсь изменить размер и положение - person Leon Gaban; 10.11.2009