Posso ottenere il vecchio ridimensionamento a schermo intero con FLVPlayback e Flash 9.0.115+?
-
01-07-2019 - |
Domanda
Con le versioni precedenti di flash, l'accesso alla modalità a schermo intero aumentava l'altezza e la larghezza del palco alle dimensioni dello schermo. Ora che è arrivato il ridimensionamento dell'hardware, l'altezza e la larghezza sono impostate sulle dimensioni del video (più i bordi se le proporzioni sono diverse).
Va ??bene, a meno che tu non abbia controlli posizionati sul video. Prima, potevi controllarne le dimensioni; ma ora sono fatti saltare in aria dalla stessa scala del video e pixelati orribilmente. I controlli sono brutti e i sottotitoli sono illeggibili.
È possibile per l'utente disattivare il ridimensionamento dell'hardware, ma tutto ciò che si ottiene è disattivare l'antialiasing. I controlli sono ancora fatti saltare in aria.
C'è un modo per ripristinare il vecchio comportamento di ridimensionamento?
Soluzione 2
Alla fine ho trovato la risposta a questo. Il problema è che il componente FLVPlayback ora utilizza la proprietà stage.fullScreenSourceRect per accedere a una modalità a schermo intero con scalabilità hardware. Quando lo fa, estende l'area di rendering fornita da stage.fullScreenSourceRect per riempire lo schermo, anziché aumentare le dimensioni dello stage o di qualsiasi componente.
Per interromperlo, è necessario creare una sottoclasse di FLVPlayback che utilizza una sottoclasse di UIManager e sovrascrivere la funzione che imposta stage.fullScreenSourceRect. Sul lato negativo, si perde il ridimensionamento dell'hardware; ma il lato positivo non sembra che il tuo giocatore sia stato disegnato da un pastore di tre anni.
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) {
}
}
}
}
Aggiungiamo FLVPlayback al nostro filmato usando ActionScript, quindi non ci resta che sostituirlo
var myFLVPLayback:FLVPlayback = new FLVPlayback();
con
var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();
Non so se esiste un modo per rendere disponibile la classe personalizzata nella libreria dei componenti.
Altri suggerimenti
Ecco un altro modo per risolverlo, che è più semplice e sembra funzionare abbastanza bene per me.
myFLVPlayback.fullScreenTakeOver = false;
La proprietà fullScreenTakeOver
è stata introdotta in Flash Player 9 aggiornamento 3 . I documenti sono tutti un po 'vaghi, ma qui sono disponibili ulteriori informazioni:
Uso del componente FLVPlayback
con Flash Player 9 Aggiornamento 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;
}
Oppure, e non ne sono del tutto sicuro, potresti provare a fare un ridimensionamento di 9 slice su FLVPlayback, ma non so se funzionerà.
Tutorial sul ridimensionamento a 9 sezioni: http://www.sephiroth.it/tutorials/ flashPHP / scale9 /