+ Reply to Thread
Page 1 of 4 1 2 3 ... LastLast
Results 1 to 10 of 31

problema logico su sistema di menu

This is a discussion on problema logico su sistema di menu within the Actionscript 3.0 avanzato forums, part of the Flash Italiano category; ciao a tutti... spiego in generale cio che intendo fare ||||creare un menu di n pulsanti |||| all'over di un ...

  1. #1
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44

    problema logico su sistema di menu

    ciao a tutti...

    spiego in generale cio che intendo fare

    ||||creare un menu di n pulsanti ||||

    all'over di un mc_pulsante l'mc_pulsante legge in avanti la propria tl(timeline) all'out legge invece la propria tl all'indietro partendo dal punto in cui si trova

    al click di un mc_pulsante questi deve essere disabilitato (e qui che ho il mio problema)

    al click di un pulsante deve caricare un swf esterno(ma a questo ci pensiamo dopo )


    ecco sino ad adesso come ho operato

    due classi
    - main.as (che rapp. la document class)
    - TlinePre.as (che gestisce l'over e l'out del pulsante)

    fla
    - Tline.fla con 3 mc che rappr. i pulsanti dentro i quali vi è una anim. sulla tl
    istanziati col nome di btn0 btn1 btn2

    la logica e corregetimi se erro è quella di creare una document class appunto main.as che mi faccia da "classe manager" quindi

    setto il framerate
    setto i numeri di pulsanti
    setto il suffisso dei pulsanti
    tramite costruttore creo un array contenenti i nomi dei pulsanti
    e dopo richiamando il metodo init istanzio per ogni mc la classe relativa tline che si occupa di gestire la prorpia timeline all'over e all'out

    di seguito il codice

    Main.as
    Code:
    package
    {
    	import flash.display.MovieClip
    	
    	
    	public class Main extends MovieClip
    	{
    		public var n_btn:Number=3;
    		public var n_suffisso:String="btn";
    		
    		public var btn_array:Array=new Array(); 
    		var oneArray:Array = new Array("a", "b", "c");
    
    		
    		public function Main()
    		{
    			stage.frameRate=40;
    
    			for(var i:int=0;i<n_btn;i++)
    			{
    				var mc:String=n_suffisso+i;
    				btn_array.push(mc);
    			}
    			init(btn_array);
    		}
    		
    		
    		private function init(array:Array)
    		{
    			for(var i:int=0;i<array.length;i++)
    			{
    				var mcx:MovieClip=this[btn_array[i]];
    				var tlinepre:TlinePre=new TlinePre(mcx);
    			}
    		}
    		
    	}
    }
    Tline.as
    Code:
    package
    {
    	import flash.display.MovieClip;
    	import flash.events.*;
    	import flash.net.*;
    	
    	
    	class TlinePre extends MovieClip
    	{
    		public var mc:MovieClip;
    		
    		//costruttore
    		public function TlinePre(mcx:MovieClip)
    		{
    			mc=mcx;
    			mc.gotoAndStop(1)
    			initAddListener(mc)
    		}
    		
    		//inizializzazione listener
    		private function initAddListener(mcx:MovieClip)
    		{
    			mcx.addEventListener(MouseEvent.ROLL_OVER,mc_over)
    			mcx.addEventListener(MouseEvent.ROLL_OUT,mc_out)			
    			mcx.addEventListener(MouseEvent.MOUSE_DOWN,mc_down)						
    		}
    
    		//over
    		private function mc_down(e:Event)
    		{
    			trace("carica sezione")
    		}
    
    		
    		//over
    		private function mc_over(e:Event)
    		{
    			e.target.removeEventListener(Event.ENTER_FRAME,prev);
    			e.target.addEventListener(Event.ENTER_FRAME,nextf);
    		}
    
    		//tline next (su over)
    		private function nextf(e:Event)
    		{
    			trace("into_next")
    			if(e.target.currentFrame<e.target.totalFrames)
    			{
    				e.target.nextFrame()
    			}
    			else
    			{
    				e.target.removeEventListener(Event.ENTER_FRAME,nextf);
    			}
    
    		}
    		
    		
    		//out
    		private function mc_out(e:Event)
    		{
    			e.target.removeEventListener(Event.ENTER_FRAME,nextf);
    			e.target.addEventListener(Event.ENTER_FRAME,prev);
    		}
    		
    		//tline pre (su out)
    		private function prev(e:Event)
    		{
    			trace("into_prev")
    			if(e.target.currentFrame>1)
    			{
    				e.target.prevFrame()
    			}
    			else
    			{
    				e.target.removeEventListener(Event.ENTER_FRAME,prev);
    			}
    
    		}
    
    		
    	}
    }
    ||||| ecco dove incontro il mio problema |||||
    al click di un mc_pulsante devo abilitare i restanti e disabilitare il cliccato

    come devo operare
    devo fare una classe che si occupa solo di abilitare e disabilitare i pulsanti?
    e dalla classe tline lancio un metodo di questa classe?

    mica posso fare un metodo all'interno di tline? non conosco in effetti quanti pulsanti ho , poiche potrei usare la stessa classe per altri progetti non mi sembra logico

    posso sfruttare la document class ovvero Main.as?

    cercasi spunto logico thanks
    ;-p

  2. #2
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Io farei in questo modo:

    gestirei il controllo dalla Document Class.

    Assegni una proprietà in runtime ad ogni MovieClip:

    Code:
    for(var i:int=0;i<n_btn;i++)
    {
     var mc:String=n_suffisso+i;
     mc.id=i;
     btn_array.push(mc);
    }
    Mi creo un metodo pubblico che chiamo setState, in questo modo:

    Code:
    public function setState(n:int):void
    {
     for(var i:int=0;i<btn_array.length;i++)
     {
      if(n==i)
       btn_array[i].enabled=false;
      else
       btn_array[i].enabled=true;
     }
    }
    e poi chiamo il metodo dalla classe TlinePre passandogli l'id di mc:

    Code:
    private function mc_down(e:Event)
    {
        fla.setState(e.currentTarget.id)
    }
    PS:
    devi però passare la root alla classe TlinePre come abbiamo visto qualche post fà...

    ;)

  3. #3
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    thanks flep .mi metto subito al lavoro :-p

  4. #4
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    flep provato e diciamo che "disabilita" il pulsante
    anche se in realta io pensavo fosse come in as2.0 che disabilitando con
    mc.enabled=false
    si eliminasse anche la possibilita di scatenare l'evento over ...

    ma non è cosi....
    uhmmmmmmmmmmmmm
    mi sa che devo creare una variabile che mi faccia da flag per dire se lanciare o no il metodo mc_over o mc_out dopo aver scatenato l'evento

    o è possibile disabilitare il listener e poi abilitarlo?

  5. #5
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Allora nel metodo setState, invece di usare enabled, rimuovi i listeners se la i==n e aggiungili nell' else :)

  6. #6
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    flep sto provando in diversi modi a rimuoverlo

    ad esempio


    Code:
    		public function setState(n:int):void
    		{
    			 trace(n)
    			 for(var i:int=0;i<btn_array.length;i++)
    			 {
    			  if(n==i)
    			  {
    			   this[btn_array[i]].enabled=false;
    			  this[btn_array[i]].removeEventListener(Event.ENTER_FRAME,prev);
       			   //this[btn_array[i]].removeEventListener(Event.ENTER_FRAME,nextf);
    			  }
    			  else
    			  {
    			   this[btn_array[i]].enabled=true;
    			  }
    			 }
    		}
    ma il risultato è sempre accesso alla proprieta non definita prev

  7. #7
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    Perchè rimuovi ENTER_FRAME ?

    Se non vuoi che il bottone sia cliccabile una volta cliccato ( a meno che non ne venga cliccato un altro ) allora devi rimuovere i MOUSE_vari...

  8. #8
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    eh si flep c'hai ragione.......

    purtroppo l'errore continua ad esserci

    accesso alla proprieta non definita mc_over

    Code:
    this[btn_array[i]].removeEventListener(MouseEvent.ROLL_OVER,mc_over);

  9. #9
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11
    private function mc_over(e:Event)

    è privata, non puoi accedere :)

    mettila public :)

  10. #10
    Senior Member Flash Obsessed mariano.martucci is on a distinguished road
    Join Date
    Jan 1970
    Posts
    158
    Rep Power
    44
    flep giusto un secondo fa avevo capito sto problema
    l'ho messa public ........
    ho messo public tutti i metodi di tline è diventata talmente pubblica che sembra un vip televisivo :-p

    ma cavolo sempre lo stesso errore

    uhmmmmmmmmmmmmmm

+ Reply to Thread
Page 1 of 4 1 2 3 ... LastLast

Similar Threads

  1. Sistema di votazioni con Flash CS3
    By Flep in forum Utilità di FlepStudio
    Replies: 29
    Last Post: 29-10-10, 12:38
  2. Informazioni hardware di sistema
    By johnbocc in forum Actionscript 3.0 avanzato
    Replies: 0
    Last Post: 28-05-09, 09:20
  3. Sistema Votazioni
    By Garet in forum AIUTO utilità free
    Replies: 0
    Last Post: 17-12-08, 20:19
  4. Problema con il sistema votazioni.
    By marco792005 in forum AIUTO utilità free
    Replies: 2
    Last Post: 17-08-08, 22:16
  5. Sistema News, problema accavallamento news
    By dierre in forum Actionscript 3.0 base
    Replies: 9
    Last Post: 05-06-08, 16:36

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