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

    [AS3] fiocchi di neve che si bloccano

    Buongiorno, sto iniziando a vedere un po' di AS3 (era anche ora!), e sto facendo alcuni semplici esperimenti e convertendo cose che ho gia' fatto in AS2. Ed uno di questi semplici script che sto facendo e' quello di fiocchi di neve che vengono generati di continuo, posizionati e ridimensionati a random.
    Sembra funzionare tutto, tranne che dopo qualche secondo i fiocchi presenti sullo stage in quel momento bloccano il loro tween verso il basso, nel frattempo vengono giu' di nuovi, ed ogni tanto si ribloccano, e non ne capisco il perche'
    L'swf e' questo

    il codice nella classe e' il seguente:
    Codice PHP:
    package {

        
    import flash.display.MovieClip;
        
    import flash.events.*;
        
    import fl.transitions.Tween;
        
    import fl.transitions.easing.*;



        public class 
    letsnow extends MovieClip {

            public var 
    counter:Number 0;
            public var 
    newsnow:Number 15;
            public var 
    range:Number 30;
            public var 
    flake:Number 0;

            public function 
    letsnow() {
                
    this.addEventListener(Event.ENTER_FRAME,createsnow);
            }
            private function 
    createsnow(e:Event):void {
                if (
    counter == newsnow) {
                    
    flake++;                
                    
    counter 0;
                    var 
    mc:MovieClip;
                    
    mc = new snowflakes();
                    
    mc.name "flake_"+flake;
                    
    e.target.addChild(mc);
                    var 
    current_flake:Number Math.round(Math.random()*2) + 1;
                    
    mc.gotoAndStop(current_flake);
                    var 
    rand_depth:Number Math.round(Math.random()*4)+1;
                    var 
    scale:Number Math.round((100*rand_depth)/5);
                    
    scale /= 100;
                    var 
    speed:Number rand_depth;
                    
    speed *= 6;
                    var 
    color_id:Number Math.round(Math.random()*2);
                    var 
    alpha_min:Number 0.1;
                    var 
    alpha_max:Number 0.5;
                    
    //0 and 1 is white, 2 is black
                    
    if (color_id == 2) {
                        
    alpha_min 0.4;
                        
    alpha_max 0.7;
                    }
    //end if
                    
    var flake_alpha:Number Math.random()*(alpha_max-alpha_min);
                    var 
    init_x = -(range/2) + Math.round(Math.random()*stage.stageWidth);
                    
    mc.alpha flake_alpha;                
                    
    mc.init_x;
                    var 
    init_y = -(mc.height);
                    
    mc.init_y;
                    
    trace(stage.stageHeight+mc.height);
                    
    mc.scaleX scale;
                    
    mc.scaleY scale;
                    
    mc.addEventListener("click",giveMyName);
                    var 
    tw:Tween = new Tween(mc,"y",Regular.easeInOut,init_y,(stage.stageHeight+mc.height),speed,true);
                    
    tw.addEventListener("motionFinish",flakedie);
                    function 
    flakedie():void{
                        
    removeFlake(mc);
                    };
                } else {
                    
    counter++;
                }
            };        
            
            private function 
    giveMyName(e:Event){
                
    trace(e.target.name);
            };
            
            private function 
    removeFlake(mc:MovieClip):void{            
                
    trace(mc.name);
                
    this.removeChild(mc);            
            }

            
        };
    //end class

    Grazie per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Non ho letto il codice, ma da quello che hai scritto direi che hai utilizzato lo stesso nome per tutte le tween, e questo crei dei problemi al player che non riesce a gestirne gli eventi.
    Per risolvere basta che ti crei un array e in quello fai il push di ogni nuova tween in modo da non far incartare gli eventi che gestiscono di volta in volta la tween giusta.
    Se riesco più tardi ti aiuto a ottimizzare il codice.

  3. #3
    Originariamente inviato da and80
    Non ho letto il codice, ma da quello che hai scritto direi che hai utilizzato lo stesso nome per tutte le tween, e questo crei dei problemi al player che non riesce a gestirne gli eventi.
    Per risolvere basta che ti crei un array e in quello fai il push di ogni nuova tween in modo da non far incartare gli eventi che gestiscono di volta in volta la tween giusta.
    Se riesco più tardi ti aiuto a ottimizzare il codice.
    Uhm, non mi e' chiarissimo, aspetto il codice che spiega meglio di 1000 parole, sempre gentile and

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Ho riscritto il codice come lo avrei scritto io, ho inserito tutte le variabili, dichiarate in giro, dentro ad un Object creato apposta e ho creato due array, uno che registra ghli mc (così ce li hai tutti se ti serve ad esempio eliminarli in blocco o fare altre operazioni su quelli che hanno già finito la tween) e uno che registra tutte le tween, in modo che i nomi non le facciano accavallare e bloccare tra di loro.
    Codice PHP:
    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        
    import fl.transitions.Tween;
        
    import fl.transitions.TweenEvent;
        
    import fl.transitions.easing.Regular;
        public class 
    letsnow extends MovieClip {
            private var 
    C:uint;
            private var 
    N:uint;
            private var 
    R:uint;
            private var 
    F:uint;
            private var 
    M:Array;
            private var 
    W:Array;
            private var 
    V:Object;
            public function 
    letsnow () {
                
    0;
                
    15;
                
    30
                F 
    0;
                
    = [];
                
    = [];
                
    = {};
                
    addEventListener(Event.ENTER_FRAME__enterframe__);
            }
            private function 
    __enterframe__ (e:Event) {
                if (
    != N) {
                    
    C++;
                } else {
                    
    F++;
                    
    0;
                    
    V.current_flake Math.round(Math.random()*2) + 1;
                    
    M.push(addChild(new snowflakes()) as MovieClip);
                    var 
    mc:MovieClip M[M.length-1];
                    
    mc.name "flake_"+F;
                    
    mc.gotoAndStop(V.current_flake);
                    
    V.rand_depth Math.round(Math.random()*4) + 1;
                    
    V.scale = (Math.round(100*V.rand_depth) / 5);
                    
    V.scale /= 100;
                    
    V.speed V.rand_depth;
                    
    V.speed *= 6;
                    
    V.color_id Math.round(Math.random()*2);
                    
    V.alpha_min V.color_id != 0.1 0.4;
                    
    V.alpha_max V.color_id != 0.5 0.7;
                    
    V.flake_alpha Math.random()*(V.alpha_max-V.alpha_min);
                    
    V.init_x = -(R/2) + Math.round(Math.random()*stage.stageWidth);
                    
    mc.alpha V.flake_alpha;                
                    
    mc.V.init_x;
                    
    V.init_y = -(mc.height);
                    
    mc.V.init_y;
                    
    mc.scaleX V.scale;
                    
    mc.scaleY V.scale;
                    
    mc.addEventListener(MouseEvent.CLICK, function (e:MouseEvent) {trace(e.target.name)});
                    
    W.push(new Tween(mc"y"Regular.easeInOutV.init_y, (stage.stageHeight mc.height), V.speedtrue));
                    
    W[W.length-1].addEventListener(TweenEvent.MOTION_FINISH, function (e:TweenEvent) {removeChild(e.target.obj)});
                }
            }
        }

    C'è una sola cosa che non ho compreso, ossia come hai fatto a usare il clip "snowflakes" senza dichiararlo da nessuna parte eppure senza avere errori in compilazione. Se ho ben capito "snowflakes" è un movieclip concatenato in libreria no?! A meno che, anche letsnow non fosse in libreria.

    [edit] niente, lascia perdere quest'ultima inutile elucubrazione, avevo dichiarato la classe come estensione di EventDispatcher invece che MovieClip

  5. #5
    Esatto, snowflakes e' un movieclip esportato come classe nel fla, il quale ha 3 frame con 3 differenti movieclip :-)
    Guardo subito il codice, grazie mille!

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da darkmavis
    Esatto, snowflakes e' un movieclip esportato come classe nel fla, il quale ha 3 frame con 3 differenti movieclip :-)
    Guardo subito il codice, grazie mille!
    Non avevo badato al fatto che il random avvenisse nel range 1-3, infatti nel mio test ho fatto un clip con due soli frame, adesso aggiungo il terzo per vedere se è più bello

    [edit] Toh, così è più carino

    Codice PHP:
    package {
        
    import flash.display.MovieClip;
        
    import flash.events.Event;
        
    import flash.events.MouseEvent;
        
    import fl.transitions.Tween;
        
    import fl.transitions.TweenEvent;
        
    import fl.transitions.easing.Regular;
        public class 
    letsnow extends MovieClip {
            private var 
    L,E,T,S,N,O,W;
            public function 
    letsnow () {
                
    uint(0); // delay counter
                
    uint(15); // limit for counter
                
    uint(30); // max numer of visible flakes
                
    uint(0); // flakes counter
                
    = []; // mcs array
                
    = {}; // variabile collection object
                
    = []; // tweens array
                
    addEventListener(Event.ENTER_FRAME__enterframe__);
            }
            private function 
    __enterframe__ (e:Event) {
                if (
    != E) {
                    
    L++;
                } else {
                    
    S++;
                    
    0;
                    
    O.current_flake Math.round(Math.random()*2) + 1;
                    
    N.push(addChild(new snowflakes()) as MovieClip);
                    var 
    mc:MovieClip N[N.length-1];
                    
    mc.name "flake_"+S;
                    
    mc.gotoAndStop(O.current_flake);
                    
    O.rand_depth Math.round(Math.random()*4) + 1;
                    
    O.scale = (Math.round(100*O.rand_depth) / 5);
                    
    O.scale /= 100;
                    
    O.speed O.rand_depth;
                    
    O.speed *= 6;
                    
    O.color_id Math.round(Math.random()*2);
                    
    O.alpha_min O.color_id != 0.1 0.4;
                    
    O.alpha_max O.color_id != 0.5 0.7;
                    
    O.flake_alpha Math.random()*(O.alpha_max-O.alpha_min);
                    
    O.init_x = -(T/2) + Math.round(Math.random()*stage.stageWidth);
                    
    mc.alpha O.flake_alpha;                
                    
    mc.O.init_x;
                    
    O.init_y = -(mc.height);
                    
    mc.O.init_y;
                    
    mc.scaleX O.scale;
                    
    mc.scaleY O.scale;
                    
    mc.addEventListener(MouseEvent.CLICK, function (e:MouseEvent) {trace(e.target.name)});
                    
    W.push(new Tween(mc"y"Regular.easeInOutO.init_y, (stage.stageHeight mc.height), O.speedtrue));
                    
    W[W.length-1].addEventListener(TweenEvent.MOTION_FINISH, function (e:TweenEvent) {removeChild(e.target.obj)});
                }
            }
        }


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.