bilder in mc laden

LiThiUm-FX

Mitglied
hallo miteinander,

bin zwar kein ganz blutiger anfänger mehr aber an diesem problem beiss ich mir jetzt schon eine zeit lang die zähne aus und ich verstehs einfach nicht...

ich habe auf der bühne mehrere verschachtelte mcs. und dann möchte ich bei einem frame in einen verschachtelten mc, mit dem namen "pic1" ein bild reinladen mit folgender anweisung:

Code:
mc_leiste.mc_dock.mc_dock_pic1.1.pic1.loadMovie("bilder/pic1.jpg");

aber er macht gar nichts, im besten fall bekomme ich die rückmeldung dass bei dieser anweisung ein semicollumn fehlt....

also vieleicht kann mir da irgendwer behilflich sein

vielen dank schonmal im voraus !
 
hmmm, ok, danke schonmal.
aber selbst wenn ich ihn einen namen gebe wie pic1, läd er mir das bild nicht...
kann es sein dass es an der verschachtelung der mcs liegt ?

...hab jetzt schon sehr viel rumprobiert und es geht anscheinend echt nicht einen mc anzusprechen der mehr als 2 hirachie stufen tief verankert ist... aber das kann doch nicht sein oder ?
 
Zuletzt bearbeitet:
oh man... es lag ganz einfach daran dass der mc erst im 2ten bild des darüber gelegenen mc ist. habs jetzt umgebaut sodass der schon im ersten frame auftaucht und siehe da ! läuft !
...ich hock schon wieder zu lange vorm bildschirm :D

aber jetzt ist schon mein nächstes problem aufgetaucht...
gibt es denn in as keine arrays die sich als variable definieren lassen also ala'
array_name[counter] ?
 
Hallo,

da ich es euch nicht antun möchte, einen neuen Thread zu erstellen und da wohl der Themenersteller seine Frage beantwortet bekommen hat, mische ich mich mal mit einer Frage ein.
Habe schon längere Zeit ein Problem mit dem dynamischen Laden von Bildern. Das Problem ist, mein Bild wird direkt nach der Anweisung nicht geladen(was ja eigentlich auch verständlich ist), ich will aber unbedingt das Bild erst laden(vielleicht ist es sogar möglich, einen Fortschrittsbalken anzuzeigen), bevor ich mit dem eigentlichen Vorhaben beginne.

Also hier mein Code:
Code:
//Movieclips duplizieren und in einer Reihe links vom Movieclip platzieren:
for(i = 1; i <= _root.anzahl; i++ )
{
	_root.filmstreifen_mc.attachMovie("[Platzhalter]Bild", "bild" + i + "_mc", _root.filmstreifen_mc.getNextHighestDepth() )
	_root.filmstreifen_mc["bild" + i + "_mc"].loadMovie( "./Bild" + i + ".jpg" );
	_root.filmstreifen_mc["bild" + i + "_mc"]._x = ( ( ( 0 - _root.filmstreifen_mc["bild" + i + "_mc"]._width ) - _root.spacing ) * i ); //Berechnung des linken Abstands
	_root.filmstreifen_mc["bild" + i + "_mc"]._y = ( ( _root.filmstreifen_mc._height - _root.filmstreifen_mc["bild" + i + "_mc"]._height ) / 2 ); //Berechnung des oberen Abstands
	trace("Höhe: " + _root.filmstreifen_mc["bild" + i + "_mc"]._height + " und die Breite: " + _root.filmstreifen_mc["bild" + i + "_mc"]._width); //FEHLER NERVT!
	//trace("x: " + _root.filmstreifen_mc["bild" + i + "_mc"]._x + " y: " + _root.filmstreifen_mc["bild" + i + "_mc"]._y)
}

Mir geht es hier nur hauptsächlich darum, warum mir im Trace zu der Höhe und der Breite des geladenen Bildes(also BildXX.jpg) rein gar nichts angezeigt wird - naja, gar nichts ist vielleicht das falsche Wort. Es wird mir nur eine Null ausgegeben! Dabei haben die Bilder Ausmessungen von 80 x 80 Pixeln. Einige Frames später werden mir dann die richtigen Abmessungen angezeigt - nur da ist es schon zu spät! ;)
Also nochmal zusammgefasst meine Fragen:
-Warum beinhalten die Variablen des Movieclips eine Null für die Breite und die Höhe?
-Womit kann ich überprüfen, ob das Bild geladen wurde?
-Gibt es die Möglichkeit sich den Ladefortschritt des Bildes anzeigen zu lassen?

Also ich wäre froh über einen kleinen Denkanstoß zum Thema "Warum verdammt noch mal, wird mein Bild nicht in 1/2000 Sek. geladen?" ;)

Danke euch im Voraus:


Adam
 
Hi,

Warum beinhalten die Variablen des Movieclips eine Null für die Breite und die Höhe?
weil ein frisch erstellter MovieClip in der Regel die Höhe und Breite 0 hat.

Womit kann ich überprüfen, ob das Bild geladen wurde?
Mit den Methoden getBytesLoaded und getBytesTotal des MovieClip-Objekts, oder über die Ereignisse eines MovieClipLoaders.

Gibt es die Möglichkeit sich den Ladefortschritt des Bildes anzeigen zu lassen?
über den Quotienten der beiden oben genannten Methoden bzw. mit der onLoadProgress-Methode eines MovieClipLoaders.

Warum verdammt noch mal, wird mein Bild nicht in 1/2000 Sek. geladen?
... damit Du gar nicht erst auf den Gedanken kommst, direkt nach der loadMovie-Aktion auf das Bild zuzugreifen - spätestens im Web kann das Laden (auch mit DSL16000) nämlich erheblich länger dauern. ;)

Ich poste Dir gerne ein Beispiel für eine Lösung, brauche aber zuvor einige Informationen von Dir:

- was soll _root.filmstreifen_mc._height zurückgeben? Je nachden, wie unterschiedlich hoch die Bilder sind, ändert sich dieser Wert bei jedem geladen Bild ...

- spricht etwas dagegen, die Bilder in einem Array abzulegen? Das würde die Verwaltung eines Preloaders erheblich vereinfachen.

Gruß
.
 
Hallo Tobias - Danke für deine schnelle und informative Antwort!

weil ein frisch erstellter MovieClip in der Regel die Höhe und Breite 0 hat.
Hehe, schon klar - aber ich will ja nicht die Größe des eigentichen "Container-Movieclips" haben, sondern die des reingeladenen Bildes - aber den Grund dafür weiß ich ja jetzt.

Mit den Methoden getBytesLoaded und getBytesTotal des MovieClip-Objekts, oder über die Ereignisse eines MovieClipLoaders.
Klasse! Ist mir völlig entfallen, dass es ja noch diese Methoden gibt.

über den Quotienten der beiden oben genannten Methoden bzw. mit der onLoadProgress-Methode eines MovieClipLoaders.
Okay, stimmt - die übliche Prozentrechnung aus der Mathematik.

... damit Du gar nicht erst auf den Gedanken kommst, direkt nach der loadMovie-Aktion auf das Bild zuzugreifen - spätestens im Web kann das Laden (auch mit DSL16000) nämlich erheblich länger dauern.
Ja das ist das Problem, welches ich versuche mit einer guten Prozedur zu umgehen - trotzdem, sind doch nur Einsen und Nullen! ;) Ne, klar - das ist das Hauptproblem und eine Lösung deinerseits begrüße ich natürlich.

Ich poste Dir gerne ein Beispiel für eine Lösung, ...
Das ist wirklich erfreulich. Ich will aber keine Umstände bereiten... ...dennoch ein Beispiel klingt natürlich verlockend.

- was soll _root.filmstreifen_mc._height zurückgeben? Je nachden, wie unterschiedlich hoch die Bilder sind, ändert sich dieser Wert bei jedem geladen Bild ...
Japp, also das ist die Höhe des aktuell geladenen Bildes. Damit du einen Überblick über das Projekt hast: Es geht darum eine Art "Intro" für ein Internetportal zu erstellen. In diesem werden Bilder dynamisch geladen(die Pfade stehen in einer XML-Datei) und erstmal in einer Reihe aufgestellt. {Und hier ist mein Problem ;) }. Danach bewegen sich alle Bilder von links nach rechts und werden ständig geloopt. Und das war es auch schon.

- spricht etwas dagegen, die Bilder in einem Array abzulegen? Das würde die Verwaltung eines Preloaders erheblich vereinfachen.
Nein, wenn du eine Methode weißt, wie das funktioniert, gerne! Ich hab ja anfangs eine XML-Datei geladen und dann die ganzen Pfad aus jener in ein Array gelegt. Aber wie man wirklich die Bilder in ein Array legen kann, ist mir bisher nicht bekannt. Bin gespannt auf deine Lösung! :)

Ciao und Danke:

Adam
 
Zuletzt bearbeitet:
Hi,

probier es mal mit diesem Code (aus dem Stehgreif getippt, daher ungetestet):
Code:
var anzahl = 10;

var abstand = 10;

var speed = 2;

var loaded = 0;

var images = new Array();

var mcl = new MovieClipLoader();

mcl.onLoadInit = function() {
	loaded ++;
	if (loaded >= anzahl) reArrange();
}

for(i=0; i<anzahl; i++) {
	images[i] = filmstreifen_mc.createEmptyMovieClip("image" + i, i);
	images[i].pic = images[i].createEmptyMovieClip("pic", 1);
	images[i].filename = "Bild" + (i + 1) + ".jpg";
	images[i]._visible = false;
	mcl.loadClip(images[i].filename, images[i].pic);
}

function reArrange() {
	for(i=0; i<anzahl; i++) {
		images[i]._y = Math.round(filmstreifen_mc._height / 2 - images[i]._height / 2);
		if (i > 0) {
			images[i]._x = Math.round(images[i - 1]._x + images[i - 1]._width + abstand);
		}
		images[i]._visible = true;
	}
	go();
}

function go() {
	this.onEnterFrame = function() {
		for(i=0; i<anzahl; i++) {
			images[i]._x -= speed;
		}
		for(i=0; i<anzahl; i++) {
			if (images[i]._y < - images[i]._width) putRight(i);
		}
	}
}

function putRight(n) {
	var obj = images[n];
	var prev = (n > 0)? images[n - 1] : images[images.length - 1];
	obj._x = Math.round(prev._x + prev._width + abstand);
}

Die Höhe des Containers darfst Du erst als Maßstab verwenden, wenn alle Bilder komplett geladen sind, da sich dieser Wert ja mit jedem neuen Bild ändern kann.

Mit "in ein Array packen" meinte ich nicht die Pfade zu den Bildern, sondern ein Array aus MovieClips (hier: "images"), über welches alle Bilder einfach referenziert werden können.

Gruß
.
 
Zurück