2009-03-18 13 views

risposta

-3

EDIT: Questo è obsoleta adesso (era un hack per FP 8,5/9)

Di seguito rileverà se il giocatore ha la disponibilità a schermo intero (thx @mrdoob):

var hasFullscreen:Boolean = (stage.hasOwnProperty("displayState")) 
+0

Questa soluzione non funziona poiché la proprietà displayState è sempre disponibile, anche quando allowFullScreen = false, testato in Flash 10.0. – sixones

+0

Lo so, come potete vedere è stato pubblicato 2 anni fa mentre il problema era di rilevare se la versione del giocatore effettivamente supportava questa funzione ... kthx –

2

Il membro che si desidera è

stage.displayState 

Può essere assegnato in questo modo:

import flash.display.StageDisplayState; 

.... 

stage.displayState = StageDisplayState.FULL_SCREEN; 
stage.displayState = StageDisplayState.NORMAL; 

vi consiglio di leggere:

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000352.html

[Edit:

Oh uomo, totalmente frainteso la tua domanda]

Dopo un piccolo test sembra che si può semplicemente utilizzare il meccanismo di eccezione a verificare senza alcun sfarfallio perceptable:.

try 
{ 
    stage.displayState = StageDisplayState.FULL_SCREEN; 
    stage.displayState = StageDisplayState.NORMAL; 
} catch (error:SecurityError) { 
// your hide button code    
} 
+0

realtà in esecuzione nel browser, sotto il plugin di Flash Player, non è possibile persino fare questo codice a meno che non sia collegato a un evento avviato dall'utente come MouseEvent.CLICK. – dlamblin

+0

Questa è solo una questione di progettazione delle informazioni. Difficilmente riuscirà a inibire il processo di test in qualsiasi misura. – Jotham

0

In realtà i documenti non sono chiari per quanto riguarda il modo in cui la modalità a schermo intero è consentita o meno può essere rilevata in ActionScript 3.

L'unica cosa che menzionano è che se provi a passare alla modalità a schermo intero e non è consentito, otterrai un'eccezione , che puoi prendere. Questo non ti permetterà facilmente di nascondere o mostrare un pulsante della modalità a schermo intero.

Potrebbe esserci un modo, ma i "livedocs" sono notoriamente incompleti o brevi.

Potreste essere in grado di leggere il valore "fullscreen" di param, che il default è false, cercando in paramters dell'oggetto radice con:

var keyStr:String; 
var valueStr:String; 
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 
for (keyStr in paramObj) { 
valueStr = String(paramObj[keyStr]); 
//do something with this information 
} 

Edit: si è preso nota che non torna nei flashvars.

+0

"Questo non ti permetterà facilmente di nascondere o mostrare un pulsante della modalità a schermo intero" - perché no? Se si cattura SecurityException mentre si attiva la modalità a schermo intero, non è consentito. – bzlm

+0

La domanda dice "Non arriva con altri flashvars su loaderInfo.parameters". – bzlm

+0

Logica. Cosa succede se non si ottiene un'eccezione? Ora stai cambiando le modalità PRIMA di aver disegnato il pulsante e prima che qualcuno lo abbia fatto clic. Tranne ovviamente: il modello di sicurezza dice che non è possibile assegnare stage.displayState se non viene avviato da un evento utente. Sì, mi è mancato il bit flashvars quando si modifica di più. – dlamblin

0

Non è possibile rilevare se l'embed ha la schermata allowfull impostata su false/true.

Sfortunatamente è necessario attendere fino a quando l'utente non fa clic sul pulsante per rilevare l'eventuale errore e quindi disabilitare il pulsante.

Ancora ... Devi essere in un contesto molto speciale per richiedere che flashplayer valuti questo valore come probabilmente lo hai modificato. Nel caso in cui l'embed sia gestito da una terza parte che deve essere in grado di decidere se la modalità a schermo intero dovrebbe essere autorizzata o meno. Se questo è il caso, basta aggiungere un extra flash-var (ad esempio fullscreenButton = false).

0

L'unico metodo che posso pensare sarebbe chiamare una funzione JavaScript tramite ExternalInterface. Puoi leggere facilmente i parametri di embed flash da JavaScript, ma sto pensando che se potessi inserire un JS nell'HTML del tuo film, avresti piuttosto cambiato il parametro piuttosto che cercare di scoprire di cosa si tratta.

A parte questo, la soluzione di Jotham sembra ok, a parte il fatto che stage.displayState = StageDisplayState.FULL_SCREEN; può essere attivato solo da un evento utente.

La modalità a schermo intero viene avviata in risposta a un clic del mouse o alla pressione di un tasto da parte dell'utente; il film non può cambiare Stage.displayState senza l'input dell'utente. (http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#displayState)

Si dovrebbe avere un secondo pulsante che quando viene premuto, esegue il codice di Jotham. Vado per un pulsante di accesso o qualsiasi altro pulsante che l'utente dovrebbe premere comunque.

0

Purtroppo , il post precedente non funziona. Un file SWF con:

package { 
    import flash.display.Sprite; 
    import flash.display.StageDisplayState; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Tester extends Sprite { 
     public function Tester() { 
      trace("Display States: Full="+StageDisplayState.FULL_SCREEN+"; Normal="+StageDisplayState.NORMAL); 
      trace("- Display State? "+stage.displayState); 
      trace("- Full Screen Enabled? "+(stage.hasOwnProperty("displayState"))); 
      stage.addEventListener(MouseEvent.CLICK, function(evt:Event=null):void { 
       trace("Attempting to change to FullScreen..."); 
       try { 
        stage.displayState = StageDisplayState.FULL_SCREEN; 
        trace("Success!"); 
        stage.displayState = StageDisplayState.NORMAL; 
       } catch(e:*) { 
        trace("Fail! "+e); 
       } 
      }); 
     } 

    } 
} 

traccerà quando FullScreen è disattivato:

Display States: Full=fullScreen; Normal=normal 
- Display State? normal 
- Full Screen Enabled? true 
Attempting to change to FullScreen... 
Fail! SecurityError: Error #2152: Full screen mode is not allowed. 

Il problema è la parte Full Screen Enabled? true.

-1

Credo che potremmo controllare questa capacità con il cercare di ascoltare la

_root.stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullScreenListenter); 

Dalla mia prova sul tentativo di consentire la modalità a schermo intero in serie set misure di sicurezza, verrà restituito un'eccezione null. Suppongo che a causa di FullScreenEvent non esista.

2

SOLUZIONE PER AS3

si può verificare se è consentito a schermo intero tramite le proprietà della fase, ad esempio per il mio caso

try { 
    if (btn.stage["allowsFullScreen"]) { // if this fails, then its not allowed 
     // do full screen allow code here 
     btn.alpha = 1; // show since its allowed 
    } 
} catch (error:Error) { // full scrren not allowed 
    btn.alpha = 0.5; // dim since it cant be used 
} 
+3

stage.allowsFullScreen è stato aggiunto in 10.2 quindi questo non funzionerà per i giocatori più grandi, ma questa è la soluzione migliore che ho trovato. Io uso: stage.hasOwnProperty ("displayState") && stage.hasOwnProperty ("allowsFullScreen") && stage ["allowsFullScreen"] –

Problemi correlati