Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash MX 2004

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-11-2007, 23:50   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 5
externe bilder per Xml einlesen: onrelease problem

hallo zusammen,

ich habe sehr lange und ausgiebig die suchfunktion benutzt und bin nicht fündig geworden.

ich lade mir per xml einen "bilderstreifen", also einzelne kleine bilder, die in einer reihe in einem container plaziert sind.
wenn man auf eins der bilder klickt, soll irgendwas passieren. in meinem fall soll die schöne webseite google.de aufgerufen werden.

irgendwie scheint aber folgendes nicht zu funktionieren:

PHP-Code:
            _root.container["bild"+i].onRelease = function() {
                
_root.container["bild"+i].getURL("http://www.google.de""_self");
            }; 
liegt das daran, dass die ganze chose in einer onLoad-funktion steckt?
oder dass die einzelnen "bild"+i-movieclips keine explizite breite haben?


hier nochmal der ganze quelltext:

PHP-Code:
stop();
// Allgemeine Variablen initialisieren
_root.cbreite 0;
_root.scrollbalkenabstand 0;
var 
XMLbildlader = new XML();
// Leerzeichen ignorieren
XMLbildlader.ignoreWhite true;
XMLbildlader.load("xml/bildlader.xml");
XMLbildlader.onLoad = function(funktioniert) {
    if (
funktioniert) {
        
// Hauptvariablen holen
        
abstand parseFloat(XMLbildlader.firstChild.attributes.bilderabstand);
        
_root.scrollbalkenabstand parseFloat(XMLbildlader.firstChild.attributes.scrollbalkenabstand);
        
breite abstand;
        
// Einzelne Unterknoten abklappern
        
for (i=0i<XMLbildlader.firstChild.childNodes.lengthi++) {
            
_root.container.createEmptyMovieClip(("bild"+i), (10+i));
            
_root.container["bild"+i]._x breite;
            
_root.container["bild"+i]._y abstand;
            
_root.container["bild"+i].loadMovie(XMLbildlader.firstChild.childNodes[i].attributes.pfad);
            
_root.container["bild"+i].onRelease = function() {
                
_root.container["bild"+i].getURL("http://www.google.de""_self");
            };
            
// Aktuelle Breite des Containers hochsetzen
            
breite parseFloat(XMLbildlader.firstChild.childNodes[i].attributes.breite)+parseFloat(abstand)+parseFloat(breite);
            
_root.cbreite breite;
        }
    }
}; 
die xml-datei sieht so aus:
PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<bildlader bilderabstand="20" scrollbalkenabstand="150">
    <bild pfad="img/01.jpg" breite="80" hoehe="80" />
    <bild pfad="img/02.jpg" breite="80" hoehe="80" />
    <bild pfad="img/03.jpg" breite="80" hoehe="80" />
    <bild pfad="img/04.jpg" breite="80" hoehe="80" />
    <bild pfad="img/05.jpg" breite="80" hoehe="80" />
    <bild pfad="img/06.jpg" breite="80" hoehe="80" />
    <bild pfad="img/07.jpg" breite="80" hoehe="80" />
    <bild pfad="img/08.jpg" breite="80" hoehe="80" />
</bildlader>
vielen dank im voraus,

christian

Geändert von rohrspecht (05-11-2007 um 07:03 Uhr)
rohrspecht ist offline   Mit Zitat antworten
Alt 05-11-2007, 01:29   #2 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
zum bilder anladen brauchst du loadMovie, ggfls die Moviecliploader klasse, aber nicht getUrl
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 05-11-2007, 06:58   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 5
hallo,

danke für die schnelle antwort.
die kleinen thumbnails lade ich mit

PHP-Code:
 _root.container["bild"+i].loadMovie(XMLbildlader.firstChild.childNodes[i].attributes.pfad); 
mit dem getUrl probiere ich nur aus, ob das mit dem onRelease funktioniert, was ja leider nicht der fall ist.
rohrspecht ist offline   Mit Zitat antworten
Alt 05-11-2007, 08:04   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.142
Die onRelease Funktioniert nicht, weil du sie initialisierst bevor das bIld komplett geladen ist. Du musst:
  1. XML laden
  2. XML Verarbeiten (Beispielsweise Pfade auslesen und speichern)
  3. Die Bilder dann mit loadMovie oder MovieClipLoader.loadClip laden
  4. Dann formatieren udn Listener zuweisen.
Am besten nutzt du den MovieClipLoader, weil du dann nur den onLoadInit Event abwarten musst.

Alternativ könntest du auch noch einen weiteren MovieClip zur Verschachtelung hinzuziehen und dann auf den oberen den Listener legen und in den inneren das Bild laden.
Omega Psi ist offline   Mit Zitat antworten
Alt 05-11-2007, 21:27   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 5
danke für die antwort.
ich habe es erstmal ohne den moviecliploader probiert, obwohl das sicherlich eine bessere lösung ist und ich diese auf jeden fall implimentieren werde.

allerdings bin ich der meinung, dass es so auch funktionieren sollte:
PHP-Code:
stop();
// Allgemeine Variablen initialisieren
_root.cbreite 0;
_root.scrollbalkenabstand 0;
_root.bilder_anzahl 0;
_root.bilder_breite = [];
var 
XMLbildlader = new XML();
// Leerzeichen ignorieren
XMLbildlader.ignoreWhite true;
XMLbildlader.load("xml/bildlader.xml");
XMLbildlader.onLoad = function(funktioniert) {
    if (
funktioniert) {
        
// Hauptvariablen holen
        
abstand parseFloat(XMLbildlader.firstChild.attributes.bilderabstand);
        
_root.scrollbalkenabstand parseFloat(XMLbildlader.firstChild.attributes.scrollbalkenabstand);
        
breite abstand;
        
// Einzelne Unterknoten abklappern
        
for (i=0i<XMLbildlader.firstChild.childNodes.lengthi++) {
            
_root.container.createEmptyMovieClip(("bild"+i), (10+i));
            
_root.container["bild"+i].createEmptyMovieClip("holder"35);
            
_root.container["bild"+i]._x breite;
            
_root.container["bild"+i]._y abstand;
            
_root.container["bild"+i].onPress = function() {
                
getURL(XMLbildlader.firstChild.childNodes[i].attributes.adresse);
            };
            
_root.container["bild"+i].holder.loadMovie(XMLbildlader.firstChild.childNodes[i].attributes.pfad);
            
// Aktuelle Breite des Containers hochsetzen
            
breite parseFloat(XMLbildlader.firstChild.childNodes[i].attributes.breite)+parseFloat(abstand)+parseFloat(breite);
            
_root.cbreite breite;
        }
    }
}; 
ich lade das bild jetzt in einen extra holder-movieclip.

jetzt habe ich leider das problem, dass er
PHP-Code:
XMLbildlader.firstChild.childNodes[i].attributes.adresse 
diesen wert nicht zu mögen scheint. wenn ich aus

PHP-Code:
_root.container["bild"+i].onPress = function() {
                
getURL(XMLbildlader.firstChild.childNodes[i].attributes.adresse);
            }; 
ein
PHP-Code:
_root.container["bild"+i].onPress = function() {
                
getURL("http://www.google.de");
            }; 
mache, klappts. wo hakts denn jetzt???


edit:
hier noch meine xml-datei:
PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<bildlader bilderabstand="20" scrollbalkenabstand="150">
    <bild pfad="img/01.jpg" breite="80" hoehe="80" adresse="http://www.google.de" ziel ="_blank" />
    <bild pfad="img/02.jpg" breite="80" hoehe="80" adresse="http://www.heise.de" ziel ="_blank" />
    <bild pfad="img/03.jpg" breite="80" hoehe="80" adresse="http://www.apple.de" ziel ="_blank" />
    <bild pfad="img/04.jpg" breite="80" hoehe="80" adresse="http://www.google.de" ziel ="_blank" />
    <bild pfad="img/05.jpg" breite="80" hoehe="80" adresse="http://www.heise.de" ziel ="_blank" />
    <bild pfad="img/06.jpg" breite="80" hoehe="80" adresse="http://www.apple.de" ziel ="_blank" />
    <bild pfad="img/07.jpg" breite="80" hoehe="80" adresse="http://www.google.de" ziel ="_blank" />
    <bild pfad="img/08.jpg" breite="80" hoehe="80" adresse="http://www.heise.de" ziel ="_blank" />
</bildlader>

Geändert von rohrspecht (05-11-2007 um 21:29 Uhr)
rohrspecht ist offline   Mit Zitat antworten
Alt 06-11-2007, 09:14   #6 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Der Fehler liegt jetzt offensichtlich woanders (du hast, bewusst oder unbewusst, einen der Workarounds deiner ursprünglichen Problematik gefunden).

Ein Grundproblem das du schonmal hast ist, dass du in dem onPress (übrigens würde ich für Schaltflächen an deiner stelle eher onRelease verwenden) i benutzt.

die for-Schleife ist an der Stelle aber immer schon komplett durchgelaufen was nix anderes Bedeutet als das i immer den maximalen Wert haben wird.

Das lässt sich wie folgt umgehen:

PHP-Code:
for (i=0i<XMLbildlader.firstChild.childNodes.lengthi++) {
  var 
mc:MovieClip _root.container.createEmptyMovieClip(("bild"+i), (10+i));          
  var 
holder:MovieClip mc.createEmptyMovieClip("holder"35);
            
  
mc.id  i;
  
mc._x breite;
  
mc._y abstand;
  
  
mc.onPress = function() {
    
getURL(XMLbildlader.firstChild.childNodes[this.id].attributes.adresse);
  };
                
  
holder.loadMovie(XMLbildlader.firstChild.childNodes[i].attributes.pfad);
    
breite parseFloat(XMLbildlader.firstChild.childNodes[i].attributes.breite)+parseFloat(abstand)+parseFloat(breite);
            
_root.cbreite breite;

Das mit mc ist nur ein Tip, damit sparst du dir Schreibarbeit. In dem onPress versuch mal einen Trace zu setzen (ausgegangen davon das du offline Testest):

PHP-Code:
  mc.onPress = function() {
    
trace(XMLbildlader.firstChild.childNodes[this.id].attributes.adresse);
    
getURL(XMLbildlader.firstChild.childNodes[this.id].attributes.adresse);
  }; 
Was gibt dir das denn aus? undefined?
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt 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 00:50 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele