• User Attivo

    Ciao Flep, scusami ancora..
    Ho riscontrato un piccolo bug con l'ultimo codice, ho provato a ragionarci un pò ma mi risulta difficile capire come sistemarlo.
    Cliccando sui tasti per far partire l'mp3, ho notato che la prima riga fa partire il brano 2 anzichè il primo; così la 2 fa partire il brano 3 e così via...
    C'è un modo per ovviare questo problema? Anche perchè il brano 15 diventa undifined, non esistendo il file corrispondente.

    Cmq finora il tuo aiuto è stato fondamentale, e sono sicuro lo sarà nuovamente. Ti ringrazio ancora una volta per la disponibilità.
    Ciao ciao


  • Super User

    Il problema era il codice che mi avevi passato utilizzava duplicateMovieClip e un ciclo sbagliato.
    Te l'ho sistemato:

    
    var clips_array:Array=new Array();
    var posizioni_array:Array=new Array();
    var artisti_array:Array=new Array();
    var titoli_array:Array=new Array();
    var url_array:Array=new Array();
    var container:MovieClip=this.createEmptyMovieClip('container_mc',this.getNextHighestDepth());
    var ln:Number=15;
    var spacer:Number=10;
    var s:Sound;
    var xml:XML=new XML();
    for (var i:Number=0;i<ln;i++) 
    {
     var newY:Number=i*(container._height+spacer);
     var duplicate:MovieClip=container.createEmptyMovieClip('clip_'+i+'_mc',container.getNextHighestDepth());
     setUpContainer(duplicate);
     duplicate._y=duplicate._height*i+5*i;
     duplicate.id=i;
     setEvent(duplicate);
     clips_array.push(duplicate);
     var field_0:TextField=duplicate.createTextField('positione_txt',duplicate.getNextHighestDepth(),0,0,0,0);
     var field_1:TextField=duplicate.createTextField('artista_txt',duplicate.getNextHighestDepth(),0,0,0,0);
     var field_2:TextField=duplicate.createTextField('titolo_txt',duplicate.getNextHighestDepth(),0,0,0,0);
     setText(field_0);
     setText(field_1);
     setText(field_2);
     field_1._x=field_0._x+field_0._width+30;
     field_2._x=250;
    }
    xml.ignoreWhite=true;
    xml.onLoad=function(ok:Boolean)
    {
     if(ok)
     {
      var node:XMLNode=this.firstChild;
      var n:Number=node.childNodes.length;
      for(var i:Number=0;i<n;i++)
      {
       posizioni_array.push(node.childNodes*.attributes['posizione']);
       artisti_array.push(node.childNodes*.attributes['artista']);
       titoli_array.push(node.childNodes*.attributes['titolo']);
       url_array.push(node.childNodes*.attributes['url']);
      }
      initText();
     }
     else
      trace('XML error!');
    }
    xml.load('lista.xml');
    function initText()
    {
     for(var i:Number=0;i<clips_array.length;i++)
     {
      clips_array*.positione_txt.text=posizioni_array*;
      clips_array*.artista_txt.text=artisti_array*;
      clips_array*.titolo_txt.text=titoli_array*;
     }
    }
    
    function setUpContainer(mc:MovieClip):Void 
    {
     mc.beginFill(0x99943E,80);
     mc.lineTo(Stage.width,0);
     mc.lineTo(Stage.width,20);
     mc.lineTo(0,20);
     mc.lineTo(0,0);
     mc.endFill();
    }
    function setText(t:TextField):Void
    {
     t.setNewTextFormat(getFormat());
     t.multiline=false;
     t.selectable=false;
     t.autoSize=true;
     t.embedFonts=true;
    }
    function getFormat():TextFormat
    {
     var format:TextFormat=new TextFormat();
     format.font='Arial';
     format.color=0x0;
     format.size=12;
     return(format);
    }
    function setEvent(m:MovieClip):Void
    {
     m.onPress=function():Void
     {
      s.stop();
      s=new Sound();
      s.loadSound(url_array[this.id],true);
      s.start();
     }
    }
    
    

  • User Attivo

    Flep, non so che dire. E' esattamente come volevo: perfetto.
    Non avrei saputo come fare altrimenti.. L'unica cosa che ero riuscito a fare era pure sbagliata 🙂
    Grazie dell'aiuto.
    Ciao ciao!!


  • User Attivo

    Scusa **Flep **se intervengo in questa discussione...
    Dici che si potrebbe fare la stessa cosa con delle immagini (quindi facendo piu' o meno quanto avevo chiesto in questo post: http://www.giorgiotave.it/forum/flash-actionscript/38015-gestione-immagini-movimento.html)?
    Intendo sfruttando questo script e creando un xml contenente i percorsi delle immagini da visualizzare... altri suggerimenti in merito sarebbero molto graditi!

    Grazie! 😉


  • Super User

    Si potrebbe fare, solo che la cosa è più complessa in quanto devi caricare dei files esterni e dargli un preload per ognuno, quindi bisognerebbe lavorare per classi. In più devi fare un push in un Array di ogni immagine caricata per tenerne traccia e richiamarla quando e come ti occorre.

    Mi servirebbe una mezzoretta per farti un esempio ma al momento mezzora per me è come trovare una pepita d'oro in una stalla 😞


  • User Attivo

    @Flep said:

    Si potrebbe fare, solo che la cosa è più complessa in quanto devi caricare dei files esterni e dargli un preload per ognuno, quindi bisognerebbe lavorare per classi. In più devi fare un push in un Array di ogni immagine caricata per tenerne traccia e richiamarla quando e come ti occorre.

    Mi servirebbe una mezzoretta per farti un esempio ma al momento mezzora per me è come trovare una pepita d'oro in una stalla 😞

    Direi che sei fantastico! Ottimi consigli che girero' subito agli amici del forum per vedere se qualcuno puo' darmi una mano a renderli operativi (anche a pagamento s'intende...), poi magari vi passo il codice (A GRATIS!!!) come ringraziamento...
    Speriamo qualcuno riesca a sviluppare il codice! 😉


  • Super User

    Bè se cerchi qualcuno che te la faccia a pagamento, io sono disponibile. 🙂


  • User Attivo

    @Flep said:

    Bè se cerchi qualcuno che te la faccia a pagamento, io sono disponibile. 🙂

    Be', ti chiedo scusa se non l'avevo specificato... sono in contatto con un altro utente ma vista la tua esperienza potrei affidare a te la cosa!
    Ci sentiamo in privato, OK? Ti mando subito un PM! 😉


  • User Attivo

    Hey Flep, sono tornato!!! 🙂 Sei contento?
    Vorrei fare un'implementazione allo script, solo che come al solito non sono capace di ottenere quello che voglio, oppure ottengo cose diverse..

    La domanda è: sarebbe possibile fare in modo che cliccando su un brano compaia qualcosa, un pallino, un'altoparlante, una qualsiasi cosa per far capire che quella traccia sta andando? L'ideale sarebbe un movieclip, io ho provato con attachMovie ma non ne sono uscito.. Soprattutto perchè quando l'utente clicca su un brano dopo averne già ascoltato uno il movieclip dovrebbe sparire. L'idea è una cosa simile..

    http://www.djjosephb.com/esempio.html

    Grazie tante.
    Ciao ciao
    Cecco


  • Super User

    Ciao,
    metti all'inizio dello script:
    var clip_mc:MovieClip;

    Poi nell'azione on Press scrivi:

    
    clip_mc.removeMovieClip();
    clip_mc.attachMovie('nome_clip','nuovo_nome_clip',_root.getNextHighestDepth());
    clip_mc._x=m._x;
    clip_mc._y=m._y;
    
    

    Sistema la _x e la _y a tuo piacere


  • User Attivo

    Non so se sbaglio qualcosa, ma non va.. 😞
    Io ho fatto un movieclip e gli ho dato l'identificatore circle_mc
    Poi ho fatto le modifiche che mi hai detto e il codice è diventato questo:

    var clips_array:Array = new Array();
    var posizioni_array:Array = new Array();
    var artisti_array:Array = new Array();
    var titoli_array:Array = new Array();
    var url_array:Array = new Array();
    var container:MovieClip = this.createEmptyMovieClip('container_mc', this.getNextHighestDepth());
    var clip_mc:MovieClip;
    var ln:Number = 18;
    var spacer:Number = 10;
    var s:Sound;
    var xml:XML = new XML();
    for (var i:Number = 0; i<ln; i++) {
    	var newY:Number = i*(container._height+spacer);
    	var duplicate:MovieClip = container.createEmptyMovieClip('clip_'+i+'_mc', container.getNextHighestDepth());
    	setUpContainer(duplicate);
    	duplicate._y = duplicate._height*i+10*i;
    	duplicate.id = i;
    	setEvent(duplicate);
    	clips_array.push(duplicate);
    	var field_0:TextField = duplicate.createTextField('positione_txt', duplicate.getNextHighestDepth(), 5, 2, 0, 0);
    	var field_1:TextField = duplicate.createTextField('artista_txt', duplicate.getNextHighestDepth(), 5, 2, 0, 0);
    	var field_2:TextField = duplicate.createTextField('titolo_txt', duplicate.getNextHighestDepth(), 5, 2, 0, 0);
    	setText(field_0);
    	setText(field_1);
    	setText(field_2);
    	field_1._x = field_0._x+field_0._width+40;
    	field_2._x = 230;
    }
    xml.ignoreWhite = true;
    xml.onLoad = function(ok:Boolean) {
    	if (ok) {
    		var node:XMLNode = this.firstChild;
    		var n:Number = node.childNodes.length;
    		for (var i:Number = 0; i<n; i++) {
    			posizioni_array.push(node.childNodes*.attributes['posizione']);
    			artisti_array.push(node.childNodes*.attributes['artista']);
    			titoli_array.push(node.childNodes*.attributes['titolo']);
    			url_array.push(node.childNodes*.attributes['url']);
    		}
    		initText();
    	} else {
    		trace('XML error!');
    	}
    };
    xml.load('produzioni/dance/dance.xml');
    function initText() {
    	for (var i:Number = 0; i<clips_array.length; i++) {
    		clips_array*.positione_txt.text = posizioni_array*;
    		clips_array*.artista_txt.text = artisti_array*;
    		clips_array*.titolo_txt.text = titoli_array*;
    	}
    }
    function setUpContainer(mc:MovieClip):Void {
    	mc.beginFill(0x99943E, 80);
    	mc.lineTo(440, 0);
    	mc.lineTo(440, 20);
    	mc.lineTo(0, 20);
    	mc.lineTo(0, 0);
    	mc.endFill();
    }
    function setText(t:TextField):Void {
    	t.setNewTextFormat(getFormat());
    	t.multiline = false;
    	t.selectable = false;
    	t.autoSize = true;
    	t.embedFonts = true;
    }
    function getFormat():TextFormat {
    	var format:TextFormat = new TextFormat();
    	format.font = "myfont";
    	format.color = 0xFFFFFF;
    	format.size = 8;
    	return (format);
    }
    function setEvent(m:MovieClip):Void {
    	m.onPress = function():Void  {
    		s.stop();
    		s = new Sound();
    		s.loadSound(url_array[this.id], true);
    		s.start();
    		clip_mc.removeMovieClip();
    		clip_mc.attachMovie('circle_mc', 'circle'+i+'_mc', _root.getNextHighestDepth());
    		clip_mc._x = m._x+32;
    		clip_mc._y = m._y+3;
    	};
    }
    
    

    Ma niente.. Cosa posso fare?
    Grazie, ciao.


  • Super User

    Questo non va bene:
    'circle'+i+'_mc'

    la i è undefined, non sei dentro un ciclo.

    Fai così:
    dai nome identificatore 'mc_circle' e nuovo nome 'circle_mc'


  • User Attivo

    Ok, fatto.. Non va 😞 😞 😞
    Non compare nulla, è come se non l'avessi nemmeno aggiunto.
    Ed ora??? Non riesco proprio ad uscirne..


  • Super User

    Fai dei trace.
    Cerca di capire dove è il problema.

    Scrivi
    s.stop();
    s = new Sound();
    s.loadSound(url_array[this.id], true);
    s.start();
    clip_mc.removeMovieClip();
    clip_mc.attachMovie('circle_mc', 'circle'+i+'_mc', _root.getNextHighestDepth());
    trace(clip_mc);
    clip_mc._x = m._x+32;
    clip_mc._y = m._y+3;


  • User Attivo

    Già fatto... Mi restituisce undefined.

    Ma sei sicuro che questo

    var clip_mc:MovieClip;
    

    vada bene così? Io e le variabili non siamo proprio amici amici, ma a me sembra che manchi qualcosa.. Altrimenti cosa può essere?


  • Super User

    Controlla l'identificatore perchè la variabile va benissimo


  • User Attivo

    Niente, l'identificatore è ok..
    Se ti va posto un link con tutto zippato, io non capisco cosa può essere sbagliato.

    Ciao


  • Super User

    cosa c'è scritto nell'identificatore ?


  • User Attivo

    Quello che mi hai suggerito tu.. mc_circle


  • Super User

    no, chiamalo circle_mc e funzionerà 😉

    ps: vedi questa riga:
    clip_mc.attachMovie('circle_mc', 'circle'+i+'_mc', _root.getNextHighestDepth());
    il primo parametro è il nome dell'identificatore 🙂