Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di NAP
    Registrato dal
    Jan 2001
    Messaggi
    4,398

    [AS2] Salvare l'utima posizione dei mc che ho "draggato"

    Titolo ostico, ma tenterò una spiegazione.

    Immaginate un'swf in cui ci sono 100 mc draggabili;
    A termine delle operazioni (...ho spostato tutti mc in luoghi diversi, rispetto alle posizioni che avevano al primo caricamento) vorrei che le nuove posizioni di tutti i mc fossero "salvabili" in qualche modo, per far sì che, quando riapro l'swf col browser, io possa continuare a spostarli, partendo dall'ultima "configurazione".
    Insomma: si tratta di un puzzle, e vorrei che ognuno degli utenti potesse salvare il suo lavoro lasciato "a metà" per poterlo riaprire "domani" da quel punto preciso (es.: "un terzo del paesaggio già completato").

    Fantascienza, o conoscenza ?

    Come da titolo: il tutto in AS2, perché uso Flash ver8.
    A volte la diplomazia va condita con un pizzico di siluri fotonici. (K. Janeway)

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Direi che a occhio è possibile fare qualcosa utilizzando gli shared object (i cookies di flash) che salvano un file nel sistema di chi visualizza l'swf, quindi in pratica solo in quel sistema si vedranno i progressi del puzzle realizzato, così come in un altro sistema si vedranno i progressi di chi ha aperto il file in quel sistema.

  3. #3
    Utente di HTML.it L'avatar di NAP
    Registrato dal
    Jan 2001
    Messaggi
    4,398
    Hai centrato in pieno esattamente ciò che vorrei realizzare. Peccato che io non sappia come gestire gli sharedObject (non ne ho mai fatto uso... credo).
    Assodato che mi sei stato preziosissimo, sapresti linkarmi un thread in cui, magari, se ne è parlato in modo soddisfacente? Un trhead in cui magari qualcuno fa esempi concreti sul "come si fa a registrare (scrivere) i cookies nel sistema dell'utente con l'uso degli sharedObject".

    Grazie di nuovo, un Tera !
    A volte la diplomazia va condita con un pizzico di siluri fotonici. (K. Janeway)

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ci sarebbe una vecchia guida tuttora valida, scritta a suo tempo da negatyve per AS1, ma valida anche per AS2: http://flash.html.it/guide/leggi/115...shared-object/

    Dagli un'occhiata perchè ti darà per lo meno la base (che è poi tutto quello che ti serve) per gestirli.

  5. #5
    Utente di HTML.it L'avatar di NAP
    Registrato dal
    Jan 2001
    Messaggi
    4,398
    Per me, quando dici negatyve, è come se avessi detto Sant'ActionScript. Avrei una voglia pazza di sentirlo ma credo che i miei vecchi contatti non siano più validi.

    Avrei un camion di parole per ringraziarti, ancora, ma non sarebbero sufficienti !



    NAP
    A volte la diplomazia va condita con un pizzico di siluri fotonici. (K. Janeway)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    18
    ciao, ... ti aggiungo un esempio di salvataggio delle posizioni dinamiche di movieClip in uno sharedObject
    Codice PHP:
    // ...................................................................
    //  NAME : SharedObjectAS2  
    //         salvataggio in uno SharedObeject delle posizioni 
    //         di MovieClip dopo il Drag and Drop - [AS2] 
    // ...................................................................


    // ... es. sullo stage sono presenti un certo numero di movieClip 
    //     ( nominati : mc1, mc2, ... mcn ) 

    // ... ed un bottone per nuova partita
    btn_newGame.onRelease nuovaPartita;

    // ... numero dei MovieClip presenti sullo Stage  
    var nMC     3;

    // ... crea un Array 
    var mcArray = new Array();

    // ... carica i movieClip presenti sullo stage nell'array 
    for (i=0< (nMC+1); i++)
    {
        
    mcArray[i] = this["mc"+i];
    }


    // ... eventuale visualizzazione della dialog di Adobe 
    //     per l'attivazione e/o aumento della memoria 
    //     da destinare agli sharedObject 
    // System.showSettings(1);


    // ... dichirazione dello Shared Object 
    var puzzleObject:SharedObject;


    // ... ottieni il referenze dello SharedObject e leggi i dati 
    //     (la prima volta viene creato sul disco locale dell'utente)
    // ... in windows dovrebbe trovarsi 
    puzzleObject SharedObject.getLocal("puzzle005");


    // ... verifica se ci sono gdati salvati 
    //     la prima volta la proprieta' .data dello sharedObject 
    //     non ha alcun oggetto salvato 
    //     ( per prima volta si intende anche che lo sharedObject 
    //       sia stato cancellato, ad es. a fine partita  
    //       con il metoto clear() ) 

    // ... il test puo' essere fatto (ad es.) su di un solo oggetto 
    if (puzzleObject.data.mc1 == undefined)
    {
        
    // ... crea tutti gli oggetti da salvare, tanti oggetti 
        //     per quanti movieClip. 
        // ... ed assegnagli gli stessi nomi dei movieClip      
        
    for (i=1< (nMC+1); i++)
        {
            
    puzzleObject.data["mc" i] = new Object();
        }
            
        
    // ... crea le proprieta' dinamiche lastX e lastY ed  
        //     assegnagli le posizioni iniziali dei movieClip.
        
        // ... crea anche le proprieta' iniX e iniY in cui salvare 
        //     le stesse posizioni iniziali (serviranno per le 
        //     nuove partite)
        
    for (i=1< (nMC+1); i++)
        {
            
    puzzleObject.data["mc" i].lastX mcArray[i]._x;
            
    puzzleObject.data["mc" i].lastY mcArray[i]._y;

            
    puzzleObject.data["mc" i].iniX  mcArray[i]._x;
            
    puzzleObject.data["mc" i].iniY  mcArray[i]._y;
        }
    }


    // ... leggi le posizioni degli oggetti salvati nello 
    //     sharedObject ed assegnale alle posizioni dei novieClip 
    for (i=1< (nMC+1); i++)
    {
        
    mcArray[i]._x puzzleObject.data["mc" i].lastX;
        
    mcArray[i]._y puzzleObject.data["mc" i].lastY;
    }




    // ... qui il Drag and Drop dei MovieClip 

    // ... assegna la funzione inizioSpostamento all'evento : onPress
    //     ai movieClip sullo stage 
    for (i=1< (nMC+1); i++)
    {
        
    // ... assegna la funzione
        
    mcArray[i].onPress inizioSpostamento;

        
    // ... aggiungi ai movieClip la proprieta' dinamica id
        //     in cui salvare la i (servira' in seguito) 
        
    mcArray[i].id      i;
    }

    // ... 

    //.............................................................................
    // FUNCTION : inizioSpostamento() 
    //            gestione evento : onPress
    //.............................................................................
    function inizioSpostamento()
    {
        
    // ... associa al movieClip la funzione per la gestione 
        //     dell'evento : onMouseMove
        
    this.onMouseMove spostamento
        
        
    // ... associa al MovieClip la funzione per la gestione 
        //     dell'evento : onMouseUp
        
    this.onMouseUp   fineSpostamento;
        
        
    // ... Ok!, start Drag - inizio spostamento del MovieClip 
        
    this.startDrag();
    }
    //.............................................................................

    //.............................................................................
    // FUNCTION : spostamento() 
    //            gestione evento : onMouseMove
    //.............................................................................
    function spostamento()
    {
        
    // ... eventuali cose da fare durante il trascinamento 
        // ... bla bla
    }
    //.............................................................................

    //.............................................................................
    // FUNCTION : fineSpostamento() 
    //            gestione evento : onMouseUp
    //.............................................................................
    function fineSpostamento()
    {
        
    // ... ferma il trascinamento 
        
    this.stopDrag();
        
        
    // ... rimuovi le funzioni associate 
        
    this.onMouseMove null;
        
    this.onMouseUp   null;
        
        
    // ... altre operazioni
        
        // ... assegna qui le posizioni dell'i-eisimo movieClip in modo 
        //     che, anche se l'utente esce chiudendo la pagine, 
        //     lo SharedObject e' scritto sul disco.
        
    puzzleObject.data["mc" this.id].lastX mcArray[this.id]._x;
        
    puzzleObject.data["mc" this.id].lastY mcArray[this.id]._y;

        
    // ... scrivi!
        // ... se il numero di bytes supera quello riservato 
        //     si visualizzera' la dialog di Adobe, si potrebbe 
        //     evitare indicando un numero di bytes sufficienti 
        //     al salvataggio (fare test)  
        
    puzzleObject.flush(1000);
        
        
    // ... bla bla 
    }
    //.............................................................................

    //.............................................................................
    // FUNCTION : nuovaPartita() 
    //            gestione evento : onRelease cul Bottone btn_NewGame()
    //.............................................................................
    function nuovaPartita()
    {
        
    // ... leggi dagli oggetti salvati nello sharedObject le 
        //     posizioni iniziali 
        
    for (i=1< (nMC+1); i++)
        {
            
    mcArray[i]._x puzzleObject.data["mc" i].iniX;
            
    mcArray[i]._y puzzleObject.data["mc" i].iniY;
        }
        
        
    // ... ora cancella lo Shared object 
        
    puzzleObject.clear();
    }
    //.............................................................................


    //.............................................................................
    // FUNCTION : salvaSharedObject() 
    //            salva le posizioni (o altre proprieta') di tutti i movieClip
    //            ( non utilizzata nell'esempio - usi futuri ) 
    //.............................................................................
    function salvaSharedObject()
    {
        
    // ... salvataggio di una o n proprieta' di tutti i movieClip
        
    for (i=1< (nMC+1); i++)
        {
            
    puzzleObject.data["mc" i].lastX mcArray[i]._x;
            
    puzzleObject.data["mc" i].lastY mcArray[i]._y;
        }
        
        
    // ... scrivi!
        // ... se il numero di bytes supera quello riservato 
        //     si visualizzera' la dialog di Adobe, si potrebbe 
        //     evitare indicando un numero di bytes sufficienti 
        //     al salvataggio  
        
    puzzleObject.flush(1000);
    }
    //............................................................................. 

  7. #7
    Utente di HTML.it L'avatar di NAP
    Registrato dal
    Jan 2001
    Messaggi
    4,398
    È semplicemente fantastico. Funziona come un orologio.

    Eccolo

    Il pulsante, però, lo tolgo: ho riscontrato che al primo avvio le nuove posizioni si scrivono, come tu dicevi, alla semplice chiusura della scheda o del browser.
    Alla ripartenza, se resetto (cancello i dati scritti), portando il tutto alle posizioni originarie, succede che non scrive più, nel senso che:

    Prima ipotesi
    1. apro da link, e gioco
    2. chiudo la scheda, o il browser (in quel momento sto salvando, scrivendo)
    3. riapro il browser e trovo le posizioni salvate

    Seconda ipotesi
    4. apro da link, e gioco un po'
    5. resetto col pulsante
    6. ri-gioco un po' (sposto qualche tessera)
    7. chiudo
    8. riapro
    9. non ha salvato.

    Dal momento che gli utenti debbono mandarmi una screenshot, a dimostrazione del completamento del puzzle (si tratta di chi lo fa prima, e meglio), posso fare a meno del pulsante, sennò penseranno che "a volte funziona" e "altre no".

    Ora vorrei chiederti:
    a. Se aumento i byte a 10.000, evito con certezza la comparsa della dialog box di Adobe?
    b. Come si concilia il fatto che il 99% degli utenti ha di default: "Nega"? (o non c'entra niente?).

    In ogni caso: sei stato preziosissimo, e te ne sono infinitamente grato.

    NAP
    A volte la diplomazia va condita con un pizzico di siluri fotonici. (K. Janeway)

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    18
    ... ho omesso l'inizializzazione dello SharedObject dopo il clear() per il bottone di nuovaPartita

    Codice PHP:
    // ... begin  

    // ... dichirazione dello Shared Object 
    var puzzleObject:SharedObject;

    // ... inizializzazione dello Shared Object 
    initSharedObject();

    // ... etc ... 

    //.............................................................................
    // FUNCTION : nuovaPartita() 
    //.............................................................................
    function nuovaPartita()
    {
        
    // ... leggi dagli oggetti salvati nello sharedObject le 
        //     posizioni iniziali 
        
    for (i=1< (nMC+1); i++)
        {
            
    mcArray[i]._x puzzleObject.data["mc" i].iniX;
            
    mcArray[i]._y puzzleObject.data["mc" i].iniY;
        }
        
        
    // ... ora cancella lo Shared object 
        
    puzzleObject.clear();
        
        
    // ... !!! richiama l'inizializzazione dello Shared Object !!!!
        
    initSharedObject();
    }
    //.............................................................................

    //.............................................................................
    // FUNCTION : initSharedObject() 
    //            inizializzazione dello Shared Object 
    //.............................................................................
    function initSharedObject()
    {
        
    // ... ottieni il referenze dello SharedObject e leggi i dati 
        
    puzzleObject          SharedObject.getLocal("puzzle1");
        
        
    // ... verifica se ci sono dati salvati 

        // ... in questo caso il test puo' essere fatto su di un solo 
        //     oggetto ( es. il primo ) 
        
    if (puzzleObject.data.mc1 == undefined)
        {
            
    // ... crea tutti gli oggetti da salvare, tanti oggetti 
            //     per quanti movieClip. 
            // ... ed assegnagli gli stessi nomi dei movieClip      
            
    for (i=1< (nMC+1); i++)
            {
                
    puzzleObject.data["mc" i] = new Object();
            }
            
            
    // ... crea le proprieta' dinamiche lastX e lastY ed  
            //     assegnagli le posizioni iniziali dei movieClip.
        
            // ... crea anche le proprieta' iniX e iniY in cui salvare 
            //     le stesse posizioni iniziali (serviranno per le 
            //     nuove partite)
            
    for (i=1< (nMC+1); i++)
            {
                
    puzzleObject.data["mc" i].lastX mcArray[i]._x;
                
    puzzleObject.data["mc" i].lastY mcArray[i]._y;

                
    puzzleObject.data["mc" i].iniX  mcArray[i]._x;
                
    puzzleObject.data["mc" i].iniY  mcArray[i]._y;
            }
        }        
        
        
    // ... leggi le posizioni degli oggetti salvati nello 
        //     sharedObject ed assegnale alle posizioni dei novieClip 
        
    for (i=1< (nMC+1); i++)
        {
            
    mcArray[i]._x puzzleObject.data["mc" i].lastX;
            
    mcArray[i]._y puzzleObject.data["mc" i].lastY;
        }
    }
    //............................................................................. 

    ... l'indicazione dei bytes come argomento del metodo flash potrebbe giusto servire a chiedere all'utente un valore max previsto dall'applicazione (una prima volta).
    ( dipende anche se e da come l'utente ha impostato il pannello delle impostazioni generali e quello delle Impostazioni della memorizzazione dei siti Web :

    http://www.macromedia.com/support/do...s_manager.html

    ... il 99% degli utenti nega ?????? non so siceramente se c'e' un modo per "forzare" ...

    altrimenti dovresti pensare a memorizzare le informazioni in tabelle di un Data Base sul Server ( il tutto un po' piu' articolato, DEPENDING ON )

  9. #9
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    Originariamente inviato da NAP
    È semplicemente fantastico. Funziona come un orologio.

    Eccolo

    Il pulsante, però, lo tolgo: ho riscontrato che al primo avvio le nuove posizioni si scrivono, come tu dicevi, alla semplice chiusura della scheda o del browser.
    Alla ripartenza, se resetto (cancello i dati scritti), portando il tutto alle posizioni originarie, succede che non scrive più, nel senso che:

    Prima ipotesi
    1. apro da link, e gioco
    2. chiudo la scheda, o il browser (in quel momento sto salvando, scrivendo)
    3. riapro il browser e trovo le posizioni salvate

    Seconda ipotesi
    4. apro da link, e gioco un po'
    5. resetto col pulsante
    6. ri-gioco un po' (sposto qualche tessera)
    7. chiudo
    8. riapro
    9. non ha salvato.

    Dal momento che gli utenti debbono mandarmi una screenshot, a dimostrazione del completamento del puzzle (si tratta di chi lo fa prima, e meglio), posso fare a meno del pulsante, sennò penseranno che "a volte funziona" e "altre no".

    Ora vorrei chiederti:
    a. Se aumento i byte a 10.000, evito con certezza la comparsa della dialog box di Adobe?
    b. Come si concilia il fatto che il 99% degli utenti ha di default: "Nega"? (o non c'entra niente?).

    In ogni caso: sei stato preziosissimo, e te ne sono infinitamente grato.

    NAP
    è stesso discorso della CHAT 3D.... Ricordi?
    figlio perso e MAI ritrovato....?

  10. #10
    Utente di HTML.it L'avatar di tigerjack
    Registrato dal
    Aug 2003
    Messaggi
    1,661
    Capo! la facciamo resuscitare.. la chat 3D?
    e iaaaaaaaaaaaaaaaaa.....

    ps.
    non potrò mai dimenticare quella notte... io con un febbrone da cavallo... e tu sulla CHAT3D... ti scompisciaVi dalle risate!!!


    BOOOM!

    TJ
    figlio perso e MAI ritrovato....?

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.