Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-09-2008, 14:52   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Question addChild() in einer Klasse verwenden

So jetzt frage ich mal speziell zu dem Problem.

Wenn ich z.B. ein Texfeld in einer Klasse erstelle und dieses mit addChild(textFeld) was ebenfalls in der Klasse steht der Anzeigeliste hinzufüge, dann wird bisher noch nichts angezeigt. Ich müsste dazu die Klasse in der Hauptzeitleiste ebenfalls der Anzeigeliste hinzufügen. Ansonsten hängt ja mein Textfeld in der Klasse fest welche selber nicht angezeigt wird.

Kann ich dieses Textfeld auf der Bühne anzeigen lassen, ohne ein extra addchild() auf der Hauptzeitleiste zu verwenden?

Im ersten Frame existiert bisher ein MC. Bisher hänge ich in der Klasse das Textfeld mit MC.addChild(textFeld) das Textfeld an diesen MovieClip an.
Das Problem bei dem Vorgehen ist aber, das ich für diesen MC ein MOUSE_MOVE in der Klasse definiert habe. Hänge ich jetzt das Textfeld an diesen MC an, gilt der MOUSE_MOVE auch für das Textfeld.
Was dann passiert kann man mit meiner Beispiel-Datei sehen wenn man den MC überfährt und dann die Maus nach unten oder rechts bewegt.

Allein weis ich leider nicht mehr weiter.
Angehängte Dateien
Dateityp: zip Tooltip.zip (6,7 KB, 12x aufgerufen)
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 02-09-2008, 16:47   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
vorab:
erzeuge eine dokumentenklasse
erzeuge für dein tester-mc eine klasse


zu deiner frage:
was dazugehört, gehört dazu. wenn du das nicht willst, dann musst du z.b. mit hitTest's selbst bestimmen was was sein soll. bzw. der tooltip-text darf auf garkeinen fall zum tester-mc gehören.

es gibt ein container-mc (kann natürlich stage sein)
darin dein tester-mc
darin dein tooltip (an oberster stelle)



tooltip (generelle überlegungen)
da mehrere objekte tooltips bekommen können, könnte die klasse tester eine ableitung von tooltip sein. also die tooltip-funktionen zur basisklasse gehören.

wenn objekte übereinander liegen, dann darf ein tooltip nicht verdeckt werden. also muss es eine ebene für alle objekte geben und darüber (somit über allen) eine ebene in der ein (es kann immer nur einen geben) tooltip angezeigt werden kann.

stage bekommt ein tooltip mit einem eigenen listener, an den sich die objekte an- und abmelden, wenn sie auf der bühne erscheinen oder verschwinden.
ein event stage-rollover kann dann feststellen, ob und wann etwas angezeigt werden soll.


http://www.seibsprogrammladen.de/fra...ispiele/flash9
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-09-2008 um 17:05 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2008, 00:12   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Hallo und danke erst mal.
Habe mir deine Beispiele mal angeschaut.

Bei meinem eigentlichen Projekt verwende ich eine Dokumentklasse. Ich wollte hiermit nur eine Klasse für Tooltips erstellen, die ich dann in meinem eigentlichen Projekt verwenden kann.

Ich habe für den MC (login) über das i-symbol nun eine Klasse Login erstellt. Was das genau bedeutet, wenn ich dort einen Klasse angebe weis ich noch nicht.
Weiterhin habe ich die tooltip Klasse in meiner Dokumentklasse importiert.
Weiter verstehe ich das leider nicht.

Was meinst du mit "was dazu gehört gehört dazu"? Einen speziellen Container-MC habe ich nicht. Denke das wäre dann stage.
Deine Rangfolge kann ich nicht zuordnen. Meinst du das ist eben bei mir so oder sollte das so eigentlich sein wenn es richtig gemacht wird.

Bei den generellen Überlegungen meinst du das ich noch einige Sachen in meiner Klasse berücksichtigen muss? Also das ganze noch ändern/erweitern?

Es ist etwas schwer für mich, da ich mir das ganze bisher selber beibringe. Ich würde gerne die Sachen mit Klassen und den DisplayListen verstehen. Brauche aber wahrscheinlich etwas länger als andere.
Ich habe mal mein Projekt angehängt. Dort erkennt man vielleicht den AUfbau und kann mir gezielte Tips bezüglich des Tooltips geben. Eventuell gibt es ja auch spezielle Lektüre die sich mit DisplayListen und diesem addChild() befasst.
Angehängte Dateien
Dateityp: zip MEINPROJEKT.zip (20,6 KB, 7x aufgerufen)
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 03-09-2008, 00:47   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
Bezüglich deinem ersten Post. Ich verstehe nicht so recht die Problematik.
Der Tooltip erscheint und bewegt sich mit der Maus? Was ist denn konkret das Problem.
Das Projekt aus deinem letzten Post habe ich ebenfalls angeschaut. Für den Anfang: Toll gemacht! Du scheinst den Sprung ins kalte Wasser gewagt zu haben- ohne großartig Literatur o.ä zu bemühen. Das ist prinzipiell sehr gut, weil sich Erkenntnisse so sehr tief einprägen.
Allerdings könnten sich so einige "falsche" Vorgehensweisen einbrennen.

Falsch habe ich absichtlich mal in Anführungszeichen gesetzt- denn solange etwas funktioniert ist es nicht falsch- ich ziele auf Programmierkonventionen ab. Beachtest du diese, so wirst du fremden, aber konventionskonformen Code besser lesen können, weil dir die Struktur bekannt vorkommt.

Bitter aufgestoßen sind mir bei dir beispielsweise kleingeschriebene Klassennamen, deutsch/englische Methodennamen usw.

Empfehlung für dich bzgl. den Konventionen:
http://opensource.adobe.com/wiki/dis...ng+Conventions

Hinsichtlich der von Anfängern so geliebten DisplayList
http://download.macromedia.com/pub/d...kbook_ch06.pdf

AS3: ein Bestseller (um nach dem Sprung ins Kalte mal ein wenig Theorie zu pauken- sehr zu empfehlen, hat mir zum Einstieg viel vermitteln können):
http://oreilly.com/catalog/9780596526948/

Grüße
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 03-09-2008, 01:14   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Hallo Deluxe
Erstmal zu meinem ersten Post. Das Textfeld wird direkt an den aufrufenden MC gehängt. Somit gilt das MOUSE_MOVE Event auch für dieses. Das merkt man wenn man mit der Maus den MC überfährt und dann die Maus nach unten rechts bewegt. Dann verschwindet das Textfeld nämlich nicht, weil die Maus noch über dem Textfeld ist. Bewegst du die Maus nach oben ist sie kurzzeitig vom Textfeld weg (wegen Trägheit durch Bildfrequenz) und es wird ausgeblendet.

Das mit den Klassen habe ich schon gelesen. Muss mir angewöhnen immer schön konform zu bleiben. Methoden hätte man cleverer benennen können. Aber auf die schnelle kamen mir diese Wörter in Kopf

Ich muss zugeben so ganz aus dem Kopf ist es nicht. Ich habe ein Buch "Das Praxisbuch Actionscript 3" Nur ist man da, wenn es ins Detail mit Klassen und DisplayList geht schnell am Ende. Viele Beispiele sind auch komplett ohne Klassen. So wie ich mitbekommen habe, löst man ja so ziemlich alles in Klassen.

Danke für die Lektüre. Da lese ich mich auch mal durch.


So wie hgseib schreibt, mache ich ja noch was grundsätzliches Falsch mit meiner Klasse, wenn ich dort Elemente erstelle und sie mit Elementen auf der Bühne interagieren lasse. Da würde mich brennend Weiteres zu interessieren.
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 03-09-2008, 07:16   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von sara11 Beitrag anzeigen
Weiter verstehe ich das leider nicht.
mal sehr vereinfacht: die symbole in der bibliothek, das sind klassen.
die instanzen auf der bühne das sind objekt.

Zitat:
Zitat von sara11 Beitrag anzeigen
Was meinst du mit "was dazu gehört gehört dazu"?
das es keinen schalter oder befehl o.ä. gibt, das bewirkt: das, was in dem objekt drinnen ist, beim rollover von dem objekt nicht gelten soll. also es gilt immer das komplette objekt. und wenn du ein textfeld da reinsetzt, dann gehört das einfach dazu. es gibt keine ausnahmen.

Zitat:
Zitat von sara11 Beitrag anzeigen
Ich habe mal mein Projekt angehängt. Dort erkennt man vielleicht den AUfbau und kann mir gezielte Tips bezüglich des Tooltips geben. Eventuell gibt es ja auch spezielle Lektüre die sich mit DisplayListen und diesem addChild() befasst.
ach neee ;-)
wenn kein konzept vorliegt, dann kann man das bei OOP nicht zurechtschubsen.

bücher zu OOP gibt es jede menge, muss ja nicht unbedingt AS3 sein.
also wenn du dich damit befassen willst, dann erstmal ein bisschen grundlagen reinsaugen.


und auch mal im internet suchen:
AS3 tooltip

z.b.
http://www.adobe.com/cfusion/exchang...&extid=1336518
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-09-2008 um 07:30 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2008, 09:03   #7 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Ja jetzt hab ich dich verstanden. Das erklärt ja dann das Problem warum das Textfeld nicht verschwindet.

Aber du sprichst immer ein bischen in Rätseln.
Was soll ich mir aus
Zitat:
ach neee ;-)
wenn kein konzept vorliegt, dann kann man das bei OOP nicht zurechtschubsen.
zurechtdenken? Was wilst du damit sagen? Schreib doch bitte lieber ein Satz mehr als zu wenig. Ich muss ja sonst immer nachfragen.
Gehe ich falsch vor? Laut dem was ich bisher gelesen habe, sollte mein Aufbau doch eigentlich so richtig sein? Oder nicht? Bis vielleicht auf die Verwendung meiner Tooltipklasse.

Grundlagen habe ich ja bereits in dem von mir genannten Buch gelesen. Da wird auch OOP behandelt und die Beispiele so gestaltet. Eben lese ich mir das von Deluxe gepostete O'Reilly Werk durch. Das ist ja sehr schön beschrieben. Denke kaufe mir bald das ganze Buch.

Nach Tooltipklassen habe ich auch schon gesucht. Hier im Forum gibts ja auch einige. Aber entweder zu alt=AS2 oder zu komplex in zu viele Klassen aufgeteilt.
Ich will nicht einfach nur eine ToolTip Funktion, ich wollte das eher nutzen um Flash zu üben/verstehen/lernen.
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 03-09-2008, 17:08   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
mehr schreiben kostet mich mehr zeit - und wird nicht immer von allen gedankt (allgemein gesprochen) so nach dem motto: "das weiss ich auch selbst ..."


ändern:
in as2 ist so ziemlich alles möglich, da kann man sagen (sinngemäss): häng da noch was dran, ergänze dort noch was und dann geht das irgendwie. frei nach dem motto: 'wenn es erstmal funktioniert, danach fragt keiner mehr warum es geht'

OOP verlangt ganz einfach, das man sich vorher überlegt, wer was machen soll. wenn dieses überlegen, dieses konzept, nicht stimmt. dann ist das nur einfach falsch, da kann man nichts dran verbessern.
wenn man in die falsche richtung läuft, dann nützt es nichts die laufgeschwindigkeit zu ändern. falsche richtung ist einfach die falsche richtung.


suchen:
suche nichts gefunden? verstehe ich nicht.
suche mit google nach: "as3 tooltip"
die erste gefundene position ist ein volltreffer:
http://www.gotoandlearnforum.com/vie...p?f=12&t=12168
und OOP AS2 ist nicht != OOP AS3
grundsätzlich ist das gleich. nur ein teil der syntax von AS3 wird anders geschrieben (das hat nicht direkt etwas mit OOP zu tun).


OOPs lernen:
fein!
tooltips sind vielleicht nicht unbedingt eine einsteiger aufgabe?
müsste mir selbst erstmal gedanken darüber machen. das erste was einem dazu einfällt ist: 'das unterschiedliche klassen ein tooltip haben können' - hört sich nach polymorph an ..
oder: 'es kann nur einen geben' - das wäre dann z.b. singleton.
ist alles nicht so kompliziert, wie es sich anhört. aber, polymorph oder singleton ist nicht der anfang von OOP. davor sollte man erstmal 'normale' klassen und deren mechanismus verstehen.

------------------
du hast ein test-mc das ist eine klasse (unbekannt was es machen soll - aber soweit ok)
du hast einen toottip das ist auch eine klasse

angenommen, du willst eine adressliste darstellen. adresse sind eine klasse, adressliste ist eine klasse. da eine adressliste ohne adressen nicht geht gehören die zusammen.
selbe überlegung dazu: ein test-mc ohne tooltip geht nicht? nein, diese aussage ist falsch ..

so oder so ähnlich muss man sich erstmal gedanken darüber machen: "wer ist, wer hat", welche methode (funktionen) ein objekt wirklich benötigt und wie das zusammenwirken der objekte untereinander sein muss. erst wenn das klar ist fängt man an zu programmieren.

die zeit die man am anfang 'verlohren' hat holt man wieder ein, da jetzt die programmierung klar sein sollte (nur bei kleinen, unkomplizierten projekten ist die 'kaoslösung' schneller). und wenn man im team arbeiten will/muss, dann geht sowieso nichts ohne vorherige planung.

soweit zur theorie, dann die praxis:
wie du selbst schon festgestellt hast funktioniert das nicht, wenn man tooltip in test-mc integriert. also lass das zwei getrennte dinge (klassen) sein.
ist eigentlich schon besprochen worden und sollte klar sein?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-09-2008 um 17:13 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-09-2008, 23:07   #9 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Also ich habe nichts gegen ausführliche Erklärungen. Ich will Flash auch verstehen und nicht einfach nur einen funktionierenden Code vor die Nase gesetzt bekommen. Deshalb bin ich dankbar über ausführliche Erklärungen.

Ein paar Gedanken habe ich mir schon gemacht bevor ich anfing. Welche Variablen nötig sind und welche Ereignisse abgefangen werden müssen. Gut ab und zu hänge ich fest und muss gegebenenfalls noch mal zurück. Klappt, wenn auch mit Umwegen, aber dafür lernt man aus den Fehlern.

Ja ich habe nicht direkt nach einer funktionierenden Lösung gesucht. Ich war eher scharf drauf das selber zu lösen. So wie ich es benötige.
AS2 habe ich verworfen und konzentrier mich nur noch auf AS3.

Meine Klasse funktioniert jetzt. Das Cookbook hat mir dabei ebenfalls weitergeholfen.
Man muss schon wissen, dass die Dokumentklasse bereits der DisplayList hinzugefügt ist, wodurch es reicht, ein TextFeld in ihr mit addChild(textFeld) zum Anzeigen zu bringen. In einer extra Klasse wie meine Tooltip sie ist, ist mit addChild(textFeld) das ganze noch nicht getan. Da muss die Klasse selber noch mit addChild(Klasse) hinzugefügt werden.

Ich habe die beiden Sachen Tooltip und den MC jetzt getrennte Sachen sein lassen. Den Tooltip füge ich nun mit stage.addChild(_anzeigeElement); der stage hinzu.
Dazu habe ich eine kleine Frage:
Wenn ich hierbei nur addChild(_anzeigeElement) schreibe haut es wieder nicht hin. Der Tolltip scheint wieder eins mit dem MC zu sein.
Wie kommt das, habe ich doch das child nicht explizit dem MC hinzugefügt? Landet das child, wenn man nur addChild(_anzeigeElement) schreibt, im Auslösenden Element, oder wo steckt der Tooltip dann? Das Auslösende Element wäre ja in dem Fall wieder der MC, für den der Tooltip angezeigt werden soll.


HIER MAL MEINE BISHERIEGE KLASSE.
Nach dem ich sie soweit hatte, erkenne ich ziemlich viele Ähnlichkeiten zu der im gotoAndLearn Forum. Will aber noch einiges an meiner erweitern.
PHP-Code:
//===TOOLTIPKLASSE ======================================================================================================================================
//===Zum Anhängen eines Tooltips an einen MovieClip muss folgendes in der Dokumentklasse geschrieben werden        =========================================
//===var eineVariable:Tooltip = new Tooltip(MC, true, 1, "Tooltip Text");                                        =========================================
//===addChild(eineVariable);                                                                                    =========================================
//===Parameter: (MCderTooltipBekommt, trueDannAlsText FalseWirdNochNichtUnterstützt, PositionDesTooltips1-8EinsIstObenMittigDannImUhrzeigersinn =========
//=======================================================================================================================================================
package {
    
import flash.display.MovieClip;
    
import flash.display.Sprite;
    
import flash.events.MouseEvent;
    
import flash.events.Event;
    
import fl.transitions.*;
    
import flash.text.TextField;
    
import flash.text.TextFieldAutoSize;
    
import flash.text.TextFormat;
    
import flash.display.Stage;
    
import flash.events.TimerEvent;
    
import flash.utils.Timer;
    
import flash.display.DisplayObjectContainer;

    public class 
Tooltip extends Sprite {
        private var 
_ziel:MovieClip;
        private var 
_hinweisAlsText:Boolean;
        private var 
_position:int;
        private var 
_dertext:String;
        private var 
_anzeigeElement:*;//BEKOMMT DEN DATENTYP DES JEWEILS GEWÄHLTEN ERST SPÄTER. "TextField" oder "MovieClip"
        
private var _versatzX:Number;
        private var 
_versatzY:Number;
        private var 
_abstand:int 10;// REGELT DEN ABSTAND DES TOOLTIPS VOM MAUSZEIGER

        //######################################################################################## DER KONSTRUKTOR
        
public function Tooltip(ziel:MovieCliphinweisAlsText:Booleanposition:intdertext:String):void {
            
_ziel ziel;
            
_hinweisAlsText hinweisAlsText;
            
_position position;
            
_dertext dertext;
            
_ziel.addEventListener(MouseEvent.ROLL_OVERMauskontakt);
        }
        
//########################################################### HIER BERÜHRT DIE MAUS DEN MC
        
private function Mauskontakt(evt:MouseEvent):void {
            if (
_hinweisAlsText) {
                var 
textFeld:TextField = new TextField();
                var 
format:TextFormat = new TextFormat();
                
textFeld.visible false;//wichtig, da das ROLL_OVER noch vor MOUSE_MOVE ausgelöst wird. Würde sonst kurz an falscher Pos. aufblitzen
                
textFeld.text _dertext;
                
textFeld.mouseEnabled false;
                
textFeld.selectable false;
                
textFeld.background true;
                
textFeld.backgroundColor 0x999999;
                
textFeld.border true;
                
textFeld.borderColor 0x000000;
                
textFeld.autoSize TextFieldAutoSize.LEFT;
                
format.font ="Arial";
                
format.size =12;
                
format.color 0x000000;
                
format.bold true;
                
textFeld.setTextFormat(format);
                
_anzeigeElement textFeld;//HIER BEKOMMT DIE VARIABLE ERST DEN DATENTYP MIT. Hier "TextField"
            
} else {
                
trace("Hier soll noch die Möglichkeit ein MC als Tooltip entstehen");
            }
            
//----------------------------------POSITIONIERUNG PRÜFEN WAS DER USER GEWÄHLT HAT UND DEMNACH DEN VERSATZ SETZEN
            
if (_position == 1) {
                
_versatzX _anzeigeElement.width/2;
                
_versatzY _anzeigeElement.height+_abstand;
            } else if (
_position == 2) {
                
_versatzX 0-_abstand;
                
_versatzY _anzeigeElement.height+_abstand;
            } else if (
_position == 3) {
                
_versatzX 0-_abstand;
                
_versatzY _anzeigeElement.height/2;
            } else if (
_position == 4) {
                
_versatzX 0-_abstand;
                
_versatzY 0-_abstand;
            } else if (
_position == 5) {
                
_versatzX _anzeigeElement.width/2;
                
_versatzY 0-_abstand;
            } else if (
_position == 6) {
                
_versatzX _anzeigeElement.width+_abstand;
                
_versatzY 0-_abstand;
            } else if (
_position == 7) {
                
_versatzX _anzeigeElement.width+_abstand;
                
_versatzY _anzeigeElement.height/2;
            } else if (
_position == 8) {
                
_versatzX _anzeigeElement.width+_abstand;
                
_versatzY _anzeigeElement.height+_abstand;
            }
            
stage.addChild(_anzeigeElement);
            
_ziel.addEventListener(MouseEvent.MOUSE_MOVETooltipZeigen);
            
_ziel.addEventListener(MouseEvent.ROLL_OUTTooltipAusblenden);
        }
        
//########################################################################### HIER BEWEGT SICH DIE MAUS ÜBER DEN MC
        
private function TooltipZeigen(evt:MouseEvent):void {
            
_anzeigeElement.visible true;
            
_anzeigeElement.mouseX-_versatzX;
            
_anzeigeElement.mouseY-_versatzY;
        }
        
//################################################################# HIER VERLÄSST DIE MAUS DEN MC WIEDER
        
private function TooltipAusblenden(evt:MouseEvent):void {
            
stage.removeChild(_anzeigeElement);
            
_ziel.removeEventListener(MouseEvent.MOUSE_MOVETooltipZeigen);
            
_ziel.removeEventListener(MouseEvent.ROLL_OUTTooltipAusblenden);
        }
    }

__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 04-09-2008, 02:30   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von sara11 Beitrag anzeigen
Da muss die Klasse selber noch mit addChild(Klasse) hinzugefügt werden.
addChild(Klasse) <-- häää? was? wie? wo?
bitte mal in der flash-hilfe nachlesen. mit addChild werden shape, sprites und movieclips auf die bühne gebracht, aber ganz gewiss keine klassen???

und ein addChild gehört nicht in die klasse rein! eine klasse muss immer und überall funktionieren. deine klasse aber wird nur auf stage funktionieren. woher nimmst du überhaupt dein stage? (nicht ich will das wissen, sondern denk mal drüber nach und lies mal in der flash-hilfe, was die zu stage schreiben)


ein mainprogramm könnte z.b. so aussehen:
(eine möglichkeit, und dazu muss dann natürlich das programm passen)

var mc1:Testmc=new Testmc();
addChild(mc1);
var mc2:Testmc=new Testmc();
addChild(mc2);
// letztes und damit oberstes objekt (keine universelle lösung, aber geht schon mal ;-)
var tip:Tooltip=new Tooltip();
addChild(tip);

// und die klasse Tooltip könnte 2 methoden besitzen, um mc's zu addieren bzw. zu entfernen
tip.mcAdd(mc1,"Ich bin ein mc");
tip.mcAdd(mc2,"Ich auch");
// damit tip nicht mehr benötigte mc's nicht mehr prüfen muss
tip.mcDel(mc1);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (04-09-2008 um 02:37 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 04-09-2008, 09:35   #11 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Zitat:
addChild(Klasse) <-- häää? was? wie? wo?
Man speichert doch beim Aufrufen die Klasse in einer Variable. Und diese Variable füge ich mit addChild hinzu. Damit füge ich doch dann indirekt die Klasse über addChild hinzu. Jedenfalls versteh ich das so. Diese Zeile mein ich:
PHP-Code:
var eineVariable:Tooltip = new Tooltip(MCtrue1"Tooltip Text");
addChild(eineVariable); 
Zitat:
und ein addChild gehört nicht in die klasse rein!
Habe mein Vorgehen ja auch nur aus Büchern und der Hilfe. Dort wird eigentlich immer mit addChild in einer Klasse gearbeitet.
Siehe das Beispiel aus dem Cookbook auf Seite 141. Dort wird das Textfeld in der Klasse mit addChild zur DisplayList hinzugefügt. Desshalb habe ich es bei mir analog gemacht.
PHP-Code:
package {
    
import flash.display.DisplayObjectContainer;
    
import flash.display.Sprite;
    
import flash.text.TextField;
    public class 
DisplayListExample extends Sprite {
        public function 
DisplayListExample( ) {
            
// Create a display object in the actionscript engine
            
var hello:TextField = new TextField( );
            
hello.text "hello";
            
// Create the display object in the rendering engine
            // by adding it to the display list so that the
            // text field is drawn on the screen
            
addChildhello );
        }
    }

Zitat:
woher nimmst du überhaupt dein stage?
Du meinst das gibt es in der Klasse gar nicht? Ich sollte es doch jemanden anderes geben ausser dem MC selber. Also habe ich stage ausprobiert. Welch Rückschlag das das jetzt falsch ist
Zitat:
ein mainprogramm könnte z.b. so aussehen:
Du fügst dort die MCs die ein Tooltip bekommen erst über Actionscript der Bühne hinzu. Meine MCs befinden sich bereits auf der Bühne und werden per Instanznamen angesprochen. Aus welchem Grund machst du das über den Klassennamen?
Statt die zwei Methoden der Klasse Tooltip hatte ich es mir so gedacht, dass ich beim Instanzieren der Tooltipklasse gleich die Parameter übergebe. Das ganze sollte per addChild() dann der AnzeigeListe hinzugefügt werden. Wenn nun ein Tooltip nicht mehr gebraucht wird, dachte ich reicht es mit removeChild() den entsprechenden dann zu entfernen.
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.

Geändert von sara11 (04-09-2008 um 11:41 Uhr)
sara11 ist offline   Mit Zitat antworten
Alt 04-09-2008, 19:15   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
wir leben in einem freien land (ok, scheuble passt das nicht, da kann ich jetzt mal keine rücksicht drauf nehmen) da kann jeder weitgehenst tun und lassen was er will. da darf man sogar zitate rot anmalen ;-)

----------
ein symbol in der bibliothek, das entspricht einer klasse.
eine instanz auf der bühne entspricht einem objekt.
ein objekt wird von einer klasse abgeleitet. eine klasse ist (sagen wir mal) ein template, eine vorlage, ein muster. du kannst keine klasse und kein symbol auf die bühne legen. das was dort liegt sind objekte bzw. instanzen.

----------
was in büchern steht muss nicht unbedingt stimmen ;-)
mit new XXX wird der konstruktor der klasse XXX aufgerufen. dieser reserviert speicherplatz für ein objekt (für die variablen) und installiert, falls noch nicht vorhanden, die methoden usw.
in AS3 hat das keine verbindung zur bühne. das ding ist 'neu geboren' und hat zu garnichts kontakt!
a)
derjenige, der das neue objekt angefordert hat kann das auf die bühne bringen z.b.
var mc1:Testmc=new Testmc();
addChild(mc);

b)
oder man übergibt dem konstruktor den zielort z.b.
var mc1:Testmc=new Testmc(this);

und in Testmc:
function Testmc(container: DisplayObject) {
container.addChild(this);

dann kann man den konstruktor aber immer nur mit einem DisplayObject aufrufen.


in DisplayListExample wird nur ein textfeld in irgend ein DisplayObject angemeldet. dieses DisplayObject hat aber noch keine verbindung zur bühne.

var test: DisplayListExample = new DisplayListExample();
addChild(test); // erst jetzt wirst du das textfeld sehen können.
// die klasse DisplayListExample kann 1000 textfelder addieren.
// aber solange das abgeleitete test nicht auf die bühne gebracht wird sieht man nichts davon.

----------
ein tooltip für alle (denn es kann nur einen geben)
und separat von den objekten (sonst gehört ja tooltip beim rollover zum objekt dazu)
der tooltip muss testen, ob einer seiner schützlinge dran ist.

wie du das programmiert ist deine sache.
jedenfalls müssen sich die objekte zum tooltippen an und abmelden können; wie und wann auch immer
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (04-09-2008 um 19:17 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 05-09-2008, 16:53   #13 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Fands in Rot hübscher

Danke noch mal für deine Erklärungen. Verstehe langsam um was es geht. Aber alles will noch nicht in den Kopf. Da gibt es noch eine Menge Ungereimtheiten. Ich werde mir erst mal das O'Reilly Buch durchlesen. Die ersten Kapitel kann man ja kostenlos lesen. Wenn ich die hinter mich habe werde ich mir wahrscheinlich das Buch kaufen. Ist schon sehr schön erklärt darin. Mal schauen ob es Licht ins Dunkle bringt.

Wenn ich das jetzt alles versuche mit deiner Hilfe zu verstehen haben die anderen Usern nichts mehr von dir
Danke dir für die Hilfe. Ich fang jetzt an zu lesen.
__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 18-09-2008, 22:14   #14 (permalink)
Neuer User
 
Registriert seit: Oct 2006
Beiträge: 303
Hallo hgseib!

Ich arbeite mich zurzeit durch Actionscript-Lektüre. Macht Spass und ich habe auch schon einiges gelernt.
Zum Teil versteh ich schon was du meinst. Eine Instanz meiner Tooltip-Klasse wird später in der Dokumentklasse erstellt. Dann wird ein EventListener für ein beliebiges Objekt regestriert. Das ruft dann beim Eintreffen entsprechende Methoden aus der Tooltipklasse auf. Entsprechend also dem Tooltip aus dem GotoandLearn Forum.

Zu meinem Verständniss hätte ich jedoch eine Frage zu meiner bisherigen Tooltipklasse.
Ich kann dort nicht nachvollziehen warum der Tooltip flackert. Also so, als ob das Textfeld wieder den Movieclip der das Tooltip bekommen soll erweitert. Der Tooltip landet per addChild in der Instanz der Tooltipklasse. Es erweitert also nicht den Movieclip. Warum wirkt es sich dann trotzdem störend aus, dass der Mauszeiger das Tooltip(Textfeld) berührt. Der Tooltip wird somit stänig entfernt und wieder hinzugefügt.
Aber Tooltip und Movieclip sind doch momentan völlig unabhängg von einander. Sie hängen in verschiedenen DisplayObjectContainern.
Das beschäftigt mich so das ich schon am verzweifeln bin. Nach meinem Kopf darf der Tooltip dort nicht stören.

DOKUMENTKLASSE:
PHP-Code:
public function Dokument():void {
            
//----------------------------------HIER WERDEN TOOLTIPS FÜR ELEMENTE AUF DER BÜHNE DEFINIERT
            
var to:Tooltip = new Tooltip(bottombar.zoombuttontrue6"Vollbild anzeigen");
            
addChild(to);

TOOLTIPKLASSE:
PHP-Code:
//===TOOLTIPKLASSE ============================================================================================================================
//===Zum Anhängen eines Tooltips an einen MovieClip muss folgendes in der Dokumentklasse geschrieben werden===============================
//===var eineVariable:Tooltip = new Tooltip(MC, true, 1, "Tooltip Text");===============================
//===addChild(eineVariable);===============================
//===Parameter: (MCderTooltipBekommt, trueDannAlsText FalseWirdNochNichtUnterstützt, PositionDesTooltips1-8EinsIstObenMittigDannImUhrzeigersinn
//=============================================================================================================================================
package {
    
import flash.display.MovieClip;
    
import flash.display.Sprite;
    
import flash.events.MouseEvent;
    
import flash.events.Event;
    
import fl.transitions.*;
    
import flash.text.TextField;
    
import flash.text.TextFieldAutoSize;
    
import flash.text.TextFormat;
    
import flash.display.Stage;
    
import flash.events.TimerEvent;
    
import flash.utils.Timer;
    
import flash.display.DisplayObjectContainer;

    public class 
Tooltip extends Sprite {
        private var 
_ziel:MovieClip;
        private var 
_hinweisAlsText:Boolean;
        private var 
_position:int;
        private var 
_dertext:String;
        private var 
_anzeigeElement:*;//BEKOMMT DEN DATENTYP DES JEWEILS GEWÄHLTEN ERST SPÄTER. "TextField" oder "MovieClip"
        
        //######################################################################################## DER KONSTRUKTOR
        
public function Tooltip(ziel:MovieCliphinweisAlsText:Booleanposition:intdertext:String):void {
            
_ziel ziel;
            
_hinweisAlsText hinweisAlsText;
            
_position position;
            
_dertext dertext;
            
_ziel.addEventListener(MouseEvent.MOUSE_OVERMauskontakt);
        }
        
//########################################################### HIER BERÜHRT DIE MAUS DEN MC
        
private function Mauskontakt(evt:MouseEvent):void {
            if (
_hinweisAlsText) {
                var 
textFeld:TextField = new TextField();
                var 
format:TextFormat = new TextFormat();
                
textFeld.visible false;//wichtig, da das ROLL_OVER noch vor MOUSE_MOVE ausgelöst wird.
                
textFeld.text _dertext;
                
textFeld.mouseEnabled false;
                
textFeld.selectable false;
                
textFeld.background true;
                
textFeld.backgroundColor 0x999999;
                
textFeld.border true;
                
textFeld.borderColor 0x000000;
                
textFeld.autoSize TextFieldAutoSize.LEFT;
                
textFeld.setTextFormat(format);
                
_anzeigeElement textFeld;//HIER BEKOMMT DIE VARIABLE ERST DEN DATENTYP MIT. Hier "TextField"
            
}
            
trace("Child in Tooltip   VOR add: "+numChildren);
            
trace("Child in Movieclip VOR add: "+_ziel.numChildren);
            
trace("Child in Stage     VOR add: "+stage.numChildren);
            
addChild(_anzeigeElement);
            
trace("Child in Tooltip   NACH add: "+numChildren);

            
trace("Child in Movieclip NACH add: "+_ziel.numChildren);
            
trace("Child in Stage     NACH add: "+stage.numChildren);
            
_ziel.addEventListener(MouseEvent.MOUSE_MOVETooltipZeigen);
            
_ziel.addEventListener(MouseEvent.MOUSE_OUTTooltipAusblenden);
        }
        
//########################################################################### HIER BEWEGT SICH DIE MAUS ÜBER DEN MC
        
private function TooltipZeigen(evt:MouseEvent):void {
            
_anzeigeElement.visible true;
            
_anzeigeElement.mouseX;
            
_anzeigeElement.mouseY;
        }
        
//################################################################# HIER VERLÄSST DIE MAUS DEN MC WIEDER
        
private function TooltipAusblenden(evt:MouseEvent):void {
            
removeChild(_anzeigeElement);
            
_ziel.removeEventListener(MouseEvent.MOUSE_MOVETooltipZeigen);
            
_ziel.removeEventListener(MouseEvent.MOUSE_OUTTooltipAusblenden);
        }
    }

__________________
Vielen Dank an jeden der mir hilft Flash zu lernen!
Bevor ich Fragen stelle durchsuche ich immer ausführlich das Forum und die Flashhilfe.
sara11 ist offline   Mit Zitat antworten
Alt 20-09-2008, 12:51   #15 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
sorry, bin z.Z. gut ausgelastet und habe wenig zeit, mir deinen script an zu sehen.
wenn was flackert, dann wird es wohl ständig an- und ausgeschaltet.
in der richtung musst du mal suchen und testen.


http://www.seibsprogrammladen.de/fra...ispiele/flash9
-> AS3_tooltip
das eine rechteck hat kein tooltip und die anderen sprechen mit einer verzögerung an.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   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



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele