Можно ли получить старое полноэкранное масштабирование с помощью FLVPlayback и прошить 9.0.115+?

StackOverflow https://stackoverflow.com/questions/102059

Вопрос

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

Это нормально, если только у вас нет элементов управления видео.Раньше вы могли контролировать их размер;но теперь они увеличены в том же масштабе, что и видео, и ужасно пикселизированы.Управление уродливое, субтитры нечитабельны.

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

Есть ли способ вернуть старое поведение масштабирования?

Это было полезно?

Решение 2

В конце концов я нашел ответ на этот вопрос.Проблема в том, что компонент FLVPlayback теперь использует свойство stage.fullScreenSourceRect для входа в полноэкранный режим с аппаратным масштабированием.Когда он это делает, он растягивает отображаемую область, заданную stage.fullScreenSourceRect, чтобы заполнить экран, а не увеличивает размер сцены или каких-либо компонентов.

Чтобы остановить это, вам необходимо создать подкласс FLVPlayback, который использует подкласс UIManager, и переопределить функцию, устанавливающую stage.fullScreenSourceRect.С другой стороны, вы теряете аппаратное масштабирование;но с другой стороны, ваш плеер не выглядит так, как будто его нарисовал цветными карандашами трехлетний ребенок.

CustomFLVPlayback.as:

import fl.video.*;
use namespace flvplayback_internal;

public class CustomFLVPlayback
{
    public function CustomFLVPlayback()
    {
        super();
        uiMgr = new CustomUIManager(this);
    }
}

CustomUIManager.as:

import fl.video.*;
import flash.display.StageDisplayState;

public class CustomUIManager
{
    public function CustomUIManager(vc:FLVPlayback)
    {
        super(vc);
    }

    public override function enterFullScreenDisplayState():void
    {
        if (!_fullScreen && _vc.stage != null)
        {
            try
            {
                 _vc.stage.displayState = StageDisplayState.FULL_SCREEN;
            } catch (se:SecurityError) {
            }
        }
    }
}

Мы добавляем FLVPlayback в наш фильм с помощью ActionScript, поэтому нам просто нужно заменить

var myFLVPLayback:FLVPlayback = new FLVPlayback();

с

var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();

Я не знаю, есть ли способ сделать пользовательский класс доступным в библиотеке компонентов.

Другие советы

Вот еще один способ решить эту проблему, он проще и, кажется, мне подходит.

myFLVPlayback.FullScreenTakeOver = false;

А fullScreenTakeOver свойство было представлено в Flash Player 9. обновление 3.Вся документация немного расплывчата, но здесь есть немного больше информации:

Используя FLVPlayback компонент с Flash Player 9, обновление 3

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

function onStageResize(event:Event):void {
    //do whatever you want to re-position your controls and scale the video
    // here's an example
    myFLVPlayback.width = stage.stageWidth;
    myFLVPlayback.height = stage.stageHeight - controls.height;
    controls.y = stage.stageHeight - controls.height;
}

Или, и я не совсем уверен в этом, вы можете попытаться масштабировать 9 фрагментов в FLVPlayback, но я не знаю, сработает ли это.

Учебное пособие по 9-срезовому масштабированию: http://www.sephiroth.it/tutorials/flashPHP/scale9/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top