Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Flash & ActionScript
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti

Flash & ActionScript Animazione web e linguaggio di programmazione

Hey Amico Visitatore,
Condividi con noi le tue idee e la tua conoscenza Aprendo una nuova discussione nella sezione Flash & ActionScript


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 05-05-11, 17:17   #1 (permalink)
User
 
Data di registrazione: Aug 2006
Messaggi: 90
Invia un messaggio tramite MSN a LauPhp
Classe per visualizzare del testo in AS3

ciao a tutti, sto cercando di capire il funzionamento di AS3 da circa un paio d'ore, ed ecco il primo problema:

ho creato una classe main.as ed una classe Messaggio.as

main.as

Codice:
import Messaggio;

var mess:Messaggio = new Messaggio();
mess.creaMessaggio("casa");
Messaggio.as
Codice:
package {
	import  flash.text.TextField;
	import flash.text.TextFormat;
	import flash.display.*;


	public class Messaggio extends MovieClip {
var testo:TextField = new TextField;
		public function Messaggio():void {

			function creaMessaggio(v:String):TextField{
			testo.text = v;
			testo.width = 500;
			testo.x = (stage.stageWidth/2)-(testo.width/2);
			
			return (testo);
			}
addChild(testo);
		}
	
	}
}
il risultato è questo messaggio di errore:

1061: Chiamata a un metodo non definito creaMessaggio mediante un riferimento con tipo statico Messaggio.

mi aiutate a correggere, non ho molta base teorica e mi sono bloccata
LauPhp non in linea   Rispondi citando
Vecchio 05-05-11, 19:14   #2 (permalink)
User
 
Data di registrazione: Aug 2006
Messaggi: 90
Invia un messaggio tramite MSN a LauPhp
scusate, ho notto che la prima versione della classe era totalmente sbagliata adesso ho modificato cosi

Messaggio.as
Codice:
package {
	import  flash.text.TextField;
	import flash.text.TextFormat;
	import flash.display.*;


	public class Messaggio extends MovieClip {

		public var testoString:String;

		public function Messaggio(testoString:String) {

			var testo:TextField = new TextField;
			testo.text = testoString;
			addChild(testo);
			testo.width = 500;
			testo.x = (stage.stageWidth/2)-(testo.width/2);

		}

	}
}
main.as
Codice:
var mess:Messaggio = new Messaggio("casa");
risultato:
TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
at Messaggio$iinit()
LauPhp non in linea   Rispondi citando
Vecchio 05-05-11, 19:57   #3 (permalink)
User
 
Data di registrazione: Apr 2010
Messaggi: 30
Ciao

Il primo codice che riporti main.as non è un codice per una classe ma potrebbe essere l'importazione della classe Messaggio.as sullo stage del .fla.
Tuttavia manca l'addChild della classe e pertanto, non è fisicamente collegata allo stage (potresti avere una classe che svolge funzioni autonome e le trasmette ad altre classi che a loro volta sono collegate allo stage e agli oggetti contenuti).

La classe Messaggio.as non è correttamente formattata:
Nella dichiarazione di classe istanzi e crei una variabile senza definirne l'attributo pubblico o privato e anche se non ti dà errori è sempre meglio fornire al codice tutte le informazioni utili, anche se a volte non necessarie.

Stesso discorso per la funzione 'creaMessaggio' che richiami da altre posizioni, deve assolutamente essere definita pubblica.
Anche se l'hai annidata nella funzione costruttrice della classe (che deve essere sempre pubblica), non ti serve annidarla e può benissimo stare fuori.

La stessa funzione dovrebbe restituire un valore di tipo TextField e anche questo non è esatto, per quello che mi è sembrato di capire, vuoi che il campo di testo già creato nella dichiarazione di classe con 'new' ti riporti la variabile stringa che hai già passato alla funzione nella chiamata per cui, la funzione non deve restituire alcun valore dato che il valore che ti serve l'hai già assegnato a 'v' come stringa.

Comunque, e scusami se mi sono dilungato, ottieni il campo di testo con il valore stringa che hai passato alla funzione se fai così:

Questo codice inserito nel pannello azioni di Flash al primo fotogramma del .fla:

Codice PHP:
var mess:Messaggio = new Messaggio();
addChild(mess);
mess.creaMessaggio("casa"); 
E la classe Messaggio.as nella stessa cartella de .fla deve essere compilata così:

Codice PHP:
package 
{
    
import flash.text.TextField;
    
import flash.text.TextFormat;
    
import flash.display.*;

    public class 
Messaggio extends MovieClip
    
{
        private var 
testo:TextField = new TextField  ;

        public function 
Messaggio():void
        
{
            
trace("OK Classe Messaggio istanziata correttamente");
        }
        public function 
creaMessaggio(v:String):void
        
{
            
trace("sono in creaMessaggio");
            
testo.text v;
            
testo.width 500;
            
testo.stage.stageWidth testo.width 2;

            
addChild(testo);
        }
    }

ciao
Sleter non in linea   Rispondi citando
Vecchio 05-05-11, 20:03   #4 (permalink)
User
 
Data di registrazione: Apr 2010
Messaggi: 30
... ho visto solo adesso il tuo messaggio precedente.

Probabile che l'errore che riscontri sia dovuto alla proprietà stage perchè come ti ho scritto sopra, la classe non necessariamente ha una proprietà 'stage'.

ciao
Sleter non in linea   Rispondi citando
Vecchio 05-05-11, 20:06   #5 (permalink)
User
 
Data di registrazione: Aug 2006
Messaggi: 90
Invia un messaggio tramite MSN a LauPhp
Ti Adoro

grazie mille per la spiegazione.
LauPhp non in linea   Rispondi citando
Vecchio 05-05-11, 20:10   #6 (permalink)
User
 
Data di registrazione: Aug 2006
Messaggi: 90
Invia un messaggio tramite MSN a LauPhp
scusa, ovviamente il tuo codice funziona alla perfezione.

riguardo alla tua seconda risposta:
facendo così

import flash.display.*;

non ho importato anche stage?
LauPhp non in linea   Rispondi citando
Vecchio 05-05-11, 21:02   #7 (permalink)
User
 
Data di registrazione: Apr 2010
Messaggi: 30
Ciao

Si in effetti la tua domanda è pertinente, nel pacchetto flash.display ci sono tutte le classi principali utilizzate dal FlashPlayer e pertanto c'è la classe Stage ma quest'ultima non è accessibile a livello globale e per accedervi occorre fare riferimento alla proprietà stage (minuscolo).

Se la tua classe.as non è fisicamente collegata allo stage e usi appunto la proprietà stage, ti ritorna un errore del tipo che hai riscontrato.

Se provi a commentare l'addChild(mess); nel codice che ti ho suggerito sopra, vedi che ricevi lo stesso errore.
Lasciando commentato l'addChild e nella classe.as vai a commentare la riga dove c'è la proprietà stage, ti accorgi che la classe risulta sempre collegata al .fla e istanziata correttamente (perchè è presente nella stessa cartella e Flash la trova automaticamente), non vengono segnalati errori ma non viene nemmeno aggiunto allo stage il campo di testo.

Ci sarebbe da dire altro sull'evento: ADDED_TO_STAGE utilissimo e che in certi casi fa risparmiare il ricovero alla neuro ma per ora mi fermo qui per non rischiare di confonderti e anche perchè molte cose non sono ancora chiare nemmeno a me o perlomeno, non abbastanza chiare per spiegarle chiaramente.

ciao e alla prossima
Sleter non in linea   Rispondi citando
Vecchio 05-05-11, 22:11   #8 (permalink)
User
 
Data di registrazione: Aug 2006
Messaggi: 90
Invia un messaggio tramite MSN a LauPhp
confermo quello che ho detto prima

Ti adoro
LauPhp non in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 06:47.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.