Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-01-2005, 17:55   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 4
Flash gibt falsche Höhe (_height) eines Movieclips aus

Mein Problem: Flash gibt in ca. 1 von 5 Versuchen eine geringere Höhe eines Movieclips aus, als in den anderen vier Fällen, wo sie richtig ausgegeben wird.

Ich habe einen MC "B", der in einen MC "A" nachgeladen wird. In MC A liegt ein selbstgebauter Scrollbar, dessen Funktionalität von der Höhe des MC B abhängig ist. Ich lese die Eigenschaft _height von MC B aus, und bekomme hierfür meistens den Wert 100.95, manchmal aber den Wert 50.00. In letzterem Fall funktioniert der Scrollbar natürlich falsch - man kann nur bis zur Hälfte des MC B scrollen.

Die Eigenschaft _height wird erst gelesen, nachdem MC B vollständig geladen ist (_framesloaded = _totalframes). Alternativ habe ich versucht, die Höhe über getbounds oder getProperty(MCB, _height) zu bekommen, auch hier sind die Werte falsch. Auch das Setzen von _rotation = 0 vor dem Auslesen hilft nicht. In der Entwicklungsumgebung (Flash selbst) tritt der Fehler nicht auf.

Weiß jemand weiter? Was soll ich noch testen?

Danke für eure Hilfe!

Geändert von fkaiser (13-01-2005 um 17:56 Uhr)
fkaiser ist offline   Mit Zitat antworten
Alt 13-01-2005, 23:34   #2 (permalink)
aufdemwegnachberlin
 
Benutzerbild von purewhite
 
Registriert seit: Jul 2004
Beiträge: 591
hey,
schieb mal das fla-file hoch, wenns geht....
purewhite ist offline   Mit Zitat antworten
Alt 14-01-2005, 06:17   #3 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
Du hast Dir die Antwort bereits selbst gegeben :
Zitat:
Zitat von fkaiser
Die Eigenschaft _height wird erst gelesen, nachdem MC B vollständig geladen ist (_framesloaded = _totalframes).
In der Entwicklungsumgebung hast Du wohl deshalb kein problem, weil das Laden so schnell geht, dass er bereits fertig ist, wenn Du die Eigenschaften ausliest.
Also, Eigenschaften erst auslesen, wenn der Ladevorgang beendet ist.

solo
soloFlash ist offline   Mit Zitat antworten
Alt 14-01-2005, 08:33   #4 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 4
Das FLA kann ich leider nicht hochladen. Außerdem ist es sehr komplex (da noch weitere MCs in MCs in MCs sind, dauert also ne Weile, bis man da durchblickt.

@soloFlash: Ich habe mir die Antwort selbst gegeben, aber ich berücksichtige sie auch schon :-). Ich lese die Eigenschaft _height jetzt schon erst aus, wenn (_framesloaded = _totalframes). Oder hab ich was falsch verstanden?
Ich habe auch versucht die Streaming-Funktion der Entwicklungsumgebung zu nutzen, allerdings kann ich dort nur den Hauptfilm (MC A) ausbremsen. Das Laden von MC B wird immer mit voller Geschwindigkeit gemacht.

Mein AS zu diesem Zweck:
if(needInit && (mcb._framesloaded = mcb._totalframes) && (mcb._height > 0)) {
trace(mcb._height);
initScrollbar();
needInit = false;
}
fkaiser ist offline   Mit Zitat antworten
Alt 14-01-2005, 08:43   #5 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
ok, das hab ich dann flasch verstanden
Gut, dann erzähl mal, wie die MCs geladen werden.
Sind das externe swfs, oder werden sie per attach geladen, oder wie machst Du es?
Poste mal den Code, wo Du lädst, und wo Du wartest, bis der MC geladen ist!

grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 14-01-2005, 09:08   #6 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 4
Das Actionscript des MC A:
Code:
loadContent(_parent.sec, _parent.mid, _parent.sid, mcb);

function loadContent(sec, mid, sid, target, level) {
	//debug:
	sec = "kunden"; sid = "home";
	this.ssid = _parent.ssid;
	this.cURL = new String();

	//[...] Zusammenbau des Strings der den richtigen Pfad zum MCB enthält

	loadMovie(cURL, mcb);
	//Reset level
	_root.level = 0;
}
Im Code wird das Objekt "mcb" genutzt, das auf der Bühne liegt und das neue SWF beinhalten soll.

Das Actionscript, das den Wert _height zum debuggen ausgibt (ist dem Scrollbar zugewiesen):
Code:
onClipEvent(enterFrame){
	//Scrollbar may only be initialized if content movie (object mcb) is loaded
	if(needInit && (mcb._framesloaded = mcb._totalframes) && (mcb._height > 0)) {
		trace('1: ' + mcb._height);
		_parent.debug = "1: " + mcb._height;
		initScrollbar();
		needInit = false;
	}
	
	//[...] Weiterer Code, der die Funktionalität des Scrollbar erzeugt, aber nicht auf mcb._height zugreift

}
fkaiser ist offline   Mit Zitat antworten
Alt 14-01-2005, 10:02   #7 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
also, dann schauen wir mal:

es muss == nicht = heissen:
ActionScript:
  1. if(needInit && (mcb._framesloaded == mcb._totalframes) && (mcb._height > 0)) {}

anstelle von Frames kannst Du auch die Bytes abfragen, schau dich mal im Forum danach um.

Ansonsten siehts richtig aus. Vielleicht lags am '==' ?

grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 14-01-2005, 10:06   #8 (permalink)
fly, you fools!
 
Registriert seit: Jun 2003
Ort: Oldenburg
Beiträge: 131
vielleicht bringt dich das weiter:

loadMovie, onLoad, _width, _height und _visible
|H|K| ist offline   Mit Zitat antworten
Alt 14-01-2005, 14:52   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 4
Zitat:
Zitat von soloFlash
es muss == nicht = heissen:
Richtig - macht aber leider keinen Unterschied :-( Trotzdem danke.

Die Lösung

H|Ks Hinweis war ein klasse Tipp (loadMovie, onLoad, _width, _height und _visible). Die kurze Zusammenfassung: _height ist erst verfügbar, nachdem der Clip geladen und initialisiert wurde. Und das geschieht irgendwann im neuen Film.

Ich habe also im MC B eine Variable eingeführt, die erst auf TRUE gesetzt wird, wenn der Frame geladen ist. Diese frage ich nun zusätzlich zu den og. Punkten ab und lese erst danach die Eigenschaft _height aus. (Dies ist die vereinfachte Vorgehensweise des Links.)

Bei mir zusätzlich das Problem: der erste Frame des MC B ist nur 20pix hoch (bzw. der Film) in Frame 2 werden dann Inhalte angezeigt, die 100.95pix hoch sind. Die Höhe darf also auch erst ausgelesen werden, wenn Frame 2 erreicht wird: Ich setze einfach erst in Frame 2 die og. Variable auf TRUE.

Danke für eure Hilfe!
fkaiser 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 10:14 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele