2008-09-19 3 views
4

Avec les versions précédentes de 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 sur les dimensions de la vidéo (plus les bordures si le format d'image est différent).Puis-je obtenir l'ancienne mise à l'échelle en plein écran avec FLVPlayback et flash 9.0.115+?

Très bien, sauf si vous avez des contrôles placés sur la vidéo. Avant, vous pouviez contrôler leur taille; mais maintenant ils sont gonflés par la même échelle que la vidéo, et pixellated horriblement. Les contrôles sont laids et les sous-titres sont illisibles.

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

Existe-t-il un moyen de récupérer l'ancien comportement de redimensionnement?

+0

Quel OS êtes-vous? – Oli

+0

Je développe sur Windows. C'est un film flash AS3 en cours de développement dans Flash CS3. Les clients utilisent principalement des fenêtres, mais une proportion non négligeable utilise des macs. – Simon

Répondre

1

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 dans un mode plein écran mis à l'échelle du matériel. Quand il fait cela, il étire la zone rendue donnée par stage.fullScreenSourceRect pour remplir l'écran, plutôt que d'augmenter la taille de la scène ou des 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 à la hausse, votre joueur ne semble pas avoir été dessiné par un enfant de trois ans en crayons.

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 la FLVPlayback à notre film en utilisant actionscript, donc nous avons juste à 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.

-1
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 de cela, vous pouvez essayer de faire un peu de 9 tranche mise à l'échelle sur la FLVPlayback, mais je ne sais pas si cela va marcher.

9 tranches tutoriel mise à l'échelle: http://www.sephiroth.it/tutorials/flashPHP/scale9/

+0

Cela ne fonctionne pas avec le nouveau comportement de mise à l'échelle - une fois que vous êtes en plein écran, stage.stageWidth et stage.stageHeight sont définis sur les dimensions de la vidéo, pas sur l'écran. – Simon

+0

Eh bien merde, désolé, je pensais que ceux-ci seraient mis à jour. Votre méthode est beaucoup plus d'efforts que vous n'auriez dû, mais à l'intérieur. J'espère qu'ils vont résoudre ce problème avec Flash 10. – UltimateBrent

2

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

myFLVPlayback. fullScreenTakeOver = false;

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

Using the FLVPlayback component with Flash Player 9 Update 3

+0

Ce paramètre est un bon début; mais si vous l'utilisez, vous devez faire le reste de la mise en page vous-même; cela ne va pas étirer le joueur pour remplir l'écran. – Simon

+1

Le lien est cassé ... – Moshe

+0

Meh. Lemme savoir si vous trouvez l'article et je vais modifier l'URL. – aaaidan