Problem mit scalieren und Loadmovie

Elfenkind

Grünschnabel
Hallo,

Ich hab das ein Problem.

Ich lade ein externes Bild in ein (schon vorhandenen) leeren Movieclip. In dem Movieclip liegt ein onClipEvent (data) welches prüft, wie gross das geladene Bild ist. Ist die Breite oder Höhe zu gross, so wird ein Scalierungs-Faktor ermittelt. Durch setzen der _width und heigth (bzw. _xscale und _yscale) wird die Grösse des Bildes (MC) angepasst.

Lade ich die nächsten bilder, werden diese falsch scaliert. Ich habe beobachtet, das die _width udn _heigth angaben bei 2. Bild vor dem scalieren schon falsch sind. Die werte sind um den scalierunffaktor des 1. bildes zu klein.

Woran liegt das und wie kann ich das ändern ?
 
Also wenn ich es richtig verstanden habe ist das problem so zu lösen:
Du must die Variablen für die scaliereung vor dem erneuten laden erst wieder auf 100-100 stellen. Da dürfte es gehen.
Peace RAY

RAYALETY.de
 
hi rayalety,

ich hab es jetzt nicht direkt vor dem laden gemacht, wo hab ich aber einen unload auf dem MC liegen, der mir das erledigen sollte. Macht er nicht. Ich hab es mal ausserhalb des MC eingebaut, wo ich das neue bild mit mc.loadmovie einladen, so scheint es zu funktionen.

Aber warum nicht über das unload ?
 
Also ich müsste es sehen um es genau zu wissen aber
vieleicht hast du die scalierungs vaktoren an die _root gegeben und deshalb wurden sie bei unload nicht entfernt.
Peace Ray

Rayalety
 
hier hab ich das (entwickungs-)Script.

seltsamerweise ist bei der 2. RESET ausgabe die scale angaben auf 100.



onClipEvent (unload) {
trace("RESET(1): " + _x +"/"+_y+" - " + _width + "/" + _height+" - " +_xscale+"/"+_yscale);
_x = 0;
_y = 0;
_width = 0;
_height = 0;
_xscale = 100;
_yscale = 100;
trace("RESET(2): " + _x +"/"+_y+" - " + _width + "/" + _height+" - " +_xscale+"/"+_yscale);
}
onClipEvent (data) {
_root.indx++;
index=0;
trace("[" + _root.indx + "][" + index + "] before [w:" + _width + " h:" + _height +"]");
if (_width <= _root.bildbreite && _height <= _root.bildhoehe) {
_x = (_root.bildbreite-_width)/2;
_y = (_root.bildhoehe-_height)/2;

index++;
trace("[" + _root.indx + "][" + index + "] center [w:" + _width + " h:" + _height +"]");
_root.tracefield = "["+_root.indx+"][onlyCenter] w:" + _width + " h:" + _height;

stop();
} else {
difbreite = _width - _root.bildbreite;
difhoehe = _height - _root.bildhoehe;
/*x = difhoehe - difbreite;
if (x >= 0) {
faktor = _width/_root.bildbreite;
} else {
faktor = _height/_root.bildhoehe;
}*/
//faktor = _width/_root.bildbreite;
faktor = _root.bildbreite/_width;
x = "b";
testwidth = _width/faktor;
testheigth = _height/faktor;
if (testheigth > _root.bildhoehe) {
//faktor = _height/_root.bildhoehe;
faktor = _root.bildhoehe/_height;
x = "h";
}

helpwidth = _width;
helpheight = _height;
/*_width = _width/faktor;
_height = _height/faktor;*/
_xscale = faktor*100;
_yscale = faktor*100;
//_x = (_root.bildbreite-_width)/2;
//_y = (_root.bildhoehe-_height)/2;

_root.tracefield = "["+_root.indx+"][scale] bw:" + helpwidth + " hh:" + helpheight + " w:" + _width + " h:" + _height;
index++;
trace("[" + _root.indx + "][" + index + "] scale [w:" + _width + " h:" + _height +"][difw:"+difbreite+" difh:"+difhoehe+" x:"+x+" F:" + faktor+"]");

stop();
}
}
 
Hab nicht soviel zeit investiert um es mir reinzuziehen, aber vieleicht liegt es daran das du dir Reset1 vor der deklaration der Variablen ausgeben läst und Reset2 erst danach.
 
es sind ja keine Variablen, die ich deklariere, sondern eigenschaften das MCs. Wenn ich die Scale eigenschaften von ausserhalb setzten scheint es ja zu funktionieren. Wie dem auch sei. Danke.
 
onClipEvent (unload) {
trace("RESET(1): " + _x +"/"+_y+" - " + _width + "/" + _height+" - " +_xscale+"/"+_yscale);hier läst du dir schon Reset1 ausgeben
_x = 0;
_y = 0;
_width = 0;
_height = 0;
_xscale = 100;
_yscale = 100;Jetzt sind die werte erst wieder auf orginal gestzt
trace("RESET(2): " + _x +"/"+_y+" - " + _width + "/" + _height+" - " +_xscale+"/"+_yscale);

Dann ist reset2 korekt
 
Ja, Ja das ist schon richtig, nur das Flash nicht wirklich die Werte zurueck setzt. Er sagt das er es getan hätte, aber bei dem nächsten bild hat er immer noch die alte scalierung :((
 
...komplexe Probleme haben oftmals einfache Ursachen...:-(

wenn du per loadMovie einen neuen Film in einen "Container" lädtst, so wird dieser mit all seinen Eigenschaften überschrieben, wie du ein paar posts vorher in einer wunderschönen Antwort an Feyama lesen kannst, sind seit FlashMX Funktionsaufrufe und Eventhandler als Eigenschaften des referenzierten Objektes anzusehen, welche mithin bei einer loadMovie Aktion einfach überschrieben werden, dadurch erklärt sich auch dein scale = 100 %, sowie das Fehlen der Funktionen welche du onLoad und onUnload aufrufst.....

Lösungen:

Russentechnik: Pack einen Container in den Container, und führe alle Loadmovie Aktionen in diesem aus, auf dem umgebenden Container hast du alle AKtionen mit this.con2.onLoad bspw..
Den inneren Container lässt du auf 100 %, da er ja eh ständig überschrieben wird, den zweiten skalierst du und sprichst ihn mit deinen Funktionen an.

Advanced: Lass den Container wie er ist und schreibe einen Workaround in AS, der alle Events behandelt, und deine Skalierungen bei jedem onLoad erneut schreibt. etc...

Ansonsten lies einfach mal den angesprochenen Post von gestern und vorgestern, in welchem unsere hauseigenen Theorie-Mogule :rolleyes: buchreif dieses Thema abhandeln (FEY / [MX] Scriptumwandlung F5 -> MX .)

B
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück