Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-02-2004, 14:08   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 10
funktion anhalten

Also Ich habe eine AS das Funktionen definiert und ein As auf einem Mc der die funktionen ansteuert. Das ganze soll eine navigation ergeben die über diese funktionen funktionieren soll.
Mein Problem ist wenn ich in dem Bereich bin, den ich mir anschauen möchte, dann muß ich die funktionen anhalten können, quasi das bild einfrieren. Es soll also einen button geben der das ganze anhält und loslässt.
Hier mal die zwei scripts:

// Ursprungskoordinatenfunktion
movieclip.prototype.getOrigin = function() {
targetX = startX;
targetY = startY;
targetXs = startXs;
targetYs = startYs;
};
// Zielkoordinatenfunktion
movieclip.prototype.getTarget = function(factor) {
targetX = startX+(startX-_parent._xmouse)*factor;
targetY = startY+(startY-_parent._ymouse)*factor;
targetXs = startXs*factor;
targetYs = startYs*factor;
};
// Zoomfunktion
movieclip.prototype.zoom = function(delay, targetX, targetY) {
difX = targetX-_x;
difY = targetY-_y;
difXs = targetXs-_xscale;
difYs = targetYs-_yscale;
_x += (difX/delay);
_y += (difY/delay);
_xscale += difXs/delay;
_yscale += difYs/delay;
};
//
stop();

und das auf dem MC:

onClipEvent (load) {
startX = _x;
startY = _y;
startXs = _xscale;
startYs = _yscale;
getTarget(5);
}
onClipEvent (mouseUp) {
getTarget(2.3);
pressed = true;
}
onClipEvent (mouseDown) {
getOrigin();
pressed = false;
}
onClipEvent (mouseMove) {
if (pressed) {
getTarget(2.3);
}
}
onClipEvent (enterFrame) {
zoom(15, targetX, targetY);
}


auf eines bin ich schon draufgekommen nur ist es viel zu hart, es friert das bild ein aber ich weis nicht wie ich es dann wieder zum laufen bring.
on (release){
zoom = false;
}
PIU-5876 ist offline   Mit Zitat antworten
Alt 23-02-2004, 23:54   #2 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Ort: Münster
Beiträge: 30
Hi PIU-5876,

ich weiß jetzt eigentlich nicht so genau, was du eigentlich erreichen willst, aber wenn ich dich richtig verstehe willst du die Funktion die du onEnterFrame aufrufst pausieren lassen.

Dazu könnte es hilfreich sein, wenn du das Script auf dem MC umstellst:

onClipEvent (load) {
...
this.onEnterFrame = function(){
zoom(15, targetX, targetY);
}
}

dann hast du den Aufruf in einer Funktion namens "onEnterFrame", die du auch ansprechen kannst, das geht bei der anderen Art mit onClipEvent(enterFrame) leider nicht.

dann könnten dir diese Prototypen weiterhelfen:

MovieClip.prototype.pauseEnterFrame = function(){
this.remEnterFrame = this.onEnterFrame;
delete this.onEnterFrame;
}

MovieClip.prototype.restartEnterFrame = function(){
this.onEnterFrame = this.remEnterFrame;
delete this.remEnterFrame;
}

pauseEnterFrame macht eine Kopie der onEnterFrame Funktion und löscht diese anschließend. In deinem Fall das Zoomen hört auf.

restartEnterFrame stellt den Ursprungszustand wieder her, das Zoomen geht weiter.

Mir ist übrigens aufgefallen, das sich dein Script unterschiedlich verhält, wenn du es in Flash 5,6 oder 7 exportierst. Ohne das überprüft zu haben vermute ich mal dass es an der Variableninitialisierung liegt.
typo33 ist offline   Mit Zitat antworten
Alt 24-02-2004, 00:46   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 10
Danke für die Hilfe, zum leichteren Verständniss hab ich das swf ins netz getan http://members.aon.at/kogelnig/piu/test

und zu deiner antwort, wenn ich das richtig verstanden hab kommen die pause und die restart funktion zu den anderen funktion ( oder sonst wo hin)
die onEnterFrame funktion mit dem clipevent auf den mc

die funktionen pause und restart sollte ich dann über einen button ansteuern können.
Hab ich das so richtig verstanden?

P.S.:hab das so gleich ausprobiert diese Punkte bei der onENterFrame funktion was bedeuten die ich krieg nämlich eine Fehlermeldung

Geändert von PIU-5876 (24-02-2004 um 00:48 Uhr)
PIU-5876 ist offline   Mit Zitat antworten
Alt 24-02-2004, 01:23   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Ort: Münster
Beiträge: 30
Hi,

Zitat:
...,wenn ich das richtig verstanden hab kommen die pause und die restart funktion zu den anderen funktion ( oder sonst wo hin)
ja, einfach zu den anderen Prototypen

Zitat:
die onEnterFrame funktion mit dem clipevent auf den mc
genau, aber halt nicht so wie du es hattest mit

onClipEvent(enterFrame){
hier dein code
}

sondern so:

onClipEvent (load) {
this.startX = this._x;
this.startY = this._y;
this.startXs = this._xscale;
this.startYs = this._yscale;
this.getTarget(5);

this.onMouseUp = function() {
this.getTarget(2.3);
this.pressed = true;
}
this.onMouseDown = function() {
this.getOrigin();
this.pressed = false;
}
this.onMouseMove = function() {
if (this.pressed) {
this.getTarget(2.3);
}
}
this.onEnterFrame = function() {
this.zoom(15, targetX, targetY);
}
}


die "..." sollten heißen: hier dein bisheriger Code im neuen Stil, da hab ich mich wohl etwas sehr knapp ausgedrückt.

Zitat:
die funktionen pause und restart sollte ich dann über einen button ansteuern können.
genau, allerdings heißen die Funktionen "pauseEnterFrame" und "restartEnterFrame" und sind Methoden des MCs den du anhalten willst (auch aller anderen MCs, aber das soll ja nicht stören).

Mal angenommen dein MC ist _root.meinMC, dann kannst du die onEnterFrame-Funktion mit Buttons z.B. so anhalten/starten:

auf dem "Pause"-Button:

on(release){
_root.meinMC.pauseEnterFrame();
}

auf dem "Restart"-Buttom:

on(release){
_root.meinMC.restartEnterFrame();
}
typo33 ist offline   Mit Zitat antworten
Alt 24-02-2004, 16:03   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 10
Unhappy

Das haut einfach nicht hin.

Ich habs ja verstanden gute Idee setze die clipevents wieder in funktionen um sie dann ansteuern zu können. Aber es läuft einfach nicht an.

Hier mal das ganze fla vielleicht hilft das meine Fehler zu finden. ( Die funktionen auf dem mc sind hier wieder wie früher hab, hab mir gedacht dann sieht man wenigstens was)

Ciao PIU
Angehängte Dateien
Dateityp: rar navigation55.rar (4,9 KB, 3x aufgerufen)
PIU-5876 ist offline   Mit Zitat antworten
Alt 24-02-2004, 18:45   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Ort: Münster
Beiträge: 30
Hi PIU-5876

das haut schon hin, allerdings nicht für den Export nach Flash 5, denn da gab es die Möglichkeit mit this.onEnterFrame = function(){irgendein code} noch nicht.

Wie ich schon in der ersten Antwort bemerkt hatte, verhält sich dein Script unterschiedlich, wenn du es in verschiedene Flash Version exportierst. Da wir im MX 2004 Forum sind bin ich mal davon ausgegangen, das dus nicht umbedingt für Flash 5 schreibst.

Bei Flash 5 müßtest du also einen anderen Lösungsansatz wählen! z.B.: mit den Buttons eine Variable auf true oder false setzten und in der onClipEvent(enterFrame) Function abfragen.
In Flash 6 (MX) mußt du this. vor die Variablen- oder Eigenschaften Name schreiben und in Flash MX 2004 darfst du nicht movieclip.prototype schreiben, sondern MovieClip.prototype.
Außerdem ist "zoom" in Flash MX 2004 ein geschütztes Wort, das du ebenfalls nicht verwenden darfst.

Ich habe jetzt mal eine Version gemacht, die sowohl in Flash MX, als auch in MX 2004 läuft:

angucken: http://dev.muse.de/teststuff/navi56.html
runterladen: http://dev.muse.de/teststuff/navi56.rar

Ich habe die "pauseEnterFrame" und "restartEnterFrame" noch um eine Sicherheitsabfrage erweitert, so das jetzt keine Auswirkungen mehr hat, wenn du zuerst "restartEnterFrame" oder 2x hintereinander "pauseEnterFrame" drückst:

MovieClip.prototype.pauseEnterFrame = function() {
if(this.onEnterFrame){
this.remEnterFrame = this.onEnterFrame;
}
delete this.onEnterFrame;
};

MovieClip.prototype.restartEnterFrame = function() {
if(this.remEnterFrame){
this.onEnterFrame = this.remEnterFrame;
}
delete this.remEnterFrame;
};

das Script auf dem MC habe ich wie beschrieben umgestellt und den prototype "zoom" in "zoomer" umgetauft.
typo33 ist offline   Mit Zitat antworten
Alt 24-02-2004, 19:09   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Ort: Münster
Beiträge: 30
Nachtrag:
bei den Fla das du online gestellt hast sind mir noch mehrere Fehler aufgefallen:
du hattest meinen prototype verändert (rot markiert):

MovieClip.prototype.pauseEnterFrame = function() {
this.remEnterFrame = this.Stadt.onEnterFrame;
delete this.Stadt.onEnterFrame;
};

das ist falsch, da this bereits für den MC Stadt steht. Das ist ja gerade das schöne an prototypes, das man sie nicht an jeden einzelnen MC anpassen muss, sondern das sie für alle MCs gelten.

im MC MCbutton schreibst du u.a.:
movieclip.prototype.zoom.start;
da weiß ich nicht was du erreichen wolltest.

und movieclip.prototype.zoom = false;
damit würdest du die Methode überschreiben, was zwar auch zur Folge hätte, das nicht mehr gezoomt wird, allerding könntest du die Methode danach auch nicht mehr verwenden.

Ich würde mal gucken, ob im Forum nicht ein Tut oder ne Erklärung zur Verwendung von prototype gibt.
typo33 ist offline   Mit Zitat antworten
Alt 24-02-2004, 19:13   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 10
Hei habs gerade selber hinbekommen schau mir dein script natürlich trotzdem noch an ist sicher viel schlauer als meins zeig dir aber was ich gemacht habe, es ist simple wie anton

HUHUHUHU hab riesen Freude!!!!

Das script vom MC für die zoom aktion:

onClipEvent (enterFrame) {
if (_root.controlvar == true) {
this.zoom(15, targetX, targetY);
}

Für den Aktivier Knopf:

on (release) {
_root.controlvar = true;
}

Für den Deaktivier Knopf
on (release) {
_root.controlvar = false;
}

Zusätlich hab ich noch ein clipevent onLoad auf true gesetzt so fängts auch schon gleich richtig an.

Hab ich agnz alleine rausgefunden, hat das irgendeinenhacken den ich noch nicht verstehe?

HuHUHUHU freu mich immer noch
PIU-5876 ist offline   Mit Zitat antworten
Alt 24-02-2004, 19:22   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 10
Talking

Hab auch noch nen Nachtrag
Bevor ich wieder anfang irgendwelchen mist zu scripten und du mein script ja schon kennst. Wie kann ich denn verhindern, daß sich der Mc über das Dokument hinaus bewegt. Dann wärs fast schon fertig mit den experimentellen Sachen den restlichen aufbau der Seite krieg ich ziemlich sicher ohne grosse Hilfe hin.

Aber echt nochmal vielen Dank für die Hilfen ist echt anspornend zu sehen, daß sich wer um einen kümmert.
Schau es geht http://members.aon.at/kogelnig/piu/test/

Geändert von PIU-5876 (24-02-2004 um 19:36 Uhr)
PIU-5876 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele