Flash MX - MC mit AS vor und zurückdrehen

DJTrancelight

Erfahrenes Mitglied
hi zusammen,

ich habe diese Frage auch schon in einem anderen Forum gestellt, jedoch keine Antwort bekommen, deshalb versuche ich hier mein Glück und bedanke mich für eure Hilfe.

FLASH MX + AS 1

ich steh vor folgendem Problem.

Ich möchte eine Navigation mit Links machen bei dem folgendes geschehen soll.

Ein Link ist bei mir ein MC, der einen Button enthält.

Wenn über den Link gefahren wird, dann soll sich ein MC(drehklotz), der sich auf der Bühne(_root) befindet, um 315 Grad animiert drehen
Wird dieser Button verlassen, so soll sich dieser MC(drehklotz) wieder auf seinen Ausgangspunkt zurückdrehen.
Das Drehen dieses einen mc_drehklotz soll von allen Links ausgelöst werden können.

Es gibt jetzt mehrere Probleme:

1. Wenn z.B. der Button vor dem Erreichen der 315 Grad verlassen wird, fangt
die Drehung an zu springen, weil ich mit festen Werten gearbeitet habe.

2. Der Prozess des Drehens läuft kontinuierlich durch und belastet somit den
Prozessor erheblich.

3. Je öfter man das Drehen duch das Darüberfahren auslöst, um so schneller
dreht sich der MC


Irgendwie muss ich die aktuelle Position des mc_drehklotz zwischenspeichern und an die Funktion für das Rückwärtsdrehen übergeben. Aber ich habs nicht hinbekommen.

Ich bin ziemlicher AS-Anfänger und würde mich über eure Hilfe sehr freuen.

Hier der Code für die Drehfunktion, der auf dem Ersten Bild des MC eines Links sitzt:


PHP:
trace("STARTPOSITION" + " " +_root.mc_drehklotz._rotation) 
    _global.i = 0; 
    function posDrehung(){     
        if(i<315){ 
            i++; 
            _root.mc_drehklotz._rotation = i; 
        }//end if 
        trace("Positive Drehung" + " " 
+_root.mc_drehklotz._rotation) 
    }//end function posDrehung 

//+++++++++++++++++++++++++++++++++++++++++++++++++// 
    _global.k = -45; 
    function negDrehung(){     
        if(k>-360){ 
            k--; 
            _root.mc_drehklotz._rotation = k; 
        }//end if 
        trace("Negative Drehung" +" " + _root.mc_drehklotz._rotation) 
    }//end function negDrehung

Hier der Code für den Button, der sich in einem MC befindet:


PHP:
on (rollOver) { 
    i=0; 
    clearInterval = setInterval(intervallID2); 
    intervallID = setInterval(posDrehung, 5); 
    trace("OnRollOver"+_root.mc_drehklotz._rotation) 
} 

on (rollOut) { 
        k = -45; 
        clearInterval = setInterval(intervallID); 
        intervallID2 = setInterval(negDrehung,5); 
        trace("OnRollOut"+_root.mc_drehklotz._rotation) 
}

Ich habe hier mal meine fla auf das Nötigste zusammengestellt.
Flash MX

Besten Dank für eure Antworten.
 

Anhänge

Hallo,


lies unbedingt nochmals in der Flash-Hilfe den Eintrag zu clearInterval. Anstatt den Interval zu löschen, setzt du nämlich jedesmal einen neuen.

Auch würd ich die Intervalle so aufsetzen, dass du ihnen die Ebene, auf der die Funktion dann geloopt werden soll, mitgibst:

Code:
var myInterval = setInterval(this, "posDrehung", 5);
//löschen kannst den Intervall dann so:

clearInterval(this.myInterval);

gruss
 
HI,

ich danke schon einmal für deine Hilfe - wie gesagt Anfänger :p ! Ich habe mir jetzt die Seite mit setIntervall ausgedruckt und werde sie heute Abend studieren.
Ich hoffe nur, dass da alles AS 1.0 kompatibel ist und nichts neues von AS 2.0 dabei ist, da ich nur Flash MX habe.

Grüße
und Danke!
 
Hi Luke,

ich bin jetzt weitergekommen, vielen Dank.
Ich habe es so gemacht, wie du es mir vorgeschlagen hast.
Wenn du mir noch kurz erklären könntest den Effekt zu beenden (also beim verlassen des Buttons, wenn der Drehklotz wieder in seiner Ausgangsposition ist), dann könnte ich weitermachen. Also die Dauerauslastung besteht leider immer noch, aber das vor- zrückdrehen geht jetzt ohne Sprünge.

Freu mich auf deine Antwort.
 
Hallo,

also soweit ich das anhand des obigen Attachments beurteilen kann, brauchst du eigentlich bloss eine Bedingung, die überprüft, ob sich das Quadrat nun wieder in der ursprünglichen Position befindet (_rotation = 0). Die hast du nun schon eingebaut, also brauchst du eigentlich nur noch bei Nichterfüllen der Bedingung den Intervall zu löschen, etwa wie folgt:

Code:
function negDrehung(){	
    if(k>-360){
        k--;
        _root.mc_drehklotz._rotation = k;
    } else {
        clearInterval (this.intervalID2);
    }
}

this.onRollOut = function () {
    this.intervalID2 = setInterval(this, "negDrehung", 5);
}

gruss
 
Hi Luke,

das ist einfach nur nett wie du mir hilfst. Ich bin auf die gleiche Idee gekommen, aber es hatte bei mir nicht funktioniert. Dank deines Vorschlags habe ich den Fehler entdeckt.
Ich habe in der Else-Bedingung intervallID, also mit 2 "l" geschrieben. Flash hat mir keinen Fehler ausgeworfen. Es funktioniert jetzt alles prima.
Vielen vielen Dank

Schöne Grüße
DJ Trancelight
 
Zurück