tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
829
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von JaguarGorgone
    JaguarGorgone JaguarGorgone ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    57
    Hallo liebe Gemeinde,

    ich stehe vor einem Problem, welches mich seit Tagen nicht in Ruhe lässt. Nach vielem Suchen und Herumprobieren, hoffe ich nun bei Euch auf den entscheidenen Tip.

    Zunächst zum Rahmen des Ganzen:
    Ich sitze an einem Flashfilm. In einer Funktion wird eine Liste aus einer Datenbank über PHP bzw. XML in den Film importiert. Jeder Datensatz hat wird in einen eigens erzeugten Movieclip angezeigt. Um den Rahmen des Films nicht zu sprengen, liegen diese Clips hinter einer Maske und können über eine Scrollleiste bewegt werden.
    Da jedes Element eine eigene Funktion (d.h. beim Anklicken des Movieclips wird eine Änderung im Film ausgeführt) im Film besitzt, konnte ich diese nicht einfach in ein Textfeld untereinander setzen.

    Das Problem:
    In einer for-Schleife werden nun die Datensätze der XML-Datei ausgelesen. Für jeden Datensatz wird ein MC erzeugt. Das klappt auch einwandfrei. Auf diesen Movieclip wird dann direkt ein Textfeld mit dem Inhalt/Daten des Satzes gesetzt. Dort liegt das Problem. Der Text wird nicht angezeigt. Der textliche Inhalt ist vorhanden (trace). Meine Vermutungen gehen in zwei Richtungen: Entweder ist der Pfad falsch oder die Tiefe des Textfeldes ist nicht korrekt.
    Da der Pfad aber vorher schon zur Erzeugung des Movieclips erfolgreich genutzt wurde, würde ich das eher ausschliessen. Bliebe die Tiefe der Ebene. Dort habe ich verschiedene Werte eingesetzt:
    • getNextHighestDepth() versuchte Pfade: von _root. bis _root.shoplocator_inhalt.shopback['shop_'+(i+1)]. und this.
    • feste Werte (sowohl kleine Werte als auch grosse Werte
    • swapDepths(12)
    Alles bisher ohne Erfolg.

    Den Quelltext für die MC Erzeugung (die wichtigsten Auszüge):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    on (release) {
                    var shopXML:XML = new XML();
        var sh:Array = new Array();
        shopXML.ignoreWhite = true;
        shopXML.onLoad = function(success) {
            var currentNode:XMLNode = this.firstChild;
            var i:Number = 0;
            var c:Number = 0;
            var u:Number = 4;
            for (var childNode = currentNode; childNode != null; childNode=childNode.nextSibling, i++) {
                sh[i] = new Array();
                _root.shoplocator_inhalt.shopback.createEmptyMovieClip('shop_'+(i+1), _root.shoplocator_inhalt.shopback.getNextHighestDepth());
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].beginFill(0xFFFFFF, 100);
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].moveTo(u, c);
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].lineTo(324, c);
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].lineTo(324, (c+60));
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].lineTo(u, (c+60));
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].lineTo(u, c);
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].endFill();
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].createTextField('shop', this.swapDepths(12), (u + 12), (c + 4), 300, 60);
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop.multiline = true;
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop.html = true;
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop.color = 0xDD1100;
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop.htmlText = childNode.childNodes[0].childNodes[0].nodeValue+'<br />'+childNode.childNodes[1].childNodes[0].nodeValue+'<br />'+childNode.childNodes[2].childNodes[0].nodeValue+' '+childNode.childNodes[3].childNodes[0].nodeValue;
                // Abstand fürs nächste Element
                                                    c = c+64;
                // Aktion erzeugen
                _root.shoplocator_inhalt.shopback['shop_'+(i+1)].onRelease = function() {
                                                                    // hier kommt dann die Aktion           
                };
                
            }
        };
        // XML laden
        shopXML.load("shoplocator.xml");
    }

    Zum besseren Verständnis:
    Die Instanz "shopback" liegt auf der Instanz "shoplocator_inhalt". Über der Ebene liegt eine Maske, um den Scrolleffekt für die erzeugten MCs zu erhalten. Wie bereits beschrieben, werden auch alle MCs angezeigt und auch die Scrollfunktion arbeitet korrekt.

    Der entscheidende Befehl ist wohl:
    Code :
    1
    
    _root.shoplocator_inhalt.shopback['shop_'+(i+1)].createTextField('shop', this.swapDepths(12), (u + 12), (c + 4), 300, 60);

    Warum erscheinen diese dynamisch erzeugten Textfelder nicht auf der dynamisch erzeugten Ebene?
    Für Tips und Lösungen bin ich sehr dankbar.

    Schöne Grüsse
     
    I never sleep, cause sleep is the cousin of death

    my-vendetta Pixville - Home of the Pix

  2. #2
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Hi,

    was soll denn jedes mal das
    Code :
    1
    
    this.swapDepths(12)
    dort? this bezieht sich in diesem Fall auf Dein XML-Objekt (shopXML) und die Funktion wird daher wohl "undefined" zurückgeben ...

    Gruß
    .
     

  3. #3
    Avatar von JaguarGorgone
    JaguarGorgone JaguarGorgone ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    57
    Hallo Tobias,

    danke für Deinen Hinweis.

    Das swapDepths() war jetzt der letzte Versuch, den ich als Tiefenwert mal versucht habe.
    Vorher hatte ich dort, wie geschrieben, _root.getNextHighestDepth(), etc. stehen.
    Also auch mit Verweis auf den absoluten Pfad.

    Ich hab die Tiefen mal über trace ausgeben lassen mit Tiefenwerterzeugung über
    Code :
    1
    
    _root.shoplocator_inhalt.shopback['shop_'+(i+1)].createTextField('shop', (i +_root.shoplocator_inhalt.shopback['shop_'+(i+1)].getNextHighestDepth() + 1), (u + 12), (c + 4), 300, 60);

    Befehl zur Ausgabe:
    Code :
    1
    
    trace(_root.shoplocator_inhalt.shopback.getDepth() + ' +++ ' + _root.shoplocator_inhalt.shopback['shop_'+(i+1)].getDepth() + ' +++ ' + _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop.getDepth());

    Ausgabe (bei 13 vorhandenen Werten in der XML Datei):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    -16376 +++ 0 +++ 1
    -16376 +++ 1 +++ 2
    -16376 +++ 2 +++ 3
    -16376 +++ 3 +++ 4
    -16376 +++ 4 +++ 5
    -16376 +++ 5 +++ 6
    -16376 +++ 6 +++ 7
    -16376 +++ 7 +++ 8
    -16376 +++ 8 +++ 9
    -16376 +++ 9 +++ 10
    -16376 +++ 10 +++ 11
    -16376 +++ 11 +++ 12
    -16376 +++ 12 +++ 13

    Obwohl hier das Textfeld die höchste Ebene hat, wird sie nicht angezeigt.

    Vielleicht hast Du ja noch einen Tip.

    Danke und schöne Grüsse
     
    I never sleep, cause sleep is the cousin of death

    my-vendetta Pixville - Home of the Pix

  4. #4
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Hi,

    prinzipiell kannst Du allen Textfeldern die selbe Tiefe (z.B. 1) geben, da sie sich alle in unterschiedlichen MovieClips befinden. Jeder MC hat seine ganz eigene Stapelreihenfolge.

    Wenn Du die Textfelder "tracen" kannst (die Objekte also existieren), Du aber keinen Text siehst, kann es an Problemen mit dem Font liegen (Du hast soweit ich sehen kann, nicht mal einen Font definiert). Probiers mal mit einer komplett eingebetteten Schriftart, die zum Export für AS freigegeben ist.

    Wahrscheinlich würdest Du Dir viel Arbeit ersparen, wenn Du einfach einen MC mit Rahmen und Textfeld "per Hand" erstellst und nach dem Einladen der XML-Datei das Ding einfach x-mal per attachMovie auf die Bühne holst, statt Linien und Textfeld per AS zu zeichnen.

    Im Übrigen sind solche Monster wie "_root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop." recht schlecht zu lesen (verwende doch Rückgabewerte und temporäre Objekte), ich würde Dich also bitten, die Datei (samt dazugehöriger .xml) einmal zu posten. Dann würde ich mal drüberschauen.

    Gruß
    .
     

  5. #5
    Avatar von JaguarGorgone
    JaguarGorgone JaguarGorgone ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    57
    Hallo Tobias,

    ein weiteres Dankeschön für Deine Tips. Die Idee mit dem attachMovie finde ich gut. Habe auch schon mit der Umsetzung begonnen.

    Trotzdem finde ich es höchst unbefriedigend nicht zu wissen, warum das so nicht funktioniert.

    Die eingebettete Schriftart dem Textfeld zuzuweisen brachte übrigens keinen Erfolg.

    Seltsam ist es, dass der Text schon mal angezeigt wurde. Da hatte ich diese Elemente alle direkt auf der _root Ebene erscheinen lassen ohne Maske, Verschachtelung und Scrollbalken.

    Ich hab mal aus Übersichtsgründen einen Dummy erzeugt, der dieselbe Ausgangslage wie der Film hat. Hier besteht dasselbe Problem.
    Nebenbei bemerkt:
    Dort habe ich Deine Scrollleiste eingebaut. Wirklich sehr schönes Arbeiten damit.

    Wenn Du Zeit und Lust hast, dort mal kurz drüber zu schauen, wäre ich Dir sehr dankbar.

    Danke für Deine Mühe

    Grüsse
    Angehängte Dateien Angehängte Dateien
     
    I never sleep, cause sleep is the cousin of death

    my-vendetta Pixville - Home of the Pix

  6. #6
    Registriert seit
    Mar 2004
    Ort
    Basisrealität
    Beiträge
    12.118
    Blog-Einträge
    7
    Hi,

    um einen eingebetteten Font zu verwenden, musst Du ein TextFormat-Objekt erstellen, dem Du die entsprechende font-Eigenschaft zuweist. Zudem musst Du die embedFonts-Eigenschaft des Textfeldes auf "true" stellen. Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
                // wir nehmen mal eine temporäre Variable, um uns jedes Mal
                // diese endlos lange Adressierung zu sparen:
                var tf = _root.shoplocator_inhalt.shopback['shop_'+(i+1)].shop;
                // embedFonts einschalten
                tf.embedFonts = true;
                tf.border = false;
                tf.multiline = true;
                tf.html = true;
                tf.textColor = 0xDD1100;
                tf.htmlText = childNode.childNodes[0].childNodes[0].nodeValue+'<br />'+childNode.childNodes[1].childNodes[0].nodeValue+'<br />'+childNode.childNodes[2].childNodes[0].nodeValue+' '+childNode.childNodes[3].childNodes[0].nodeValue;
                // TextFormat-Objekt erstellen:
                var f = tf.getTextFormat();
                // Font zuweisen: (Verknüpfungsbezeichner)
                f.font = 'MeinFont';
                // selbe Größe wie beim Font einstellen:
                f.size = 10;
                // ... und dem Textfeld wieder zuweisen:
                tf.setTextFormat(f);

    Gruß
    .
     

  7. #7
    Avatar von JaguarGorgone
    JaguarGorgone JaguarGorgone ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    57
    Asche über mein Haupt.
    Mit der eingebetteten Schriftart funktioniert es. Aber wegen meiner bescheidenen Flashkenntnisse konnte ich die eingebettete Schriftart nicht richig dem Textfeld zuweisen.

    Vielen Dank für Deine kompetente Hilfe, Tobias.

    Somit hat sich die Geschichte erledigt.
     
    I never sleep, cause sleep is the cousin of death

    my-vendetta Pixville - Home of the Pix

Ähnliche Themen

  1. Dynamisch erzeugten Button speichern
    Von exiter28 im Forum .NET Windows Forms
    Antworten: 9
    Letzter Beitrag: 02.07.09, 18:46
  2. dynamisch erstellte Tables werden nicht angezeigt
    Von cimcime im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 17.02.08, 17:34
  3. dynamisch erzeugten Namen auslesen
    Von pat_morita im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 13.06.07, 09:31
  4. ezpdf und dynamisch erzeugte Bilder
    Von SuperSonik im Forum PHP
    Antworten: 0
    Letzter Beitrag: 29.08.05, 11:32
  5. Variablenbezeichnung in dynamisch erzeugten Textfeld
    Von herzblut im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 13.06.05, 11:08