Kann ich die alte Vollbildskalierung mit FLVPlayback und Flash-9.0.115+ bekommen?
-
01-07-2019 - |
Frage
mit früheren Versionen von Blitz, Eingabe des Vollbild-Modus erhöht, um die Höhe und die Breite der Bühne auf die Abmessungen des Bildschirms. Nun, da Hardware-Skalierung angekommen ist, die Höhe und Breite sind auf die Abmessungen des Videos festgelegt (plus Grenzen, wenn das Seitenverhältnis ist anders).
Das ist in Ordnung, es sei denn, Sie Steuerelemente über das Video gelegt haben. Vorher konnte man ihre Größe steuern; aber jetzt sind sie von der gleichen Größenordnung wie das Video geblasen und schrecklich Pixel unterteilt. Die Kontrollen sind hässlich und Untertitel sind nicht lesbar.
Es ist möglich, dass der Anwender Hardware-Skalierung auszuschalten, aber alles, was ist erreicht Anti-Aliasing auszuschalten. Die Kontrollen werden an Hässlichkeit noch die Luft gesprengt.
Gibt es eine Möglichkeit, die alte Skalierungsverhalten zurück?
Lösung 2
Ich habe festgestellt, schließlich die Antwort auf diese. Das Problem ist, dass die FLVPlayback-Komponente nun die stage.fullScreenSourceRect Eigenschaft unter Verwendung eines Hardware-skalierten Vollbild-Modus zu gelangen. Wenn es das tut, es reicht den gerenderte Bereich von stage.fullScreenSourceRect gegeben um den Bildschirm zu füllen, anstatt die Größe der Bühne oder irgendwelche Komponenten zu erhöhen.
Um es zu stoppen, müssen Sie eine Unterklasse von FLVPlayback erstellen, die eine Unterklasse von UIManager verwendet und die Funktion außer Kraft setzen, die stage.fullScreenSourceRect Vertonung. Auf der anderen Seite, verlieren Sie Hardware-Skalierung; aber auf der Seite oben, Ihr Spieler sieht nicht wie es von einem drei Jahre alten in Kreiden gezeichnet worden ist.
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) {
}
}
}
}
Wir fügen den FLVPlayback unseren Film mit Actionscript, so müssen wir nur ersetzen
var myFLVPLayback:FLVPlayback = new FLVPlayback();
mit
var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();
Ich weiß nicht, ob es eine Möglichkeit gibt, die benutzerdefinierte Klasse in der Komponentenbibliothek zu machen.
Andere Tipps
Hier ist eine andere Art und Weise zu lösen, die einfacher ist und es scheint für mich ganz gut zu funktionieren.
myFLVPlayback.fullScreenTakeOver = false;
Die fullScreenTakeOver
Eigenschaft wurde in Flash Player 9 Update eingeführt 3 . Die Dokumente sind alle ein bisschen vage, aber es ist ein bisschen mehr Infos hier:
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;
}
Oder und ich bin mir nicht ganz sicher über diese, könnten Sie versuchen, einig 9 Stück zu tun, auf dem FLVPlayback Skalierung, aber ich weiß nicht, ob das wird funktionieren.
9-Slice-Skalierung Tutorial: http://www.sephiroth.it/tutorials/ flashPHP / scale9 /