Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Lineto

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    53

    Lineto

    Sto cercando di creare una linea da action script in questo modo:
    l utente clicca sullo stage,a quel punto compare la linea retta che parte dal punto cliccato e "segue" il cursore, finchè ricliccando la retta si "ferma", in poche parole come fa la retta di flash.

    Questo è il codice che ho messo:

    createEmptyMovieClip("line_mc", 10);
    line_mc.lineStyle(5, 0xFFFFFF,100);
    _root.sfondo.onRelease= function()
    { xxx=_xmouse;
    yyy=_ymouse;
    line_mc.moveTo(_xmouse,_ymouse);
    line_mc.onEnterFrame = function()
    { line_mc.moveTo(xxx,yyy);
    line_mc.lineTo(_xmouse,_ymouse);
    }}

    Innanzitutto grande handicap è il fatto di quel clip sfondo, che senza quello non riesco a far andare.
    Ma il vero problema è che cn questo codice quello che mi succede (potete provarlo mettendo il codice in stage e creando un clip sfondo grande come lo stage) è che appena clicco la retta compare, segue si il cursore ma "lascia la traccia", cioè lascia dietro di sè tutte le rette che è stata.
    Più facile a vedersi che a dirsi.
    Come risolvo?
    Grazie 1000.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,704
    Per eliminare il problema di dover creare una sorta di pulsante che reagisca agli eventi del mouse, puoi utilizzare un listener.
    Per eliminare la "traccia" lasciata durante il disegno della linea, devi ripulire ogni volta il contenitore prima di ridisegnare la linea. Ti servirà quindi il metodo clear().
    Inoltre al posto dell'evento onEnterFrame utilizzerei un evento onMouseMove, più confacente per quello che devi fare.

    l utente clicca sullo stage,a quel punto compare la linea retta che parte dal punto cliccato e "segue" il cursore, finché ricliccando la retta si "ferma", in poche parole come fa la retta di flash.
    Questo non è del tutto vero.
    Lo "Strumento Linea" di flash non funziona proprio in quel modo.
    Per disegnare una linea si dovrà "premere" il mouse", "trascinare" con il mouse premuto e "rilasciare" il mouse in modo che la linea resti disegnata.

    Il tuo metodo differisce un po' perché prevede che si clicchi una prima volta (quindi premendo e rilasciando il mouse) per impostare un punto iniziale, poi, una volta avvenuto il "trascinamento", si clicchi nuovamente per fissare la linea.

    Ti posto un esempio fatto al volo:
    Codice PHP:
    // creo un oggetto listener
    var mouseListener:Object = new Object();
    // aggiungo il listener per gli eventi del mouse
    Mouse.addListener(mouseListener);
    // creo un contenitore per la linea
    createEmptyMovieClip("line_mc"10);
    // creo l'evento "pigio il pulsante del mouse"
    mouseListener.onMouseDown = function() {
        
    // memorizzo il punto iniziale da cui tracciare la linea
        
    var x_start _xmouse;
        var 
    y_start _ymouse;
        
    // creo l'evento "muovo il mouse" assegniandolo al clip contenitore 
        
    line_mc.onMouseMove = function() {
            
    // ripulisco questo contenitore da qualsiasi disegno creato precedentemente
            
    clear();
            
    // assegno uno stie alla linea da disegnare
            
    lineStyle(50xcccccc100);
            
    // imposto il punto iniziale
            
    moveTo(x_starty_start);
            
    // disegno la linea dal punto iniziale fino alle nuove coordinate
            
    lineTo(_xmouse_ymouse);
            
    // aggiorno il display per rendere fluida l'animazione al movimento del mouse.
            
    updateAfterEvent();
        };
    };
    // creo l'evento "rilascio il pulsante del mouse"
    mouseListener.onMouseUp = function() {
        
    // elimino l'evento "muovo il mouse"
        
    delete line_mc.onMouseMove;
    }; 
    Per provarlo, inserisci lo script nel primo frame in un nuovo documento.

    In questo caso il funzionamento è come quello dello "Strumento Linea".

    Intuisco comunque che tu voglia tracciare più linee consecutive.. giusto?
    Se così fosse sarà necessaria qualche modifica.

    Fammi sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    53
    veramente quello chora vorrei fare è considerare la linea ottenuta come una diagonale di un rettangolo.
    Perciò mentre io scrivo la retta da punto xA,yA a xB,yB, intanto lui crea il rettangolo conoscendo i 4 punti.

    Per fare ciò però dovrei ricopiare il procedimento della diagonale per altre 4 linee sempre create con createmptyMovieClip, ma se lo faccio, non mi va più niente.
    Insomma posso disegnare una linea sola.
    E io dovrei disegnare 5 linee nello stesso tempo (diagonale, 4 lati).
    come risolvo?

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,704
    Non vedo dove sta il problema.

    Puoi aggiungere delle azioni lineTo dopo quella che disegna la diagonale, in modo da ottenere il rettangolo attorno ad essa.
    Non hai bisogno nemmeno di creare un altro contenitore, ma puoi adoperare sempre lo stesso.

    Ecco lo script modificato:
    Codice PHP:
    // creo un oggetto listener
    var mouseListener:Object = new Object();
    // aggiungo il listener per gli eventi del mouse
    Mouse.addListener(mouseListener);
    // creo un contenitore per la linea
    createEmptyMovieClip("line_mc"10);
    // creo l'evento "pigio il pulsante del mouse"
    mouseListener.onMouseDown = function() {
        
    // memorizzo il punto iniziale da cui tracciare la linea
        
    var x_start _xmouse;
        var 
    y_start _ymouse;
        
    // creo l'evento "muovo il mouse" assegniandolo al clip contenitore 
        
    line_mc.onMouseMove = function() {
            
    // ripulisco questo contenitore da qualsiasi disegno creato precedentemente
            
    clear();
            
    // assegno uno stie alla linea da disegnare
            
    lineStyle(50xcccccc100);
            
    // imposto il punto iniziale
            
    moveTo(x_starty_start);
            
    // disegno la linea dal punto iniziale fino alle nuove coordinate
            
    lineTo(_xmouse_ymouse);
            
    // proseguo la linea creando attorno un rettangolo
            
    lineTo(x_start_ymouse);
            
    lineTo(x_starty_start);
            
    lineTo(_xmousey_start);
            
    lineTo(_xmouse_ymouse);
            
    // aggiorno il display per rendere fluida l'animazione al movimento del mouse.
            
    updateAfterEvent();
        };
    };
    // creo l'evento "rilascio il pulsante del mouse"
    mouseListener.onMouseUp = function() {
        
    // elimino l'evento "muovo il mouse"
        
    delete line_mc.onMouseMove;
    }; 
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    53
    ...certo che Ufficio Complicazioni Cose Semplici io eh..!!..
    comunque grazie 1000. non ci avevo pensato.

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,704
    No problem
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    53
    nell ultimo codice postato le variabili x_start e y_start che indirizzo hanno?

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,704
    Cosa intendi per "indirizzo"?

    Quelle due variabili sono dichiarate all'inizio della funzione onMouseDown.
    Codice PHP:
    // creo l'evento "pigio il pulsante del mouse"
    mouseListener.onMouseDown = function() {
        
    // memorizzo il punto iniziale da cui tracciare la linea
        
    var x_start _xmouse;
        var 
    y_start _ymouse
    Avendo specificato 'var', queste due variabili saranno "locali", e in questo caso saranno viste solo nell'ambito della funzione in cui sono dichiarate, cioè onMouseDown.

    A te cosa serve di preciso?
    Vuoi poterle recuperare in qualche altra parte dello script?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    53
    si..devo recuperare quelle due variabili nello script di un movieclip sullo stage.

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,704
    Ok.
    Potresti fare in vari modi.

    Un modo è quello di dichiarare le variabili a livello della timeline e quindi recuperarle, nel tuo caso richiamandole dall'interno di un mc, specificandone il percorso.

    Per dichiararle a livello della timeline basterà, in questo caso, eliminare l'istruzione 'var', in questo modo:
    Codice PHP:
    // creo l'evento "pigio il pulsante del mouse"
    mouseListener.onMouseDown = function() {
        
    // memorizzo il punto iniziale da cui tracciare la linea
        
    x_start _xmouse;
        
    y_start _ymouse
    Per richiamarle nel tuo clip dovrai quindi specificare il percorso.
    Ad esempio puoi utilizzare un percorso relativo in questo modo:
    Codice PHP:
    _parent.x_start;
    _parent.y_start
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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 © 2024 vBulletin Solutions, Inc. All rights reserved.