Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [MX 2004] Variabili di classi private e pubblice, stessa cosa ???

    Scusate le banalita' di questi miei ultimi 3D ma sto cercando, come spero anche altri, di capiri alcne novita' introdotte in questo nuovo Flash 7.0

    Soprattutto per quel che riguarda le classi, file esterni che potrebbero prendere tranquillamente, secondo me, il posto dei components tanto cari di MX.


    Ho provato a dichiarare 2 variabili all' interno di una classe , in questo modo:
    var _try_string:String = new String("hello world!");
    private var _try_private_string:String = new String("hello private world!");


    A prescindere che se non erro, non ha alcun senso a questo punto scrivere new String perche' lo dichiaro gia' dopo i : nella var, quindi new Arra(); new String; new Object e via dicendo devo ancora capire a cosa servono di preciso ...

    ... perche' riesco a modificare entrambi i valori di queste vars dal mio FLA con l' oggetto che ha questa classe importata ???

    Esempio dal frame action dell' FLA con un oggetto movie con assegnata questa classe:


    trace(mioobj._try_string); // sara' ovviamente "Hello world!"
    mioobj._try_string = "Hello modified world!";
    trace(mioobj._try_string); // modificato, OK

    trace(mioobj._try_private_string); // sara' "Hello private world!"
    mioobj._try_private_string = "Hello modified private world!";
    trace(mioobj._try_private_string); // sara' modificato ...


    Ora non so se sbaglio qualcosa io, ma nella programmazione ad oggetti, quando si dichiara una variabile privata non dovrebbe questa NON essere modificabile se non dall' interno della classe stessa ??? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    visto le numerevoli risposte / visite , colgo l'occasione per fare un altro quesito:


    c'e' un modo per passare un valore ad una classe appena inizializzata ???


    Cioe', dichiaro in linkage

    AS2.0 miaclass

    ok ... ma se nel costruttore volessi mettere miaclass("valore") come potrei fare ???

    Oppure il costruttore serve solo ad assegnare variabili interne o a far partire funzioni in automatico ?? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    File "Prova.as":

    codice:
    class Prova {
    	var _try_string:String = new String("hello world")
    	private var _try_private_string:String = new String("hello private world")
    	function Prova(){
    	}
    }
    Nel filmato, questo codice:

    codice:
    var mioobj:Prova = new Prova();
    trace(mioobj._try_string)
    mioobj._try_string = "Hello modified world";
    trace(mioobj._try_string);
    trace("*************************")
    trace(mioobj._try_private_string); // traccia la stringa originaria
    mioobj._try_private_string = "Hello modified private world";
    trace(mioobj._try_private_string);// traccia la stringa modificata
    Invece questo:

    codice:
    var mioobj:Prova = new Prova();
    trace(mioobj._try_string)
    mioobj._try_string = "Hello modified world";
    trace(mioobj._try_string);trace("*************************")
    trace(mioobj._try_private_string);// errore
    mioobj._try_private_string = "Hello modified private world";// errore
    trace(mioobj._try_private_string);// errore
    con i seguenti errori:

    codice:
    **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 6: The member is private and cannot be accessed.
         trace(mioobj._try_private_string)
    
    **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 7: The member is private and cannot be accessed.
         mioobj._try_private_string = "Hello modified private world";
    
    **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 8: The member is private and cannot be accessed.
         trace(mioobj._try_private_string)
    
    Total ActionScript Errors: 3 	 Reported Errors: 3

  4. #4
    dipende come instazi la classe nel .fla:


    la classe:

    class myClass{
    private var privata:String = "variabile privata";
    var pubblica:String = "variabile pubblica";
    }


    nel fla:

    codice:
    import myClass;
    var initClass:myClass = new myClass()
    trace(initClass.privata)  // errore!
    trace(initClass.pubblica)

    A prescindere che se non erro, non ha alcun senso a questo punto scrivere new String perche' lo dichiaro gia' dopo i : nella var, quindi new Arra(); new String; new Object e via dicendo devo ancora capire a cosa servono di preciso ...
    esattamente come venivano usati prima:

    myAr = new Array(1,2,3,4)
    myObj = new Object()
    myObj.a = 1

    etc.. etc..

  5. #5
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    >ok ... ma se nel costruttore volessi mettere miaclass("valore") come potrei fare ???

    codice:
    this.attachMovie("movieclip_linakage", "new_name", 1, {nome_prop:"valore"});

  6. #6
    raga .. di 3 post che avete scritto in 2 non c'ho capito niente in nessuno dei 3



    ... ok, mo faccio prove con i vostri consigli , credevo che si potessero dichiarare solo in linkage e non in import e non avevo pensato a dichiararle con i :Classe ....

    .. a presto e per ora grazie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    allora, sto impazzendo piu' del solito ....

    sono riuscito a passare un valore al costruttore semplicemente facendo
    import Miaclasse;
    var el:Miaclasse = new Miaclasse("valore");

    nel primo keyframe della root invece di usare il linkage, metodo credo migliore, secondo me ... perke' andare a sfogliarsi tutta una livreria per ogni linkage non sarebbe proprio il massimo...

    ... ora vorrei sapere come cavolo posso assegnare la classe, in questo caso istanziata in el al mio movieClip con mone di stanza my_movie ...

    Io sono sicuro che cosi' si puo' fare ma non riesco a venirne a capo, sicuro e' una cavolata ma non mi viene in mente piu' niente... qualche idea ???


    P.S. cmq almeno adesso le private funzionano ad hoc
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    >... ora vorrei sapere come cavolo posso assegnare la classe, in
    >questo caso istanziata in el al mio movieClip con mone di stanza
    >my_movie ...

    Non ho mica capito cosa vuoi fare...
    Ma d'altronde, anche senza settare "Miaclasse" nel campo AS 2.0 Class del linkage del movieclip, ti basta mettere nella timeline principale:

    codice:
    Object.registerClass("clip", Miaclasse);
    perchè istanziando "clip" questo appartenga direttamente a Miaclasse..

  9. #9
    Se su AS 2.0 Class scrivo il nome della classe, e' tutto ok, funziona.

    Ma io vorrei assegnare questa classe non tramite linkage, ma tramite il nome di stanza del mi omovie.

    Importare con:

    import Miaclasse;
    // invece di srivere Miaclasse nel linkage

    //per poi assegnare, invece ad una variabile con:
    var el:Miaclasse = new Miaclasse(); // non mi serve

    // assegnare questa clase ad un movieclip in root con nome istanza my_mc

    // qualcosa tipo
    my_mc:Miaclasse = new Miaclasse();



    cosa ovviamente errata, ma c'e' un modo per non usare linkage o passare per linkage ???

    Con il metodo Object.registerClass on accade niente, ne errore ne niente...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Beh, cambiare la catena ereditaria "run time", si fa, ma il cambio di classe dopo la costruzione non mi pare proprio (concettualmente errato, oltretutto: costruisci un oggetto su un modello, e poi vuoi che sia come un altro modello...)

    >Con il metodo Object.registerClass on accade niente, ne errore ne niente...

    • crea il file "Miaclasse.as", e scrivici dentro:

    codice:
    class Miaclasse
    {
    	var num:Number
    	function Miaclasse(){
    		trace("NUM: " + num)
    	}
    }
    • crea un nuovo filmato, e salvalo nella stessa cartella
    • crea un movieclip nella libreria, e assegnagli "clip" come linkage
    • lascia vuoto il campo "AS 2.0 Class"
    • scrivi nella timeline principale:

    codice:
    Object.registerClass("clip", Miaclasse);
    this.attachMovie("clip", "ciccio", 1, {num:5});
    Non si vede niente nella finestra dell'output?

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.