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

    [AS3] Rimpicciolire correttamente dei movieclip

    Ciao a tutti.

    Ho creato un filmato in flash molto semplice, con 4 pulsanti quadrati che si ingrandiscono quando ci si passa sopra col mouse, andando ad occupare tutto lo stage. Quando poi si sposta il mouse fuori dallo stage, il quadrato ingrandito si rimpicciolisce, tornando alla sua dimensione originale, e s'ingrandisce a sua volta un altro quadrato (quello che ha il mouse sopra, ovviamente).

    Il codice AS3 che ho usato per fare questa cosa è il seguente (so che si potrebbe ottimizzare ma non fa nulla):

    codice:
    var num:int = numChildren;
    
    pulsante1.addEventListener(MouseEvent.MOUSE_OVER,ingrandisci1);
    pulsante2.addEventListener(MouseEvent.MOUSE_OVER,ingrandisci2);
    pulsante3.addEventListener(MouseEvent.MOUSE_OVER,ingrandisci3);
    pulsante4.addEventListener(MouseEvent.MOUSE_OVER,ingrandisci4);
    
    pulsante1.addEventListener(MouseEvent.MOUSE_OUT,rimpicciolisci1);
    pulsante2.addEventListener(MouseEvent.MOUSE_OUT,rimpicciolisci2);
    pulsante3.addEventListener(MouseEvent.MOUSE_OUT,rimpicciolisci3);
    pulsante4.addEventListener(MouseEvent.MOUSE_OUT,rimpicciolisci4);
    
    function ingrandisci1(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante1.gotoAndPlay(2);
        setChildIndex(oggetto,num-1);
    }
    function ingrandisci2(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante2.gotoAndPlay(2);
        setChildIndex(oggetto,num-1);
    }
    function ingrandisci3(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante3.gotoAndPlay(2);
        setChildIndex(oggetto,num-1);
    }
    function ingrandisci4(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante4.gotoAndPlay(2);
        setChildIndex(oggetto,num-1);
    }
    
    
    function rimpicciolisci1(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante1.gotoAndPlay(31);
        setChildIndex(oggetto,num-1);
    }
    function rimpicciolisci2(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante2.gotoAndPlay(31);
        setChildIndex(oggetto,num-1);
    }
    function rimpicciolisci3(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante3.gotoAndPlay(31);
        setChildIndex(oggetto,num-1);
    }
    function rimpicciolisci4(evento:MouseEvent):void{
        var oggetto: DisplayObject = DisplayObject(evento.target)
        pulsante4.gotoAndPlay(31);
        setChildIndex(oggetto,num-1);
    }
    Come potete vedere ho messo questa riga:
    codice:
    pulsanteX.gotoAndPlay(31);
    per mandare il filmato direttamente all'animazione di rimpicciolimento (che parte dal frame 31).

    Ora, il problema è questo: che se tizio porta il mouse fuori dallo stage (o comunque su un altro quadrato) PRIMA che l'animazione d'ingrandimento sia finita, si ottiene un effetto non proprio bello. Si vede il quadrato ingrandirsi all'improvviso (perché l'animazione di rimpicciolimento presuppone che il quadrato è gia stato ingrandito al massimo), e poi rimpicciolirsi...

    Io vorrei semplicemente che l'animazione di rimpicciolimento partisse dal punto in cui è arrivato l'ingrandimento.

    Sono sicuro che è possibile... ma come?

  2. #2
    prova ed utilizzare le tween anzichè le animazioni da timeline.

    ce ne sono diverse, queste imho le migliori:http://www.greensock.com/tweenmax/
    There is nothing conceptually better than Rock 'n' Roll.

    poker is very much like sex. most people think they're the best but don't know what they're doing.

  3. #3
    Grazie per la risposta,
    mi sapresti indicare una tween simile a quella che mi serve?

  4. #4
    A parte che dovrebbe bastarti due funzioni solamente e non due per ogni bottone, visto che il target lo ricavi dall'evento la cosa dovrebbe essere così

    codice:
    function ingrandisci(evento:MouseEvent):void{
        var pulsante: DisplayObject = DisplayObject(evento.target)
       TweenLite.to(pulsante, .5, {scaleX:1.2, scaleY:1.2}) // non mi ricordo se in AS3 le proprietà scale si chiamano scaleX e Y, se non funziona controlla con la documentazione
    }
    function rimpicciolisci(evento:MouseEvent):void{
        var pulsante: DisplayObject = DisplayObject(evento.target)
       TweenLite.to(pulsante, .5, {scaleX:1, scaleY:1}) 
    }
    Per funzionare bene bisogna che i tuoi bottone abbiano il punto di registrazione al centro. Altrimenti oltre ad ingrandire dovresti spostare il bottone in x e y per ricentrarlo.

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.