Puis-je obtenir l'ancienne mise à l'échelle plein écran avec FLVPlayback et flash 9.0.115+?

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

Question

Avec les versions précédentes du flash, l'entrée en mode plein écran augmentait la hauteur et la largeur de la scène aux dimensions de l'écran. Maintenant que la mise à l'échelle matérielle est arrivée, la hauteur et la largeur sont définies en fonction des dimensions de la vidéo (plus les bordures si le rapport de format est différent).

C'est bien, à moins que des contrôles ne soient placés sur la vidéo. Avant, vous pouviez contrôler leur taille. mais maintenant, ils sont agrandis de la même ampleur que la vidéo et sont horriblement pixellisés. Les contrôles sont laids et les sous-titres illisibles.

Il est possible pour l'utilisateur de désactiver la mise à l'échelle matérielle, mais la seule chose à faire est de désactiver l'anti-aliasing. Les contrôles sont encore gonflés à la laideur.

Existe-t-il un moyen de retrouver l'ancien comportement de réduction?

Était-ce utile?

La solution 2

J'ai finalement trouvé la réponse à cette question. Le problème est que le composant FLVPlayback utilise maintenant la propriété stage.fullScreenSourceRect pour entrer en mode plein écran à l'échelle matérielle. Lorsque cela se produit, il étend la zone de rendu donnée par stage.fullScreenSourceRect pour remplir l’écran plutôt que d’augmenter la taille de la scène ou de ses composants.

Pour l'arrêter, vous devez créer une sous-classe de FLVPlayback qui utilise une sous-classe de UIManager et remplacer la fonction qui définit stage.fullScreenSourceRect. En revanche, vous perdez la mise à l'échelle matérielle; mais en revanche, votre joueur ne ressemble pas à un crayon dessiné par un enfant de trois ans.

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) {
            }
        }
    }
}

Nous ajoutons le FLVPlayback à notre film en utilisant ActionScript, nous devons donc remplacer

var myFLVPLayback:FLVPlayback = new FLVPlayback();

avec

var myFLVPLayback:CustomFLVPlayback = new CustomFLVPlayback();

Je ne sais pas s'il existe un moyen de rendre la classe personnalisée disponible dans la bibliothèque de composants.

Autres conseils

Voici une autre façon de le résoudre, qui est plus simple et qui semble bien fonctionner pour moi.

myFLVPlayback.fullScreenTakeOver = false;

La propriété fullScreenTakeOver a été introduite dans Flash Player 9 mise à jour 3 . Les documents sont tous un peu vagues, mais il y a un peu plus d'informations ici:

Utilisation du composant FLVPlayback avec Flash Player 9 Mise à jour 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;
}

Ou, et je ne suis pas tout à fait sûr à ce sujet, vous pouvez essayer de faire une mise à l'échelle en 9 tranches sur FLVPlayback, mais je ne sais pas si cela fonctionnera.

Didacticiel de redimensionnement en 9 tranches: http://www.sephiroth.it/tutorials/ flashPHP / scale9 /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top