Problem mit Grössenangabe von Bildern in ActionScript

Orphelina

Erfahrenes Mitglied
Hallo ihr,

also ich arbeite mit Flash MX 2004 Professional. Ich generiere TextAreas und Labels per ActionScript was auch prima funktioniert. Nun hab ich auch Bilder die ich darstellen möchte. Auch erstmal kein Problem. Vielleicht nicht schön gelöst, aber Bilder werden dargestellt. Ich habe die Bilder in einer Grösse zur Verfügung und möchte sie für meinen Film quasi in Breite und Höhe passend darstellen. Ich habe es mit folgendem Code probiert:

Code:
if(aNode.nodeName == "Bild"){
   _root.createClassObject(Label, "Bild", 5);
   _root["Bild"].loadMovie("pics/meinBild.jpg");
   //_root["Bild"].setSize(997, 456);
   _root.Bild._width = 150;
   _root.Bild._height = 32;
   _root.Bild._x = 20;
   _root.Bild._y = 280;
}//end if

setSize hatte irgendwie gar keinen Effekt. in setSize steht die Grösse in der ich das Bild eigentlich haben will, aber dann ist mein Bild leider 10x so gross wie mein Content und es hat mit 150/32 ungefähr die Grösse, die ich brauch, aber es sollte ja eigentlich 997/456 sein. Ich frag mich nun, wie Flash skaliert also ob der das irgendwie in Abhängigkeiten berechnet oder welche Grössenangaben der benutzt bzw. muss ich in mein Script noch eine Skalierung einfügen und wenn ja welche? Weil so ist das irgendwie Schmou...

Gruss
 
Hi,

Du musst schon warten, bis das Bild komplett geladen ist. Warum? Nun, wenn Du loadMovie aufrufst und das Bild direkt danach skalierst, wird Deine Skalierung wieder überschrieben, sobald das Bild geladen ist.

Beispiel:
PHP:
// gehen wir davon aus, dass "bla" ein
// leerer MC ist
bla.loadMovie("blubb.jpg");
this.onEnterFrame = function() {
    // Wenn Breite und Höhe größer 10 sind,
    // können wir annehmen, das das Bild geladen ist:
    if (bla._width > 10 && bla._height > 10) {
        bla._width = 150; // und gefahrlos...
        bla._height = 32; // ... neu skalieren!
        delete this.onEnterFrame;
    }
}

Gruß
.
 
Mh das ist ja interessant...
Woran könnte es liegen wenn beim angepassten Script diese Meldung kommt:

Code:
Keine Eigenschaft mit dem Namen 'onEnterFrame' vorhanden.
     			this.onEnterFrame = function() {

Gruss
 
... "this" zeigt nicht auf einen MovieClip. ;)

Um zu erkennen, worauf es bei Dir zeigt und was zu ändern wäre, müsste ich mehr (am besten die ganze Datei) sehen. Ich nehme an, Du führst das Ganze in einer Funktion aus; Ereignisfunktionen sind allerdings oft anderen Objekten zugeordnet.

Gruß

P.S.: vielleicht hilft schon ein simples:
PHP:
_root.onEnterFrame = function() {
.
 
Okay, wie immer blick ich Freitags am späten Nachmittag nicht mehr so ganz durch :)

Ich habe ActionScript das File als Textdatei angehängt...

Danke und Gruss
 

Anhänge

  • BilderSkalieren.txt
    3 KB · Aufrufe: 41
Hi,

folgendes dürfte funktionieren:
PHP:
var img = _root["Bild"].createEmptyMovieClip("img", 1);
img.loadMovie("pics/meinBild.jpg");
_root["Bild"].onEnterFrame = function() {
    if (this.img._width > 10 && this.img._height > 10) {
        // Hier skalieren
        delete this.onEnterFrame;
    }
}

Gruß
.
 
Hallo,

nach langer langer Zeit und etwas umgeschriebener Code, funktioniert die Sache mit dem skalieren irgendwie nicht mehr. Das Bild wird geladen, aber es ist nicht skalierbar, dh er geht gar nicht erst in die Funktion innerhalb der skaliert werden soll...
HILFE!
Das
Code:
 _root.createClassObject(Label, "Bild", 5);
passiert etwas weiter oben im Code (der ist etwas verschachtelt...)
Dann frage ich in meiner XML Datei ab, wenn Knoten Bild vorhanden [...] und dann lade Bild und skaliere...

Code:
 if(aNode.nodeName == "Bild"){
			_root.Bild._x = 30;
			_root.Bild._y = 245;
			var img = _root["Bild"].createEmptyMovieClip("img", 1);
			img.loadMovie("./pics/dummy.jpg");
			ladeBild(img);
		}//end if
	######################### 		
	}//end function
	function ladeBild (givenImg){
		_root["Bild"].onLoad = function() {
				if (this.givenImg._width > 10 && this.givenImg._height > 10) {
					// Hier skalieren						
					_root["Bild"]._width = 940;
					_root["Bild"]._height = 500;
					
				}//end if
			} //end function
	}//end ladeBild

Ich hab die Funktion mal etwas ausgelagert in der Hoffnung er benutzt sie, aber Fehlanzeige... Ich habs auch mit "onEnterFrame" statt onLoad probiert, aber dann lande ich in einer Endlosschleife...

Gruss
 
Hi,

Code:
_root["Bild"].onLoad = function() {
funktioniert nicht. Du musst schon mit einer onEnterFrame-Methode auf das Laden warten, wie ich es in meinem vorherigen Posting geschrieben habe.

Ausserdem:
Code:
var img = _root["Bild"].createEmptyMovieClip("img", 1);
hier definierst Du img als lokale Variable - in der Funktion ladeBild ist sie nicht mehr bekannt. Mach es so, wie ich es gepostet habe, und führe das Vorladen (ohne Extra-Funktion) direkt nach dem loadMovie aus.

Gruß
.
 
Guten Morgen,

komischerweise habe ich deinen Code nochmal probiert, aber die Bilder lassen sich einfach nicht skalieren, sie werden angezeigt und platziert, aber die width und height ignoriert er einfach. Geht das skalieren nicht über?

Code:
  if (this.img._width > 10 && this.img._height > 10) {
					// Hier skalieren
					_root["Bild"]._width = 940;
					_root["Bild"]._height = 500;
					
				}//end if

Aber das macht er nicht. Und das versteh ich nicht, und ich war mir sicher dass der Code schonmal funktioniert hatte...
Weil entweder er skaliert mir das gar nicht (mit deinem Vorschlag ) und ohne die "if-Abfrage" in irgendwelchen komischen Angaben, so dass es definitiv nicht die Pixel sind die ich haben will?!

Gruss
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück