doResize?

harrry

Erfahrenes Mitglied
Hallo, dank Datic hab ich dieses Skript, das MCs bei Browserfenstergrößenveränderungen (Ist das nicht ein schönes, deutsches Wort? Mark Twain hatte recht!) langsam in die neue Position gleiten läßt:
PHP:
stop();
   Stage.scaleMode = "noScale";
   Stage.align = "LT";
   var resizeWatcher = new Object();
   resizeWatcher.onResize = function() {
   	_root.bg._width = Stage.width;
   	_root.bg._height = Stage.height;
   };
   Stage.addListener(resizeWatcher);
   resizeWatcher.onResize();
   MovieClip.prototype.slide = function(dx, dy) {
   	this.onEnterFrame = function() {
   		this._x += (dx-this._x)/6;
   		this._y += (dy-this._y)/6;
   		if (Math.abs(dx-this._x)<1 && Math.abs(dy-this._y)<1) {
   			this._x = dx;
   			this._y = dy;
   			delete this.onEnterFrame;
   		}
   	};
   };
   var l = new Object();
   l.onResize=function () {
   	slider.slide(Stage.width/2-slider._width/2, Stage.height/2-slider._height/2);
   };
   Stage.addListener(l);
 l.onResize();
Mein Problem: ich habe meinen MC zentriert, aber er zentriert sich wirklich dann erst, wenn die Fenstergröße von Hand geändert wird, nicht aber, wenn das Fenster zum ersten Mal geöffnet wird. Das wär aber schön! Mit
PHP:
doResize();
und
PHP:
dojetztendlichmalResizenverdammt();
hab ichs probiert, aber ohne Resultat...
 
Jaaa - das hatte ich ja auch vermutet, aber genau das steht ja schon so drin in der letzten Code-Zeile. Trotzdem schwebt das Teil beim ersten Öffnen der Seite erstmal ins obere Drittel und bleibt dort - bis man das Browserfenster von Hand größenverändert: dann schwebt´s in die Mitte, wo es hingehört.

Wo könnte der Fehler liegen?

EDIT: Ausserdem: bedeutet "onResize" nicht "bei Größenveränderung"? Die ja offenbar nicht stattfindet, wenn das Fenster geöffnet wird? Oder ist das nur der Name der Funktion? Schon eher? Aber warum gehts dann nicht, wenn sie doch in Frame 1 gleich mal aufgerufen wird?
 
Zuletzt bearbeitet:
Nee, das hat damit nichts zu tun. Durch den Aufruf zwinge ich ihn quasi dazu, zu denken, es hätte eine Größenänderung stattgefunden.

Kann aber sein, dass direkt nach dem Start noch keine korrekten Informationen über die Maße zur Verfügung stellen. Probiers doch mal mit einer onEnterFrame-Methode, die z.B. nach dem 2. oder 3. Frame l.onRezize() aufruft und sich dann beendet.

Gruß´
.
 
Ja, so gehts!
Habe einen Controller_MC auf der Hauptzeitleiste und da drin, nach ein paar Frames:
PHP:
stop();
  onEnterFrame = function() {
  	_parent.l.onResize();
  	delete this.onEnterFrame;
  };
Und funktioniert! Aber stimmt denn das "delete this" - oder muss es heissen "delete _parent"?
 
Das "this" ist schon korrekt - es bezieht sich nämlich auf das Objekt, in dem diese Methode definiert wurde.

Wozu brauchst Du allerdings einen "Controller"-MC? Eine onEnterFrame-Methode "nach ein paar Frames" starten zu lassen, die dann nochmal einen Frame wartet, ist doch irgendwie doppelt gemoppelt, oder? ;)

Gruß
.
 

Neue Beiträge

Zurück