In onEnterFrame eine Funktion aufrufen

Orphelina

Erfahrenes Mitglied
Hallo,

ich habe Bilder, die ich aus XML-Files einlese, also hab ich eine Funktion geschrieben, die eine onEnterFrameFunktion aufruft, in der die Bilder wenn sie vollständig geladen sind, skaliert und platziert werden. Soweit so gut.
Nun möchte ich die Bilder noch mit einem KlickEvent versehen, also wenn man auf eines dieser Bilder klickt, dass was passiert.
Ich dachte ich schreib eine ausgelagerte Funktion, in der ich meine MovieClips übergebe.

Alle Bilder folgen diesem Schema
PHP:
if(aNode.nodeName == "Bild1"){
if(aNode.firstChild.nodeValue!= null){
var imgname = aNode.firstChild.nodeValue;
_root["Bild1"]["img1"].loadMovie("pics/" +imgname);
ImageEnterFrame("Bild1", "img1", total_width, 634, true);
}//end

Hier die Funktion zum skalieren und platzieren (Auschnittsweise)
PHP:
function ImageEnterFrame(givenLabel, givenImg, total_width, x_pos, with_y_pos){
_root[givenLabel].onEnterFrame = function() {
if (_root[givenLabel][givenImg]._width > 10 && _root[givenLabel][givenImg]._height > 10) {
var startWidth = _root[givenLabel][givenImg]._width;
var newWidth = total_width;
_root[givenLabel][givenImg]._width = newWidth;					
var verhaeltnis = newWidth / startWidth;					
_root[givenLabel][givenImg]._height = _root[givenLabel][givenImg]._height * verhaeltnis;
_root[givenLabel][givenImg]._x = x_pos;
if(with_y_pos){
_root[givenLabel][givenImg]._y = 220;
}
delete this.onEnterFrame;
				
}//end if skalieren
			
//positionieren und MO-Effekte
var nextElement_pos_y ;
//Bildunterschrift1 positionieren
_root["Bild1"]["img1"].nextElement_pos_y = _root["Bild1"]["img1"]._y + _root["Bild1"]["img1"]._height + 10;
_root.Bildunterschrift1._y = _root["Bild1"]["img1"].nextElement_pos_y;
			
callTempl12(givenLabel, givenImg);

Hier die Methode für den onPress:
PHP:
function callTempl12(givenBild, givenMC){
trace("FUNCTION CALLED");
_root.givenBild.givenMC.onPress = function(){
trace("ON PRESS");
}//end function onRelease
}//end call

Aber es passiert nichts. Wieso? Ich versteh es gar nicht... Ich hab auch schon den ganzen Tag rumprobiert, aber er ruft nie meine Methode auf.

Gruß
 
Entschuldigen Sie bitte, aber beim rüberkopieren in die tollen PHP-Tags verhaut er mir auch meine Tabs und dann bin ich schneller das so zu machen.
Aber ich gelobe Besserung und gebe mir in Zukunft mehr Mühe mit der Formatierung meiner Codeausschnitte...

Gruß
 
delete this.onEnterFrame
Ich seh' dort aber nirgendwo ein "onEnterFrame"... :confused:

Was mir noch auffällt:
Code:
function callTempl12(givenBild, givenMC){
    trace("FUNCTION CALLED");
    _root.givenBild.givenMC.onPress = function(){
        trace("ON PRESS");
    }
}
Wenn in "givenBild" (und in "givenMC") die Instanzname von Objekten als String stehen, müsste der korrekte Aufruf so aussehen:
PHP:
_root[givenBild][givenMC].onPress = function(){

Gruß
.
 
@Jens-Uwe Bahr:
Ich kann leider immer nur eine Zeile reinkopieren und wenn ich erst die PHP-Dinger mach und dann den kompletten Code einfüge verhaut er mir alles.
Ich lasse mich gerne weiter über Tricks oder richtigen Umgang in diesem Forum aufklären.

@Datic:
Den onEnterFrame hab ich in der Funktion ImageEnterFrame. Und aus der kann ich die andere Methode irgendwie nicht aufrufen, also er gibt mir den trace nicht aus, also geh ich davon aus, dass die Methode nicht aufgerufen wird. Und das versteh ich nicht.

Gruss
 
#1 Stimmt, habe ich übersehen. ;)

#2 Ich habe grade keine Zeit, das auseinanderzuklamüstern, aber warum rufst Du die Funktion callTempl12 innerhalb der onEnterFrame-Methode auf? Soweit ich sehen kann, macht die nichts, das mehrmals ausgeführt werden müsste (den onPress-Handler setzen).

Tipp: Statt die Instanznamen zu übergeben, würde ich direkte Referenzen verwenden:
PHP:
ImageEnterFrame(_root["Bild1"], _root["Bild1"]["img1"], total_width, 634, true);
Dann sparst Du Dir den mühsamen (und fehleranfälligen) Zugriff über den Arrayoperator:
PHP:
function ImageEnterFrame(givenLabel, givenImg, total_width, x_pos, with_y_pos){
    givenLabel.onEnterFrame = function() {
        ...

#3 Ich würde mehrzeiligen Code nicht über die Schaltflächen für PHP- bzw. CODE einfügen. Du kannst die Tags auch einfach selbst schreiben:

[PHP] eintippen, dann den gesamten Code einfügen und noch ein abschließendes
[/PHP]. ;) Geht bestimmt schneller, als mühsam Zeile für Zeile einzufügen.

Gruß
.
 
das mit #2 klingt einleuchtend aber im Moment denk ich immer: never touch a running system :)

jedenfalls klappt das so gar nicht mit dem onPress.... Argl- und nein, ich kann nicht die fla posten... Erstens zu gross und zweitens vertrauliche Sachen drin... Dilemma, ich weiss....

Gruß
 
Sprich: das "FUNCTION CALLED" wird nicht ausgegeben? Teste mal mit trace, ob die onEnterFrame-Methode überhaupt aufgerufen wird. Wenn nicht, handelt es sich wahrscheinlich um ein Adressierungsproblem.

Gruß
.
 
Guten Morgen,

doch die onEnterFrame Funktion wird aufgerufen, sonst hätte ich ja keine schön platzierten und skalierten Bilder auf meiner Bühne.
Aber die andere Methode wird nicht aufgerufen, da der trace nicht ausgegeben wird und ich versteh eben nicht, wo das Problem ist!

Gruß

EDIT: Ich habe das mit dem Auslagern jetz aufgeben, da es einfach nicht funktioniert hat. Nun geht es, ich muss es halt für jedes Bild machen... Schade...
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück