Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-12-2011, 02:52   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2011
Beiträge: 15
Zugriff auf ein Textfeld der Stage von einer Klasse aus

Ich habe eine Dokumentenklasse, sowie eine separate Klasse erstellt und möchte nun von der separaten auf ein Textfeld zugreifen, welches auf der Bühne liegt.

Ich habe mich stundenlange durch threads geforstet und auch ein wenig dazu gefunden, sowie angewendet, aber ich bekomme es einfach nicht zum funktionieren.

Mein übergebenes ,auf der Bühne platziertes Objekt ist und bleibt immer null.


Hier ein Auszug meines Codes:

Hauptdatei:

PHP-Code:


import flash
.text.*;
import flash.display.MovieClip;
import SpielerMenues;

public class 
Main extends flash.display.MovieClip {

public var 
testText = new Textfield();
public var 
SpielerOverlays:SpielerMenues
}

public function 
Main () {

SpielerOverlays= new SpielerMenues(testText);
testText.text "test";
addChild(testText);
}


Die 
Dokumentenklasse:


import flash.text.*;
import flash.display.MovieClip;
import Main;

public class 
SpielerMenues extends flash.display.MovieClip {

public function 
SpielerMenues(ubergebenerText:TextField) {

addEventListener(Event.ADDED_TO_STAGEinit); 

}

private function 
init(e:Event) { 
     
removeEventListener(Event.ADDED_TO_STAGEinit); 
       
    
trace ("Eventlistener funktioniert");
            
        } 


Wie ich das übergebene Objekt richtig anspreche habe ich nicht genau herausgefunden, wenn ich es im constructor in einer variablen speichere und später in der init funktion auslese, ist es immer null. Aus diesem Grund überprüfe ich mit Trace() nur den EventListener.

Mein Problem:
Das Stage Event startet nie und der Text wird nicht ausgegeben, das übergebene Objekt ist immer Null.

Über eine wirklich simple Erklärung was ich ändern muss wäre ich wirklich dankbar, ich bin in Flash noch nicht allzu bewandert.

p.s. ich weiss, dass man variable normalerweise als private deklariert und eine getter und setter funktion einbaut, zu einfacheren test-zwecken habe ich aber vorerst alle als public eingestellt.

Geändert von Joralin (05-12-2011 um 03:00 Uhr)
Joralin ist offline   Mit Zitat antworten
Alt 05-12-2011, 04:01   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
oh mann, wo soll man da anfangen; das ist ja komplett durcheinander.

- was genau hast du vor?
- welches ist die Dokumentenklasse? Main oder SpielerMenues?
- ist das TF auf der Bühne oder soll es per Code erzeugt werden?
- welchen Sinn hat SpielerMenues? was soll es machen?
- bitte formatier deinen Code. dann wäre dir aufgefallen, dass dein Konstruktor Main außerhalb der Klasse definiert ist. Allein dass hätte schon einen Fehler auslösen müssen, dann gibt es keine Klasse Textfield, die heißt TextField
- nur Klassennamen fangen mit Großbuchstaben an; coding conventions (SpielerOverlays)
- ADDED_TO_STAGE ist da sinvoll, wo man auf die stage zugreifen will
Zitat:
Mein Problem:
Das Stage Event startet nie und der Text wird nicht ausgegeben, das übergebene Objekt ist immer Null.
welches Stage-Event? und woran erkennst du dass das übergebene Objekt null ist; Debugger? wie oben geschrieben: dieser Code kann eigentlich garnicht compiliert werden also, wie kommst du auf diese Probleme?

hier mal eine basis:
PHP-Code:
//Main.as
package
{
    
import flash.text.TextField;
    
import flash.display.MovieClip;
    
    
//dieser Import ist überflüssig, da sich die Klasse im selben package befindet
    //import SpielerMenues;

    
public class Main extends MovieClip 
    
{
        public var 
testText:TextField = new TextField();
        public var 
spielerOverlays:SpielerMenues

        public function 
Main() 
        {
            if(
stageinit();
            else 
addEventListener(Event.ADDED_TO_STAGEinit); 
        }
        
        private function 
init(e:Event=null):void
        
{
            
removeEventListener(Event.ADDED_TO_STAGEinit); 
            
//entry Point

            
spielerOverlays = new SpielerMenues(testText);
            
//der Text wird momentan von spielerOverlays gesetzt
            
            
addChild(testText);
        }
    }

PHP-Code:
//SpielerMenues.as
package
{
    
import flash.text.TextField;
    
import flash.display.MovieClip;

    public class 
SpielerMenues extends MovieClip
    
{
        public function 
SpielerMenues(ubergebenerText:TextField)
        {
            
trace("in SpielerMenues"ubergebenerText);
            
ubergebenerText.text "SpielerMenues";
        }
    }

__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-12-2011, 05:13   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2011
Beiträge: 15
Danke für die schnelle Antwort.

Tut mir leid, ich bin gerade nicht ganz auf der Höhe. Ich bin ziemlich erkältet, muss aber dringend für die Uni Programmieren.

Der Code dient eigentlich nur als Beispiel, da mein eigentlicher Code sehr lang ist und viele andere Funktionen beinhaltet.
Er kompilliert aber und hat keine Syntaxfehler wie mein hier eingefügter.

Das mit der Großschreibung der Klassen ist mir bekannt, wie gesagt, ich bin nur nicht ganz auf der Höhe gerade.

- Main ist die Dokumentenklasse, da habe ich mich nur verschrieben.

- Das TF war nur als Beispiel gedacht,gehen wir mal von einem händig eingefügten aus.
Mir geht es darum, wie ich Objekte der Bühne von einer anderen Klasse aus bearbeiten kann und wie ich Sie korrekt übergebe.

SpielerMenues ist für die Erstellung der Oberflächen und Menüs eines Spiels gedacht.

Der Zusammenhang ist aber nicht weiter von Bedeutung, wie gesagt ich möchte einfach nur Texte, Movieclips, etc die händig eingefügt wurden von der SpielerMenues Klasse aus bearbeiten können.


Mit dem Stage Event meine ich den Event Listener "Event.ADDED_TO_STAGE". Ich habe eine simple trace anweisung in die init Funktion geschrieben und Sie wurde nicht ausgeführt.

Da der Eventlistener in Constructor steht müsste er ja automatisch ausgelöst werden, wenn das übergebene objekt (das Text Feld) zur bühne hinzugefügt wird oder liege ich da falsch?

Geändert von Joralin (05-12-2011 um 05:20 Uhr)
Joralin ist offline   Mit Zitat antworten
Alt 05-12-2011, 07:56   #4 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
moin, gute Besserung

Zitat:
Zitat von Joralin Beitrag anzeigen
Mit dem Stage Event meine ich den Event Listener "Event.ADDED_TO_STAGE". Ich habe eine simple trace anweisung in die init Funktion geschrieben und Sie wurde nicht ausgeführt.

Da der Eventlistener in Constructor steht müsste er ja automatisch ausgelöst werden, wenn das übergebene objekt (das Text Feld) zur bühne hinzugefügt wird oder liege ich da falsch?
Da liegst du falsch.
Die Dokumentklasse wird als einzige schon vor ihrer Instantiierung der Anzeigeliste hinzugefügt, deshalb ist "stage" im Konstruktor schon definiert.

Um die Klasse auch als normale Klasse verwendbar ist, ergibt sich das if Konstrukt in thomas' Code, da nur durch dieses der Aufruf der init() Funktion garantiert ist.

Nein, durch das hinzufügen eines Listeners, wird noch lange nicht die Funktion aufgerufen, dies soll ja erst geschehen, wenn das Ereignis auch eintritt.

Nein, die Funktion wird nicht für jedes weitere, der Anzeigelsite hinzugefügte Objekt ausgeführt.
__________________
anbei Grüße vom milchreis: Viva la [Silb]

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist gerade online   Mit Zitat antworten
Alt 05-12-2011, 08:19   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2011
Beiträge: 15
Ok nun funktioniert es, ich danke euch beiden :-)

Das mit dem Event Listener hab ich etwas anders gemeint. Ich war mir nur etwas unschlüssig wie der Constructor in Flash funktioniert, wird er nur beim start einmal automatisch ausgeführt oder mehrmals während der laufzeit des programs und in intervallen?

Geändert von Joralin (05-12-2011 um 08:36 Uhr)
Joralin ist offline   Mit Zitat antworten
Alt 05-12-2011, 08:53   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von Joralin Beitrag anzeigen
Das mit dem Event Listener [...] wird er nur beim start einmal automatisch ausgeführt oder mehrmals während der laufzeit des programs und in intervallen?
Event.ADDED_TO_STAGE wird einmal genau in dem Moment ausgelöst, indem ein Anzeigeobjekt zur Anzeigeliste hinzugefügt wird. Also wenn der FlashPlayer eine in der IDE-positioniert Instanz hinzufügt, oder dann wenn man das selbst per Script erledigt:
ActionScript:
  1. addChild(deineInstanz);
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 05-12-2011, 12:07   #7 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
SpielerMenues ist für die Erstellung der Oberflächen und Menüs eines Spiels gedacht.

Der Zusammenhang ist aber nicht weiter von Bedeutung, wie gesagt ich möchte einfach nur Texte, Movieclips, etc die händig eingefügt wurden von der SpielerMenues Klasse aus bearbeiten können.
das war vor allen dingen darauf bezogen, weil mir aus dem Code (wie auch deiner Beschreibung) nicht ersichtlich ist, ob hier tatsächlich ein MC nötig ist.
Das ist ein häufiger "Fehler" (nicht wirklich falsch, aber unnötiger Overhead) bei Leuten die vorher AS1/2 Programmiert haben, weil dort für jede menge unnötiger Programmlogik an der Klasse MovieClip hängt.
Wenn es sich hier also lediglich um einen Controler handelt, würde ich von flash.events.EventDispatcher erben lassen (der Kommunikation wegen)

wenn andererseits SpielerMenues grafische Elemente beinhaltet, finde ich es nicht schön, dass das TF nicht in SpielerMenues liegt.
frei nach dem Motto: pfusch nicht an fremden Objekten rum || Kümmer dich (nur) um deinen eigenen s*****.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-12-2011, 13:07   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2011
Beiträge: 15
Sorry, ich wollte da Ganze als Beispiel aufzeigen, die Text-Felder, die ich fürs Menü benötige, sind auch in diesem deklariert.


Eine KLeinigkeit würde ich zum nachvollziehen nur gerne noch wissen.

Es sind keine Angaben im Code gemacht, an was der Eventlistener (normalerweise weist man den ja einem Objekt etc zu) angehängt wird.
Wird er automatisch der Instanz der Main Klasse zugewiesen?

Und woher weiss das Programm, bei welcher Datei er reagieren soll, wenn sie zur Stage hinzugefügt wird?
Man möchte ja nicht, dass er bei allem reagiert was der Stage hinzugefügt wird, sondern nur einem bestimmten Objekt,

Geändert von Joralin (05-12-2011 um 13:10 Uhr)
Joralin ist offline   Mit Zitat antworten
Alt 05-12-2011, 14:10   #9 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Joralin Beitrag anzeigen
Es sind keine Angaben im Code gemacht, an was der Eventlistener (normalerweise weist man den ja einem Objekt etc zu) angehängt wird.
Wird er automatisch der Instanz der Main Klasse zugewiesen?
Du befindest dich in der Klasse, es ist egal ob du

PHP-Code:
addEventListener(...);
//oder
this.addEventListener(...); 
schreibst.

Stichwort: scope.
__________________
anbei Grüße vom milchreis: Viva la [Silb]

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
stage Zugriff aus Klasse sara11 ActionScript 3 23 01-06-2009 21:33
Zugriff auf Instanzen auf der Stage von einer Klasse aus... Steril707 ActionScript 3 3 12-02-2009 10:19
Zugriff auf stage von Klasse aus Eddie_Mc_Flash ActionScript 3 15 06-09-2008 23:44
Zugriff auf stage aus einer statischen Klasse astrocreep ActionScript 3 2 03-06-2008 10:32
stage Zugriff aus einer Klasse? HorizontLaeufer ActionScript 3 4 25-11-2007 11:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele