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

    dove devono stare i pacchetti rispetto al fla

    Leggendo la documentazione ufficiale non ho capito dove devono risiedere i pacchetti che contengono le classi personalizzate rispetto al file fla dove si vogliono utilizzare tali classi.
    Ho fatto un semplice esempio che non mi funziona:

    il pacchetto è il seguente:
    file provapacchetto.as
    Codice PHP:
    package pacchetto {
        public class 
    provapacchetto {
            var 
    stringa:String "Testo di prova";
            function 
    output() {
                
    trace (stringa);
            }
        }

    lo script nel file fla è il seguente:
    file provapacchetto.fla
    Codice PHP:
    import pacchetto;
    var 
    classe:provapacchetto = new provapacchetto();
    classe.output(); 
    Entrambi i file risiedono nella stessa directory. Ho provato anche a mettere il file provapacchetto.as dentro ad una subdirectory di nome "pacchetto" ma in entrambi i casi l'errore è:
    5001: Il nome del pacchetto 'pacchetto' non riflette la posizione del file. Modificare il nome della definizione del pacchetto all'interno del file o spostare il file. D:\Programmi\Apache Software Foundation\Apache2.2\htdocs\ACTIONSCRIPT 3\provapacchetto.as

    Da quanto ho capito il file .as deve avere il nome della classe, anche se non ho capito quando il pacchetto contiene più classi qual'è la classe che assegna il nome al file.
    Mi sembra anche di intendere che il pacchetto (ovvero il file .as) deve risiedere in una cartella avente il nome stesso del pacchetto.
    E' giusto quanto ho capito oppure no? E come mai il .fla continua a dare errore?
    Qualcuno esperto mi può fare un po' di luce su questi punti?

  2. #2
    Devo correggermi: nel caso in cui il file .fla ed il file .as risiedono nella stessa directory l'errore riportato sopra è giusto, diversamente se il file .as è all'interno di una subdirectory col nome del pacchetto (nel mio caso "pacchetto") gli errori sono i seguenti:

    1172: Impossibile trovare la definizione pacchetto.
    1046: Tipo non trovato o non è una costante della fase di compilazione: provapacchetto.
    1180: Chiamata al metodo non definito provapacchetto.

    Non so qual'è il caso migliore.

  3. #3
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Puoi mettere le classi.as dove vuoi e nel nome del pacchetto devi mettere il percorso del pacchetto stesso.

    Ti faccio un esempio:
    Supponiamo di avere un file Index.as nella stessa cartella del .fla.
    Nelle proprietà del file .fla, nel campo "Classe" inserisci il nome della classe: Index
    Il file o classe Index.as deve essere così:

    Codice PHP:
    package 
    {
        
    import flash.display.*;
        
        public class 
    Index extends MovieClip
        
    {
            public function 
    Index()
            {
                
    trace("La classe Index.as è correttamente istanziata");
            }
            }

    Se invece la classe Index.as si trova in una cartella, metti nel campo classe del .fla il nome della cartella, seguito dal nome della classe: nomeCartella.Index

    Nel file Index.as aggiungi il nome del package:

    Codice PHP:
    package nomeCartella 
    {
        
    import flash.display.*;
        
        public class 
    Index extends MovieClip
        
    {
            public function 
    Index()
            {
                
    trace("La classe Index.as è correttamente istanziata");
            }
            }

    Supponiamo ora che vuoi utilizzare un'altra classe che si trova in una cartella dove c'è la classe Index.as.
    Puoi chiamarla in Index.as, che a sua volta è già collegata al .fla in questo modo:

    Codice PHP:
    package nomeCartella 
    {
        
    import flash.display.*;
        
    import nomeCartella.nomeCartella2.Classe1// importo Classe1.as da nomeCartella2 
        
        
    public class Index extends MovieClip
        
    {
            private var 
    classe1:Classe1 = new Classe1();
            
                    public function 
    Index()
            {
                
    trace("La classe Index.as è correttamente istanziata");
            }
    }

    La classe1.as contenuta in nomeCartella2 sarà così:

    Codice PHP:
    package nomeCartella.nomeCartella2 
    {
        
    import flash.display.*;
        
        public class 
    Classe1 extends MovieClip
        
    {

            public function 
    Classe1()
            {
                
    trace("La Classe1 è correttamente istanziata");
            }
            }

    ciao

  4. #4
    Ciao, grazie della chiara spiegazione, ho modificato
    codice:
    package pacchetto {
        public class provapacchetto {
            var stringa:String = "Testo di prova";
            public function output() {
                trace (stringa);
            }
        }
    }
    codice:
    import pacchetto;
    var classe:provapacchetto = new provapacchetto();
    classe.output();
    ora funziona, con il file .as all'interno di una cartella "pacchetto"

  5. #5
    Ho provato il tuo esempio ma ho capito che per importare la classe come classe del documento (cioè usando il campo Classe del file .fla) la classe deve essere una sottoclasse di MovieClip. Se io invece volessi creare una classe che non sia un'estensione come dovrei fare?
    Per esempio (esempio tratto dalla documentazione ufficiale) se nella stessa cartella ho una classe:
    Protean.as
    codice:
    package {
    dynamic class Protean 
    { 
        private var privateGreeting:String = "hi"; 
        public var publicGreeting:String = "hello"; 
        function Protean() 
        { 
            trace("Protean instance created"); 
        } 
    }
    }
    ed un file .fla:
    Prova.fla
    codice:
    var myProtean:Protean = new Protean(); 
    myProtean.aString = "testing"; 
    myProtean.aNumber = 3; 
    myProtean.traceProtean = function () 
    { 
        trace(this.aString, this.aNumber); 
    }; 
    myProtean.traceProtean(); // testing 3
    come faccio a collegarli? Se inserisco il nome della classe nel campo Classe del documento mi segnala errore perchè Protean non è una sottoclasse di MovieClip.

  6. #6
    Devo rettificare ancora ma non per colpa mia, solo che il codice dell'esempio è sbagliato perchè va dichiarata public la classe. Dopo funziona, sia se classe e fla sono nella stessa directory sia se la classe è in una subdirectory, importando con import nomecartella.nomeclasse. Mentre usando il campo Classe del fla si ha appunto errore perchè la classe non è sottoclasse di MovieClip.

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Partiamo da 0, il package dichiara in quale cartella andare a pescare la classe, se non è dichiarato allora la cartella della classe deve coincidere con la cartella del FLA che la utilizza.
    Qualora si decida, per ordine o altro, di dedicare una cartella solo per le classi questa dovrà trovarsi nella stessa cartella che contiene il FLA.

    Nel primo caso avremo la dichiarazione così:

    Codice PHP:
    package {
        
    // resto del codice

    nel secondo avendo ad esempio una cartella "code", avremo

    Codice PHP:
    package code {
        
    // resto del codice

    Nel primo caso nel codice del FLA non dovremo indicare un import di nessun genere, troverà la classe in automatico. Nel secondo caso dovremo indicare l'import preciso di una classe (tu sbagliavi inserendo solo il nome del package, mentre avresti dovuto mettere import pacchetto.provapacchetto;), oppure usare il carattere jolly (*) per importare tutte le classi presenti in quella cartella: import pacchetto.*;

    Esiste un'ultima possibilità che consiste nell'inserimento di una cartella dedicata alle classi, direttamente nelle impostazioni di flash e non sarà quindi necessario inserire ogni volta la cartella delle classi (se ne hai in comune o che ti servono diverse volte). Rimane fermo il fatto che sia necessario comunque importare le classi che ti servono quando ti servono.
    Ora non ho flash davanti perciò non posso indicarti dove andare per fare questa operazione, se riesco lo faccio questo pomeriggio.

  8. #8
    Grazie, lasciando a parte l'ultimo metodo, ho ancora due dubbi.
    Il primo dubbio riguarda il primo caso in esame, ovvero file fla e classe nella stessa cartella. Mi è chiaro che il fla trova automaticamente la classe senza bisogno di un import, ma se io ho cento file fla e cento classi tutte nella stessa cartella questo significa che rallenta di molto la compilazione del swf perchè ogni singolo fla deve sfogliarsi tutte le classi per trovare quella utilizzata?
    Il secondo dubbio riguarda il campo Classe di Flash, che differenza c'è tra importare una classe dal pannello azioni rispetto ad impostare una Classe documento?

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da giancarlo75
    Il primo dubbio riguarda il primo caso in esame, ovvero file fla e classe nella stessa cartella. Mi è chiaro che il fla trova automaticamente la classe senza bisogno di un import, ma se io ho cento file fla e cento classi tutte nella stessa cartella questo significa che rallenta di molto la compilazione del swf perchè ogni singolo fla deve sfogliarsi tutte le classi per trovare quella utilizzata?
    A meno che tu non sia costretto a lavorare con un pc con processore a 600mhz e 128mb di ram, direi che non è il caso di preoccuparsi

    Originariamente inviato da giancarlo75
    Il secondo dubbio riguarda il campo Classe di Flash, che differenza c'è tra importare una classe dal pannello azioni rispetto ad impostare una Classe documento?
    Il campo classe a cui ti riferisci è quello nel pannello delle proprietà del filmato? Cioè quello della Document Class, o un altro che ora mi sfugge?

  10. #10
    Esatto, il campo Classe è quello nel pannello Proprietà del filmato, che differenza c'è tra classe documento e una qualsiasi classe importata?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.