- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- [FL CS3 + AS3] Posizionamento nello stage al resize
-
[FL CS3 + AS3] Posizionamento nello stage al resize
Lo schema devo realizzare è questo:
in pratica ho un Main.fla che deve precaricare un altro fla (libreria.fla) e quest'ultimo deve essere sempre posizionato al centro dello stage sull'asse x e attaccato sempre in alto quindi y sempre =0;
e qui primo problema, spiego brevemente come ho fatto:
al Main.fla ho fatto una classe di documento Main.as.
Main.as mi precarica in un mc libreria.swf poi mi fa l'addChild sullo stage, a questo punto ho messo gli eventi sul resize per riposizionarlo. NON funziona.Codice di Main.as
package { import Caricamento; import flash.display.*; import flash.events.Event; //inizio classe Main public class Main extends MovieClip { private var loStage:Caricamento; private var _fla:MovieClip; //costruttore public function Main() { _fla=this; init(); } private function init():void { loStage=new Caricamento(this,"libreria.swf","Stage..."); loStage.y=0; loStage.x=(stage.stageWidth/2)-(900/2); addChild(loStage); //imposto le proprietà dello stage stage.frameRate=40; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; //eventi di stage stage.addEventListener(Event.ACTIVATE, activateHandler); stage.addEventListener(Event.RESIZE, resizeHandler); } private function activateHandler(event:Event):void { //trace("activateHandler: " + event); } private function resizeHandler(event:Event):void { //riposiziona lo stage loStage.x=(stage.stageWidth/2)-(900/2); loStage.y=0; } }//fine classe }//fine package
il tipo Caricamento è un'altra classe che ho fatto per gestire il preload, è un'estensione della classe MovieClip
package { import flash.display.MovieClip; import flash.display.Loader; import flash.events.*; import flash.net.URLRequest; import SeguiMouse; public class Caricamento extends MovieClip { private var daCaricare:String; public var loader:Loader; public var segui:SeguiMouse; private var labelCaricare:String; private var _fla:MovieClip; //ESCAMOTAGE per convertire un loader in moveclip //creo un oggetto generico non definito di tipo * che ospiterà il loader.content private var mymovie:* //ESCAMOTAGE variabile per ospitare la variabile movie generica, a quel punto posso usare //l'elemento caricato come un movieclip! private var myclip:MovieClip; public function Caricamento(fla:MovieClip,stringaUrl:String,cosaCarico:String) { daCaricare=new String(stringaUrl); labelCaricare=cosaCarico; _fla=fla; init(); } private function init():void { var request:URLRequest=new URLRequest(daCaricare); loader=new Loader(); initListeners(loader.contentLoaderInfo); loader.load(request); } private function initListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.OPEN,inizia); dispatcher.addEventListener(ProgressEvent.PROGRESS,inCaricamento); dispatcher.addEventListener(Event.COMPLETE,completato); } private function inizia(event:Event):void { segui= new SeguiMouse(); _fla.addChild(segui); } private function inCaricamento(event:ProgressEvent):void { var perc:uint=(event.bytesLoaded/event.bytesTotal)*100; segui._label=labelCaricare; segui.percentuale=perc+"%"; } public function completato(event:Event):void { mymovie=loader.content myclip=mymovie; _fla.addChild(myclip); _fla.removeChild(segui); } } }
la classe SeguiMouse non la sto a postare tanto non serve.
PROBLEMA 1:
Non mi si riposiziona loStage, variabile di tipo Caricamento in Main.as, mi resta sempre attaccato in alto a sinistra. dove sbaglio?PROBLEMA 2:
Devo ridimensionare a seconda della grandezza dello stage il bg_mc che è un livello dentro a Libreria.fla. Quindi dovrei portarmi dietro da qualche parte e in qualche maniera la variabile stage.stageWidth e stage.stageHeigh un po' come se fossero variabili globali (concetto che non esiste nella programmazione ad oggetti e in AS3 mi sa).
Dovrei concettualmente fare una cosa simile nel Main.as. . private function resizeHandler(event:Event):void { //riposiziona lo stage loStage.x=(stage.stageWidth/2)-(900/2); loStage.y=0; //ridimensiono il bg_mc loStage.bg_mc.width=stage.stageWidth; loStage.bg_mc.height=stage.stageHeight; } . .
ma chiaramente non si può fare così... ci sto perdendo un sacco di tempo senza togliere un ragno da un buco, mi potete dare una mano?
Grazie