• User Newbie

    [FL CS3 + AS3] Posizionamento nello stage al resize

    Lo schema devo realizzare è questo:

    image

    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