Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Classe Action Script Esterna

    Salve,
    dovrei realizzare un progetto un pò complesso che comprenda le seguenti casatteristiche:
    1.sullo stage devono esserci a turno delle movieClip
    2.al click su due pulsanti di avanti e indietro si passa alla movieClip successiva

    Per ora sn giunto a questo punto:
    nella mia timeline ho inserito soltanto i due pulsanti di [AVANTI] e [INDIETRO]. Nella libreria ho creato le diverse scene, sotto forma di movieClip: scena1, scena2, scena3 etc...
    Ho creato una classe esterna, nella quale vorrei creare una funziona la quale alla pressione del pulsante avanti incolli (addChild) la scena richiesta, alla pressione del pulsante indietro rimuova (removeChild) la scena corrente e incolli quella successiva. Ora come avete notato le scene sono in successione e volevo sfruttare la numerazione: 1,2,3...etc.. per agevolare il tutto.
    Fino ad ora ho implementato così la classe:


    ///codice////
    public class Fiore extends MovieClip
    {
    private var scena1:MovieClip= new Scena1();
    private var scena2:MovieClip= new Scena2();
    private var scena3:MovieClip= new Scena3();
    private var num:Number=0;

    public function Fiore(){
    init()
    }
    private function init(){
    num++;
    addChild(scena1);
    //////array contenente i due pulsanti avanti e indietro////

    function setClick(evt:MouseEvent):void{
    if(evt.currentTarget.id==0){
    num--;

    }
    if(evt.currentTarget.id==1){
    num++;

    }
    }
    }
    }

    Nella funziona setClick, al click su avanti implemento num, che diventa la prima volta 2, la terza volta 3 etc... e praticamente vorrei creare una variabile che corrisponda a "scena"+num, quindi scena+2, quindi addChild(scena2) etc..e così via..ma non ci riesco...
    mi da sempre errore...aiuto!!!

    io avevo provato così:
    removeChild(MovieClip("scena"+num));

    ma mi dice assegnazione forzata non riuscita, impossibile convertire scena1 in flash.display.Movieclip.....

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ti consiglio di usare un array per gestire le scene e ti consiglio di iniziare la numerazione da 0 invece che da 1

    Codice PHP:
    for (var i:uint=0i<3i++) {
        var 
    c:Class = getDefinitionByName("Scena"+i) as Class;
        
    arrayScene.push(new c());

    E' solo un input buttato giù molto in fretta, vedi cosa ti dice...

  3. #3
    ti ringrazio per il consiglio davvero.
    però nella funziona setClick cosa dovrei inserire?

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Guarda, l'ho buttata al volo e, salvo aver fatto grossolani errori di valutazione delle condizioni, dovrebbe già andare bene per il caso esposto.
    Codice PHP:
    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        public class 
    Fiore extends MovieClip {
            private var 
    arrayScene:Array;
            private var 
    index:int;
            private var 
    level:int;
            public function 
    Fiore () {
                
    arrayScene = [];
                for (
    index 0index 3index++) {
                    var 
    c:Class = getDefinitionByName("Scene" i) as Class;
                    
    arrayScene.push(new c());
                }
                
    index 0;
                if (
    stageinit();
                else 
    addEventListener(Event.ADDED_TO_STAGEinit);
            }
            private function 
    init (evt:Event=null):void {
                
    addChild(index[0]);
                
    level getChildIndex(index[0]);
                
    avanti.addEventListener(MouseEvent.CLICKsetClick);
                
    indietro.addEventListener(MouseEvent.CLICKsetClick);
            }
            private function 
    setClick(evt:MouseEvent):void {
                if (
    evt.target == avantiindex = (index arrayScene.length 2) ? index 0;
                else 
    index = (index 0) ? index-0;
                
    addChildAt(arrayScene[index], level);
            }
        }


  5. #5
    Ciao e grazie per l'aiuto che mi stai dando.
    ho riscritto il tuo codice e alla fine ho ottenuto questo:

    package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.utils.getDefinitionByName;


    public class Fiore extends MovieClip {
    private var arrayScene:Array;
    private var i:int;
    private var level:int;


    public function Fiore () {
    arrayScene = [];
    for (i = 0; i < 7; i++) {
    var c:Class = getDefinitionByName("Scena" + i) as Class;
    arrayScene.push(new c());
    }
    i = 0;
    if (stage){

    init();
    }else{
    addEventListener(Event.ADDED_TO_STAGE, init);
    }
    }

    private function init (evt:Event=null):void {
    addChild(i[0]);
    level = getChildIndex(i[0]);
    menu.avanti.addEventListener(MouseEvent.CLICK, setClick);
    menu.indietro.addEventListener(MouseEvent.CLICK, setClick);
    }
    private function setClick(evt:MouseEvent):void {
    if (evt.target == menu.avanti){
    i = (i < arrayScene.length - 2) ? i + 1 : 0;
    }else {
    i = (i > 0) ? i-1 : 0;
    addChildAt(arrayScene[i], level);
    }
    }
    }
    }

    come vedi ho soldi cambiato index con i, e aggiunto qualche parentesi che non c'era.
    Il problema è che quando lancio l'swf mi dice
    Impossibile trovare la proprietà 0 su Number e nessun valore predefinito presente..., l'errore me lo da su init()....

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ho sbagliato nel codice, ho inserito index invece di arrayScene, come invece avrebbe dovuto essere, piuttosto non vedo quali parentesi manchino.

    Codice PHP:
    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        public class 
    Fiore extends MovieClip {
            private var 
    arrayScene:Array;
            private var 
    index:int;
            private var 
    level:int;
            public function 
    Fiore () {
                
    arrayScene=[];
                for (
    index=0index 3index++) {
                    var 
    c:Class=getDefinitionByName("Scene" i)  as  Class;
                    
    arrayScene.push (new c());
                }
                
    index=0;
                if (
    stage) {
                    
    init ();
                } else {
                    
    addEventListener (Event.ADDED_TO_STAGE,init);
                }
            }
            private function 
    init (evt:Event=null):void {
                
    addChild (arrayScene[0]);
                
    level=getChildIndex(arrayScene[0]);
                
    avanti.addEventListener (MouseEvent.CLICK,setClick);
                
    indietro.addEventListener (MouseEvent.CLICK,setClick);
            }
            private function 
    setClick (evt:MouseEvent):void {
                if (
    evt.target == avanti) {
                    
    index=index arrayScene.length 2?index 1:0;
                } else {
                    
    index=index 0?index 1:0;
                }
                
    addChildAt (arrayScene[index],level);
            }
        }


  7. #7
    grazie.
    scusa non volevo insinuare nulla...
    pensavo che nel codice tipo questo:

    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, init);

    ci andassero le parentesi graffe..ma sicuramento mi sbagliavo.

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ah sì, è un piccolo "shorthand" di alcuni linguaggi, tra cui anche AS e in pratica consiste nel fatto che se mancano le graffe nell'if viene eseguita solo la riga successiva per la condizione, e allo stesso modo anche per l'else, quindi in quel caso è perfettamente lecito sia con le graffe che senza

  9. #9
    ok va bene. ho imparato una cosa nuova allora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.