PDA

Volledige versie bekijken : herpositionering na inladen wil niet lukken


KsChoice
%Europe/Berlin %580 %2006, 14:55
Wie kan me even helpen ???

Ik wil mijn "index.swf" na het inladen centraal zetten in een full-browser-omgeving
Ik kwam met leen- en probeerwerk tot hetvolgende :


Stage.align = "TL";
Stage.scaleMode = "noScale";

// inladen index.swf //
siteladen = new MovieClipLoader();
_root.createEmptyMovieClip("holder", 999);
siteladen.loadClip("index.swf", _root.holder);
siteladen.onLoadInit = function(){
breedte = _root.holder._width;
hoogte = holder._height;
}

// positionering //

myListener = new Object();
rePosition();
myListener.onResize = rePosition;
function rePosition(){
holder._x = (Stage.width/2)-(breedte._width/2);
holder._y = (Stage.height/2)-(hoogte._height/2);
}

Stage.addListener(myListener);


hij blijft als hoogte en breedte van 'holder' 0 geven ...
wat doe ik verkeerd - weet iemand raad ???

Dauntless
%Europe/Berlin %633 %2006, 16:11
Normaal gezien zou je denk ik zelfs een error moeten krijgen...

De MovieClipLoader class heeft geen 'onLoadInit' method (wel een onLoadInit event).
Stage.align = "TL";
Stage.scaleMode = "noScale";
var hoogte:Number = 0;
var breedte:Number = 0;
var mclListener : Object = new Object ();
mclListener.onLoadInit = function (p_mc : MovieClip) : Void
{
hoogte = p_mc._height;
breedte = p_mc._width;
rePosition();
}

// inladen index.swf //
siteladen = new MovieClipLoader ();
this.createEmptyMovieClip ("holder", 999);
siteladen.loadClip ("index.swf", this.holder);
siteladen.addListener(mclListener);

// positionering //
myListener = new Object ();
rePosition ();
myListener.onResize = rePosition;
function rePosition ()
{
holder._x = (Stage.width / 2) - (breedte._width / 2);
holder._y = (Stage.height / 2) - (hoogte._height / 2);
}
Stage.addListener (myListener);

En je moest zowieso ook nog rePosition oproepen nadat je de hoogte en breedte aangepast had.

KsChoice
%Europe/Berlin %638 %2006, 16:19
Hey Dauntless,

Alvast bedankt voor je opmerkingen / advies.
Kan het zijn dat er nog een foutje in zit want ik krijg >

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 25: There is no property with the name '_width'.
holder._x = (Stage.width / 2) - (breedte._width / 2);

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 26: There is no property with the name '_height'.
holder._y = (Stage.height / 2) - (hoogte._height / 2);

Dauntless
%Europe/Berlin %639 %2006, 16:20
Hehe, bij jouw script zat de zelfde fout, alleen wist flash niet dat die fout er was omdat je geen datatypes gebruikt... Pas het aan naar dit :)
function rePosition ()
{
holder._x = (Stage.width / 2) - (breedte / 2);
holder._y = (Stage.height / 2) - (hoogte / 2);
}

KsChoice
%Europe/Berlin %644 %2006, 16:27
had inmiddels ook die aanpassing geprobeerd ... ik leer bij :-)

mijn index.swf blijft volharden en nestelt zich in de linkerbovenhoek :-(
als ik hoogte & breedte trace krijg ik 0 ipv de hoogte en de breedte van index.swf

Dauntless
%Europe/Berlin %646 %2006, 16:30
Bij mij werkt hij zo als hij nu is...

KsChoice
%Europe/Berlin %658 %2006, 16:48
bedankt ! 'k heb het werkende gekregen ...
't is van de jonge snaken dat ik het moet leren :-)


Ik heb nog een vraagje. Ik zou ook nog willen leren hoe ik index.swf "glijdend" kan herpositioneren > nu springt ie bij een browserresize meteen naar de nieuwe positie (x,y) > je ziet echter meer en meer dat men de content laat floaten naar die positie (x+1, y+1 of x-1, y-1 volhouden tot de nieuwe positie bereikt is ...

ik neem aan dat ik in het listenergedeelte ergens een als... dan-routine moet inbouwen ... maar ook hier schiet mijn scriptkennis nog iets tekort ...

heb jij tips of voorbeelden ?

Bedankt !

Dauntless
%Europe/Berlin %661 %2006, 16:52
Stage.align = "TL";
Stage.scaleMode = "noScale";
var hoogte:Number = 0;
var breedte:Number = 0;
var endX:Number = 0;
var endY:Number = 0;
var speed:Number = 5;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(p_mc:MovieClip):Void {
hoogte = p_mc._height;
breedte = p_mc._width;
rePosition();
};
// inladen index.swf //
siteladen = new MovieClipLoader();
this.createEmptyMovieClip("holder", 999);
siteladen.loadClip("holded.swf", this.holder);
siteladen.addListener(mclListener);
// positionering //
myListener = new Object();
rePosition();
myListener.onResize = rePosition;
function rePosition() {
endX = (Stage.width/2)-(breedte/2);
endY = (Stage.height/2)-(hoogte/2);
holder.onEnterFrame = slideToPosition;
}
function slideToPosition():Void
{
this._x += (endX - this._x) / speed;
this._y += (endY - this._y) / speed;
if(Math.abs(this._x - endX) < 2 && Math.abs(this._y - endY) < 2) delete this.onEnterFrame;
}
Stage.addListener(myListener);

Enjoy ;). Maar zorg er voor dat je begrijpt wat je doet hé :p. Als je niet begrijpt hoe easing werkt, HIER (http://www.bit-101.com/tutorials/easing.html) staat een goede tutorial over het onderwerp.

Erwinzzz
%Europe/Berlin %662 %2006, 16:54
je kan de x en y EIND positie bijhouden, met het volgende script zal hij er heen easen:

this._x+=(xeind-this._x)/3;
this._y+=(yeind-this._y)/3;

Wat je doet is het verschil uitrekenen met de eind positie en de huidige positie en daar een 3e deel van bij de huidige bijtellen. De volgende keer is dat verschil dus minder net zo lang tot je het verschil kan verwaarlozen..

//Edit: Dauntless wil je a.u.b. niet zo snel posten ;)

Dauntless
%Europe/Berlin %664 %2006, 16:56
//Edit: Dauntless wil je a.u.b. niet zo snel posten ;)
't Is een ziekte, ik kan er niets aan doen [:o)] :p