+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 16

[FL CS3 + AS3] Posizionamento nello stage al resize

This is a discussion on [FL CS3 + AS3] Posizionamento nello stage al resize within the Actionscript 3.0 avanzato forums, part of the Flash Italiano category; Lo schema che devo realizzare è questo: in pratica ho un Main.fla che deve precaricare un altro fla (libreria.fla) e ...

  1. #1
    Junior Member Settled In steveaustin1974 is on a distinguished road steveaustin1974's Avatar
    Join Date
    Jul 2007
    Posts
    19
    Rep Power
    0

    Angry [FL CS3 + AS3] Posizionamento nello stage al resize

    Lo schema che 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
    Code:
    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

    Code:
    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);
    		}
    	}
    }
    a 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 :
    Code:
    .
    .
    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

  2. #2
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Ciao e benvenuto,
    partiamo dal problema 1.
    Se ho ben capito, tu vorresti che myclip sia sempe al centro dello stage sull' asse x.
    Nel metodo completato di Caricamento.as potresti scrivere:
    Code:
    mymovie=loader.content
    myclip=mymovie;
    myclip.x=(_fla.stage.stageWidth-myclip.width)/2;
    _fla.addChild(myclip);

  3. #3
    Junior Member Settled In steveaustin1974 is on a distinguished road steveaustin1974's Avatar
    Join Date
    Jul 2007
    Posts
    19
    Rep Power
    0
    Quote Originally Posted by Flep View Post
    Ciao e benvenuto,
    partiamo dal problema 1.
    Se ho ben capito, tu vorresti che myclip sia sempe al centro dello stage sull' asse x.
    Nel metodo completato di Caricamento.as potresti scrivere:
    Code:
    mymovie=loader.content
    myclip=mymovie;
    myclip.x=(_fla.stage.stageWidth-myclip.width)/2;
    _fla.addChild(myclip);
    Ciao compaesano (ho visto che sei di Cesena anche tu)
    Si in effetti il problema n°1 è così risolto, è il problema n°2 che non capisco come si possa fare?

    cioè in AS2 me la cavavo con una variabile globale che sull'evento resize me lo portavo dietro e via andare poi mi gestivo i vari resize i riposizionamenti dentro i vari filmati caricati... acsè e funzioneva! Ma con AS3 mi trovo in difficoltà.

  4. #4
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Haha uns capes piò gnint...
    Dunque, potresti fare una bella cosa:
    nella Document Class crei due proprietà pubbliche e statiche:

    public static var w:Number;
    public static var h:Number;

    poi nella funzione costruttrice gli assegni i valori:
    w=stage.stageWidth;
    h=stage.stageHeight;

    adesso quelle due variabili sono richiamabili da qualsiasi classe in qualsiasi momento in questo modo:
    NomeDocumentClass.w e NomeDocumentClass.h
    nel tuo caso mi sembra Main.w e Main.h

    PS: me a stag a Cisnatic

    lol veramente difficile scrivere il dialetto

  5. #5
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Scusa ho editato, avevo dimenticato l' attributo static :)

  6. #6
    Junior Member Settled In steveaustin1974 is on a distinguished road steveaustin1974's Avatar
    Join Date
    Jul 2007
    Posts
    19
    Rep Power
    0
    Prima di tutto grazie per le risposte, ti pagherò da bere all'approdo o all'oro bianco visto che ci ad zisnatic! :)

    Dunque le varibili statiche le avevo pensate anch'io, il problema è che le devo richiamare da Libreria.fla un file esterno, mentre Main.as è la document class di Main.fla quindi se da Libreria.fla richiamo Main.w chiaramente mi da errore di compilazione perchè non trova ne classe ne proprietà.

    a deghi ben?

  7. #7
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Non dovrebbe darti errore se libreria.fla si trova nella stessa directory di Main.as

  8. #8
    Junior Member Settled In steveaustin1974 is on a distinguished road steveaustin1974's Avatar
    Join Date
    Jul 2007
    Posts
    19
    Rep Power
    0
    ops...scusa patacca io, mi ero dimenticato di importare la classe (non è nella stessa dir)! Sorry, si così va.

    Però c'è una cosa che non mi spiego, ora dalla Document Class Libreria.as di Libreria.fla vedo le 2 variabili statiche Main.w e Main.h e fin qui ora grazie a te tutto ok... ma se vado a mettere un listener sul resize dello stage anche in Libreria.as renderizzando Libreria.fla non mi da errore (anche se chiaramente Main.w e Main.h sono NaN), se invece rendenderizzo Main.fla mi da errore sul listener dello stage:
    "TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null."

    Ma anche se tipo da Libreria.as faccio qualsiasi riferimento alla classe Stage mi da quell'errore.

    In pratica ora ho le variabili giuste ma non posso usare il listener... c'è n'è sempre una con sti AS3.

  9. #9
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Tieni presente che ogni classe AS 3.0 non è più come AS 2.0, in questo senso:
    con il 2 potevi scrivere _root da qualsiasi classe che si trovasse nella stessa directory del FLA e risalivi direttamente alla sua root.
    Con la versione 3 questo non avviene ( giustamente ) quindi, hai 2 modi:
    - passi il valore come abbiamo già visto ( fla e _fla ) e poi ti riferisci a _fla.stage....,
    - oppure questo articolo potrebbe aiutarti: this.root - trucco del giorno

  10. #10
    Junior Member Settled In steveaustin1974 is on a distinguished road steveaustin1974's Avatar
    Join Date
    Jul 2007
    Posts
    19
    Rep Power
    0
    il mio è un po' il problema contrario.
    dalla Classe Main.as devo capire come posso resizire un'istanza di MC dentro Libreria.fla

    quindi da Main.fla devo accedere a bg_mc di Libreria.fla (che è quello che carico dentro a Main.as dentro la variabile loStage:Caricamento)

    in pratica ho draggato un'istanza di MC in libreria sullo stage chiamato bg_mc (questo in Libreria.fla) questo bg_mc deve essere resizaito (wow che termine!) al ridimensionamento dello stage, gli eventi e i listener al resize però sono in Main.as e da quello che ho capito possono essere solo messi li. Quindi la domanda è :

    ora il mio codice al resize in Main.as è così:
    Code:
    .
    .
    
      private function resizeHandler(event:Event):void {
    			//riposiziona lo stage
    			loStage.x=(stage.stageWidth/2)-(900/2);
    			loStage.y=0;
    			
                            //riassegno le variabili statiche
    			w=stage.stageWidth;
    			h=stage.stageHeight;
    
                            //****QUI DOVREI RIDIMENSIONARE bg_mc istanziato in Libreria.fla***
    }
    .
    .

+ Reply to Thread
Page 1 of 2 1 2 LastLast

Similar Threads

  1. Replies: 5
    Last Post: 28-04-11, 07:41
  2. problema posizionamento oggetto su stage
    By giannicasa in forum Actionscript 3.0 base
    Replies: 3
    Last Post: 14-10-09, 11:40
  3. Inserire video .flv nello stage.
    By kinitta in forum Flash Italiano
    Replies: 4
    Last Post: 29-09-09, 11:08
  4. Caricamento filmati e posizionamento allo Stage...
    By SWFish in forum Actionscript 3.0 base
    Replies: 6
    Last Post: 04-11-07, 17:22
  5. Caricamento filmati e posizionamento allo Stage...
    By SWFish in forum Actionscript 3.0 avanzato
    Replies: 1
    Last Post: 04-11-07, 16:46

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts