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

    [AS2] Looping background

    Salve a tutti, vorrei realizzare un background in movimento composto da una serie di movieclip che facciano da texture ripetuta di sfondo, in continuo movimento orizzontale sull'asse X.
    Ho creato un MC contenitore istanziandolo come 'corridoio' e al suo interno ho piazzato un MC istanziato come 'bg_pattern', alto come lo stage ma stretto circa un quinto (occupa tutta l'altezza dello stage, mentre in larghezza ne entrano 5).
    Ho pensato che, per ottenere l'effetto scorrimento verso sinistra in loop, dovrei seguire questa procedura:
    1-duplicare il MC pattern per tutta la lunghezza dello stage;
    2- mettere in movimento ogni singolo pezzetto del pattern, verso sinistra;
    3- far loopare l'animaizone facendo sì che, quando un singolo pezzetto esce totalmente dallo schermo a sinistra, venga riposizionato all'estremità destra dello stage.

    Ho scritto questo codice per ora, ma i pezzi del pattern vengono riposizionati a destra dello stage solo per una volta. Al secondo passaggio non subiscono più la condizione del looping: qualche idea in proposito?

    Codice PHP:
    import mx.transitions.Tween;
    import mx.transitions.easing.*;

    /* corridord scrolling */
    var speed 8;
    var 
    pattern_width 0;
    var 
    pattern_count 0;

    function 
    corridor_scrolling(){
        
    /* replicate pattern */
        
    while (pattern_width<(Stage.width+_root.corridor.bg_pattern._width)){ 
            
    duplicatemovieclip(_root.corridor.bg_pattern"bg_pattern"+pattern_countpattern_count);
            
    _root.corridor["bg_pattern"+pattern_count]._x pattern_width;
            
    _root.corridor["bg_pattern"+pattern_count]._y 0;
            
    pattern_count++;
            
    pattern_width _root.corridor.bg_pattern._width*pattern_count;
        }
        
        
    /* movement */
        
    corridor.onEnterFrame = function(){
            
    /* reiterate control for pattern pieces */
            
    for (i=0i<pattern_counti++) {
                
                
    /* movement speed */
                //_root.corridor["bg_pattern"+i]._x -= speed;
                
    new mx.transitions.Tween(_root.corridor["bg_pattern"+i], "_x"mx.transitions.easing.None.easeNone_root.corridor["bg_pattern"+i]._x_root.corridor["bg_pattern"+i]._x-speed0.0001true);
                
                
    /* movement loop */
                
    if(_root.corridor["bg_pattern"+i]._x<=-_root.corridor["bg_pattern"+i]._width){
                    
    _root.corridor["bg_pattern"+i]._x += pattern_width;
                }
            }
        }
    }
    corridor_scrolling(); 
    All'uomo non verrà mai tanto male quanto dall'uomo.

  2. #2
    Ho notato che se per animare il background non uso i Tween ma la riga che ho lasciato commentata nel codice di cui sopra, incrementando cioè semplicemente il parametro _x:
    _root.corridor["bg_pattern"+i]._x -= speed;
    il tutto funziona.
    Avete idea del perchè?
    Ma, sopratutto, c'è un modo per ottenere un'aniamzione meno scattosa? Il problema si presenta sopratutto aumentando la velocità (parametro speed)...
    All'uomo non verrà mai tanto male quanto dall'uomo.

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    O usi onEnterFrame o usi le Tween.
    Se li usi insieme stai richiamando un tween ogni volta che viene letto il frame (onEnterFrame ignora che ci sia stop o altro, legge il frame tot volte ogni secondo a seconda del framerate).
    Inoltre la Tween di Flash ha problemi di gestione delle animazioni multiple e per questo viene spesso accantonato in favore di librerie come caurina o greensock.

    Nel tuo caso puoi gestire due movieclip contenitori che si alternano in posizione _x ogni volta che l'altro clip raggiunge il bordo.
    Con le librerie suddette potresti usare una funzione collegata al termine di ogni movimento e creare così il loop.

    E' un po' complesso spiegarti sul forum come funzionano tali librerie (tra l'altro io uso caurina ma molti dicono che sia meglio greensock, diciamo che è una scelta soggettiva, che dovresti fare tu), è conveniente che inizi a dargli un'occhiata direttamente sui siti degli sviluppatori.
    Adesso non ho neanche gli strumenti per scriverti il codice con caurina, se dovessi riuscire lo farò più tardi.

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.