Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [AS3] far scorrere dati xml

    ciao a tutti in questo mio primo progetto AS3 con Flash CS3 (lo so sono indietro....) ho la necessita di far scorrere a video , tipo titoli di coda, dei dati da un file XML.
    1- il file xml e' cosi' strutturato:
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <partite>
    	<partita sq="MILAN-BENFICA" ris="0-0" />
    	<partita sq="MILAN-BENFICA" ris="2-0" />
    	<partita sq="MILAN-BENFICA" ris="1-0" />
    	<partita sq="MILAN-BENFICA" ris="1-1" />
    	<partita sq="MILAN-BENFICA" ris="0-3" />
    	<partita sq="MILAN-BENFICA" ris="3-0" />
    	<partita sq="MILAN-BENFICA" ris="4-0" />
    </partite>
    2- il codice as3 per il caricamento del file xml

    codice:
    var s:String = "lista2.xml";
    var r:URLRequest = new URLRequest(s);
    var l:URLLoader = new URLLoader(r);
    l.addEventListener(Event.COMPLETE, completeHandler);
    function completeHandler(e:Event) {
        var d:XMLList = new XML(l.data).partita;
        for(var i:int = 0; i < d.length(); i++){
    // cosi' nel pannello di output visualizzo i vari nodi
            trace(d[i].attribute('sq'));
            trace(d[i].attribute('ris'));
            trace('________________________');
        }
    }
    Questo e' Pannello output

    codice:
    MILAN-BENFICA
    0-0
    ________________________
    MILAN-BENFICA
    2-0
    ________________________
    MILAN-BENFICA
    1-0
    ________________________
    MILAN-BENFICA
    1-1
    ________________________
    MILAN-BENFICA
    0-3
    ________________________
    MILAN-BENFICA
    3-0
    ________________________
    MILAN-BENFICA
    4-0
    ________________________
    3- se metto sullo stage una casella di testo dinamica istanziata 'testo',opzioni: 'multiriga' e inserisco questa riga dopo i trace :
    codice:
    testo.text=d[i].attribute('sq')+"  "+d[i].attribute('ris');

    pensavo di ottenere la lista MA mi visualizza solo l'ultimo nodo:
    MILAN-BENFICA 4-0

    VI CHIEDO:

    4- COME VISUALIZZARE TUTTI I NODI NEL CAMPO DI TESTO
    5 - una volta visualizzati : COME FAR SCORRERE IL TUTTO (come da titolo )


    come primo progetto in AS3 qualcosa ho fatto.. pero' ho bisogno di una mano da voi....

    grazie..

    Maurizio

    -Nextart.it Graphic Solutions

  2. #2

    up

    aiuto.....

    crescenzo, enigma, rempox, and80 dove siete? :-)
    -Nextart.it Graphic Solutions

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Fammi capire, in pratica quello che devi fare è far scorrere in maniera continua queste news che si aggiornano direttamente da xml, però non tipo newsticker, ma in maniera verticale.
    Se quanto ho scritto sopra è corretto, quello che ti consiglio di fare è una cosa abbastanza semplice, crei un campo di testo via AS e lì ci inserisci tutto il testo ricavato dall'xml, poi crei due copie bitmap di questo campo e le inserisci sotto ad una maschera e con un enterframe le fai scorrere scambiandone i posti ogni volta che escono dalla maschera.
    E' un processo non molto diverso da AS2, l'unica cosa è che non ti devi preoccupare del posizionamento del campo di testo, che rimarrà fuori dalle liste di visualizzazione e quindi non peserà sul rendering del filmato.
    Se riesco più tardi ti passo una bozza di codice, cercando di leggerlo e comprenderlo insieme.

  4. #4
    Ciao And80, grazie per la risposta.

    Fammi capire, in pratica quello che devi fare è far scorrere in maniera continua queste news che si aggiornano direttamente da xml, però non tipo newsticker, ma in maniera verticale.
    Si, come fossero titoli di coda di un film e poi finito riparte.

    crei un campo di testo via AS
    ok posso farcela

    poi crei due copie bitmap di questo campo e le inserisci sotto ad una maschera e con un enterframe le fai scorrere scambiandone i posti ogni volta che escono dalla maschera.
    questo non l'ho capito

    Se riesco più tardi ti passo una bozza di codice, cercando di leggerlo e comprenderlo insieme.
    ok.... perfetto...


    ciao
    e grazie
    -Nextart.it Graphic Solutions

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da nextart

    poi crei due copie bitmap di questo campo e le inserisci sotto ad una maschera e con un enterframe le fai scorrere scambiandone i posti ogni volta che escono dalla maschera.
    questo non l'ho capito
    Ti spiego, in pratica un campo di testo non sarebbe sufficiente per lo scorrimento, ce ne vorrebbero due, ma siccome muovere un campo di testo risulta più faticoso per la cpu, noi ci creiamo delle "fotocopie" grafiche di quel campo di testo, attraverso la classe BitmapData, che ci consente di farlo, e poi usiamo quelle due, in pratica come se tentassimo di spostare due immagini in bianco e nero.

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Mi son lasciato trascinare, e praticamente l'ho scritto da solo.
    Facciamo così, te lo scrivo e lo provi, poi lo commentiamo insieme.

    Codice PHP:
    var v:Number 1;

    var 
    t:TextField = new TextField();
    t.autoSize "left";
    t.width 200;
    t.multiline true;
    t.wordWrap true;
    t.defaultTextFormat = new TextFormat("_sans"110x000000falsefalsefalse''''TextFormatAlign.LEFT0000);

    var 
    s:Sprite addChild(new Sprite()) as Sprite;
    s.scrollRect = new Rectangle(0,0200100);
    var 
    one:Bitmap s.addChild(new Bitmap()) as Bitmap;
    var 
    two:Bitmap s.addChild(new Bitmap()) as Bitmap;

    var 
    l:URLLoader = new URLLoader(new URLRequest("lista02.xml"));
    l.addEventListener(Event.COMPLETEcompleteHandler);

    function 
    completeHandler (evt:Event):void {
        try {
            var 
    temp:XMLList = new XML(evt.target.data)["partita"];
            for (var 
    i:uint=0i<temp.length(); i++) {
                
    t.appendText(String(temp..@sq[i]) + " : " String(temp..@ris[i])+"\n\n");
            }
            var 
    b:BitmapData = new BitmapData(t.widtht.heighttrue0x00808080);
            
    b.draw(t);
            
    one.bitmapData two.bitmapData b;
            
    two.one.one.height;
            
    s.addEventListener(Event.ENTER_FRAMEenterFrameHandler);
        } catch (
    err:Error) {
            
    // errori!
        
    }
    }
    function 
    enterFrameHandler (evt:Event):void {
        if (
    one.< -one.heightone.two.two.height;
        if (
    two.< -two.heighttwo.one.one.height;
        if (
    one.two.y) {
            
    one.-= v;
            
    two.one.one.height;
        } else {
            
    two.-= v;
            
    one.two.two.height;
        }


  7. #7
    ora e' piu' chiaro.....

    grandeeeeeeeeeeeeee....
    ok pero' lo posso testare stasera , qui in ufficio non ho ancora CS3.. :-(

    stay tuned...

    e' il passaggio da as2 ad as3 su cui sto sbattendo un po' la testa, ma credo che una volta assimilato sia MEGLIO del vecchio linguaggio.....


    grazie ancora...
    -Nextart.it Graphic Solutions

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Se ne assimili i concetti basilari, vedrai che il ragionamento sarà mirato più facilmente alle soluzioni. Vedi in questo caso il fatto di usare un solo campo di testo e di non muovere quello, ma usare delle copie, cosa che si poteva fare anche in AS2, ma in quel caso comunque dovevi renderizzare il campo di testo per copiarlo, riducendo, seppur di poco, il vantaggio di usare delle copie bitmap.

  9. #9
    chiaro.-...
    -Nextart.it Graphic Solutions

  10. #10


    eccomi, come mi aspettavo (grande and80) funziona tutto alla perfezione.!!

    posto il codice con i miei commenti
    dovrebbero essere corretti, c'e il punto con ?? che pero' non ho capito bene....
    codice:
    var v:Number = 0.5; //velocità dello scorrimento 
    // creo il campo di testo e imposto le varie proprietà 
    var t:TextField = new TextField();
    t.autoSize = "left";
    t.width = 300;
    t.multiline = true;
    t.wordWrap = true;
    t.defaultTextFormat = new TextFormat("_sans", 11, 0x000000, false, false, false, '', '', TextFormatAlign.CENTER, 0, 0, 0, 0);
    //creo il rettangolo in cui far scorrere le info 
    var s:Sprite = addChild(new Sprite()) as Sprite;
    // imposto (x,y, width,height) del rettangolo 
    s.scrollRect = new Rectangle(0,0, 300, 200);
    //creo le "fotocopie" grafiche del campo di testo 
    var one:Bitmap = s.addChild(new Bitmap()) as Bitmap;
    var two:Bitmap = s.addChild(new Bitmap()) as Bitmap;
    //carico i dati dal file XML 
    var l:URLLoader = new URLLoader(new URLRequest("lista2.xml"));
    l.addEventListener(Event.COMPLETE, completeHandler);
    //una volta caricati i dati li gestisco 
    function completeHandler (evt:Event):void {
        try {
    		//imposto il nodo da visitare 
            var temp:XMLList = new XML(evt.target.data)["partita"];
    		//ciclo i nodi e "appendo" il testo presente nel file XML 
            for (var i:uint=0; i<temp.length(); i++) {
    	//recupero gli attributi del nodo ["partita"] 
                t.appendText(String(temp..@datap[i]) + " "+String(temp..@comp[i]) + " "+ String(temp..@sq[i]) + " : " + String(temp..@ris[i])+"\n\n");
            }
    	// ???
            var b:BitmapData = new BitmapData(t.width, t.height, true, 0x00808080);
            b.draw(t);
    		one.bitmapData = two.bitmapData = b;
            two.y = one.y + one.height;
    	//imposto il istener x la funzione del movimento 
            s.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        } catch (err:Error) {
            // errori!
        }
    }
    // imposto il movimento 
    function enterFrameHandler (evt:Event):void {
        if (one.y < -one.height) one.y = two.y + two.height;
        if (two.y < -two.height) two.y = one.y + one.height;
        if (one.y < two.y) {
            one.y -= v;
            two.y = one.y + one.height;
        } else {
            two.y -= v;
            one.y = two.y + two.height;
        }
    }
    per farti capire meglio ti posto il link per vedere il progetto "completo"
    http://www.nextart.it/public/forum.html.it/xml_slide/
    praticamente, carico un filmato .flv in un player da me fatto, sopra scorrono le scritte delle partite e se clicchi su Play parte un video in loop.


    andiamo avanti., se vuoi .... :-)
    sono riuscito a
    - centrare il testo e aggiungere altri 2 attributi al nodo.
    - al click sul tasto PLAY far sparire la lista e farla riapparire quando si preme il tasto PAUSA
    codice:
    start_btn.addEventListener(MouseEvent.CLICK, myClickReaction4);
    function myClickReaction4 (a:MouseEvent):void{
    trace("mioPLAY clicked!");
    img.alpha = 0;
    one.visible= false;
    two.visible= false;
    myVideo.play();
    
    }
    
    pausa_btn.addEventListener(MouseEvent.CLICK, myClickReaction2);
    function myClickReaction2 (e:MouseEvent):void{
    trace("PAUSE clicked!");
    img.alpha = 100;
    one.visible= true;
    two.visible= true;
    }


    - volevo pero' che l'area partisse da 30px dall'alto, e modificando i valori qui
    s.scrollRect = new Rectangle(0,0, 300, 200); con questi (0,30,300,200), non ottengo pero' modifiche, il testo "finisce" troppo in alto. ci sono altri parametri da modificare?
    - e' possibile impostare un sfondo al rettangolo in modo da leggere meglio le scritte?

    - al mouseOver si puo' fermare il movimento delle scritte?


    grazie and80

    -Nextart.it Graphic Solutions

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.