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

    Aiuto con concetti di scrittura classe

    Ho scritto una classe che deve restituire un array con dei valori presi da un intervallo di tempo, con crescita in base alla funzione di easing passata.

    codice:
    package
    {
    	import flash.events.*;
    	import fl.transitions.easing.Regular;
        
        public class easeTime  {
    
    		private var arrayTempo:Array
    
    		function easeTime(elementi:Number, myease:Function=null){
    			if (myease==null){myease=Regular.easeOut}
    			arrayTempo= new Array()
    			for (var i=1;i<=elementi;i++){
    				arrayTempo.push(myease(i,0,((i/elementi)/i)*elementi, elementi))
    			}			
    			restituisci()
    		}
    		function restituisci():Array{
    			return arrayTempo
    		}
    	}
    }
    vorrei usarla così

    var elementi:Number=10
    var ease:Function = Regular.easeOut


    trace(new easeTime(elementi, ease));// deve restituire l'array

    Solo che mi restituisce l'istanza della classe. Non c'ho mai capito granché con le classi! Chi sa come risolvere?

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Una classe ha come elemento "costruttivo" di se stessa appunto un costruttore, ossia una funzione con lo stesso nome della classe, che restituisce la classe.
    Poi ha degli elementi secondari che si dividono principalmente in "proprietà" e "metodi".
    I metodi sono funzioni che la classe può richiamare, mentre le proprietà sono praticamente delle variabili che possono assumere determinati valori che agiscono ad esempio sull'aspetto della classe.
    Ad esempio nella classe MovieClip, la funzione play() è un metodo di quella classe mentre la variabile alpha è una proprietà.

    Ora è chiaro che la tua classe non può restituire un array dal costruttore, inoltre la classe Array è di tipo "final" e quindi non può essere neanche estesa.
    Per intenderci non puoi fare

    public class easeTime extends Array

    Quindi ti serve una proprietà che a seconda dei valori che gli passi nel costruttore ti restituisce un determinato array.

    Codice PHP:
    package {
        
    import flash.events.*;
        
    import fl.transitions.easing.Regular;
        public class 
    easeTime {
            private var 
    arrayTempo:Array;
            public function 
    easeTime (elementi:Numbermyease:Function=null):void {
                
    arrayTempo = [];
                if (!
    myeasemyease Regular.easeOut;            
                    for (var 
    i:uint 0<= elementii++) {
                        
    arrayTempo.push (myease(i0, ((i/elementi)/i)*elementielementi));
                    }
                }
            }
            public function 
    get tempo ():Array {
                return 
    arrayTempo;
            }
        }

    Codice PHP:
    import fl.transitions.easing.Regular;
    var 
    elementi:uint 10;
    var 
    easeFunction Regular.easeOut;
    var 
    eTime:easeTime = new easeTime(elementiease);
    trace(eTime.tempo); // restituisce l'array 

  3. #3
    Va bene, costruttore, metodi e proprietà più o meno li capisco. A quella soluzione c'ero già arrivato, anche grazie ad altre classi esaminate.

    Però pensavo ci fosse anche la possibilità di ottenere un risultato subito, senza dover fare riferimento alla proprietà dell'istanza.

    Sbaglio o ci sono anche classi che non vanno istanziate ad esempio, dove si possono usare subito i suoi metodi?

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Sì le classi singleton. Sono classi statiche che usano i metodi direttamente dal nome della classe, un esempio basato sulla tua necessità può essere questo:

    Codice PHP:
    package {
        
    import flash.events.*;
        
    import fl.transitions.easing.Regular;
        public class 
    easeTime {
            private var 
    arrayTempo:Array;
            public function 
    easeTime ():void {
                throw (new 
    Error("La classe è di tipo singleton e non può essere istanziata"));
            }
            public static function 
    getArrayTempo (elementi:Numbermyease:Function=null):Array {
                
    arrayTempo = [];
                if (!
    myeasemyease Regular.easeOut;            
                    for (var 
    i:uint 0<= elementii++) {
                        
    arrayTempo.push (myease(i0, ((i/elementi)/i)*elementielementi));
                    }
                }
                return 
    arrayTempo;
            }
        }

    Aggiungendo l'attributo static alla costruzione di un metodo lo rendiamo utilizzabile in questo modo:

    Codice PHP:
    import fl.transitions.easing.Regular;
    var 
    elementi:uint 10;
    var 
    easeFunction Regular.easeOut;
    trace(easeTime.getArrayTempo(elementieaseFunction)); 

  5. #5
    Non mi pare male per niente

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.