Filmati ridimensionabili in Flash: atto II

Riprendendo il Post StageExt Class: filmati ridimensionabili in Flash ecco un modo ancor più semplice per ottenere il medesimo effetto, solo se nella libreria del nostro filmato è presente almeno un componente Flash!

Create un simbolo, un quadrato rosso 100×100 e ponetelo nella stage chiamandolo resizeWindow. Inserire in libreria, non nello stage, un componente qualsiasi, ad esempio un TextInput, e scrivete il seguente codice nel primo fotogramma del filmato.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import mx.managers.SystemManager;
//
Stage.scaleMode = "noscale"
//
//SystemManager.init();
SystemManager.addEventListener("resize", resizeWindow);
//
resizeWindow.resize = function(Void):Void {
    var s:Object = SystemManager.screen;
    this._width = s.width;
    this._height = s.height;
    this._x = Math.round(s.x);
    this._y = Math.round(s.y);
}
resizeWindow.resize();

La riga 6 (SystemManager.init();) può essere omessa.

Interessante nota è la presenza di due variabili globali che indicano la dimensione del filmato originale. Queste vengono valorizzate dalla presenza del componente in libreria! La classe StageExt, infatti, richiedeva all’atto della sua creazione il passaggio della dimensione del filmato (riporto uno spezzone di codice):

1
2
3
4
5
6
7
8
9
10
11
[...]
function StageExt(w:Number, h:Number) {
    trace("StageExt::constructor");
    //
    __movieWidth = w;
    __movieHeight = h;
    //
    Stage.addListener(this);
}

[...]

Questo passaggio può essere evitato sfruttando _global.origWidth e _global.origHeight che forniscono rispettivamente la larghezza e l’altezza del MovieClip principale. Il codice, quindi, può essere riscritto come:

1
2
3
4
5
6
7
8
9
10
[...]
function StageExt(w:Number, h:Number) {
    trace("StageExt::constructor");
    //
    __movieWidth = _global.origWidth;
    __movieHeight = _global.origHeight;
    //
    Stage.addListener(this);
}
[...]

O se preferite potete rivedere l’intero metodo onResize() e fare riferimento direttamente a _global.origWidth e _global.origHeight. Tuttavia, per completezza, queste due variabili globali vengono impostate nel file UIObjectExtensions.as sotto l’alberatura mx.core.ext. Esse sono impostate semplicemente prendendo le dimensioni della Stage all’avvio, ovvero:

1
2
3
4
5
6
7
8
9
10
11
12
[...]

// the player resizes and centers the stage.  We need to know what our original
// stage size is in order to know how we were centered.  Note that the FMX
// authoring player seems to report the size incorrectly.
if (_global._origWidth == undefined)
{
    _global.origWidth = Stage.width;
    _global.origHeight = Stage.height;
}

[...]

Tutto questo ovviamente è un caso particolare e non può essere esteso come caso generale. Comunque è interessante notare questo tipo di intrecci.

Un commento a: “Filmati ridimensionabili in Flash: atto II”

  1. 08 nov, 2007 Video Drive Blog » Filmati ridimensionabili in Flash: atto II:

    [...] Daniel Langendorf: [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA