Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-01-2005, 16:34   #1 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Problem mit animierter Navigation

Hallo Leute,
ich versuche mich soeben an einer animierten Navi.
Ich habe mir dazu eine Funktion ausgedacht (das fla findet Ihr im Anhang).

Ich habe 6 Buttons. Clickt man auf einen dieser Buttons (Im Anhang funktioniert nur "downloads" - bzw. sollte funktionieren), so erscheinen weitere "Subbuttons". Die anderen sollen nach links zur Seite rücken, um diesem Platz zu machen (dies aber in einer abgebremsten Bewegung).

Das Problem:
1. Die Bewegung wird nie abgebremst, sondern läuft weiter, bis die Buttons, die Platz machen sollen von der Bildfläche verschwinden.
2. Das ganze funktioniert nur bei mc´s. Lassen sich Buttons auf diese Art etwa gar nicht bewegen? Muss ich sie etwa in mc´s verpacken?

Hier mein Code:
Bild 1 Ebene Functions (Hauptzeitleiste):
Code:
function slideButtons (whichButton,subButtons,baseRate) {
if (_root[whichButton]._x > (_root[whichButton]._x - (subButtons*81))) {
	difference = _root[whichButton]._x - (_root[whichButton]._x - (subButtons*81));
	rate = difference / baseRate;
	_root[whichButton]._x = _root[whichButton]._x - rate;
}
}
whichButton gibt den Namen des Buttons an, der zur Seite rutschen soll.
subButtons gibt an, wie viele Subbuttons eingefügt werden sollen
weitere Info: jeder Button ist gleich groß (81px, wie Ihr sicher bemerkt habt)

Das Skript auf dem einen Button:
Code:
on (release) {
	gotoAndStop ("downloads");
}
Und auf Bild 2, der Hauptzeitleiste (labeled: "downloads") liegt dann ein scriptmc.

Inhalt scriptmc:
Bild 1:
Code:
_root.slideButtons("home",3,4);
_root.slideButtons("transfer",3,4);
_root.slideButtons("excursions",3,4);
Bild 2:
Code:
gotoAndStop (1);
Und die frustrierende Frage:
warum geht das nicht!!!

Kann mir jemand helfen?
Angehängte Dateien
Dateityp: zip slideButtons1.zip (6,3 KB, 13x aufgerufen)
woifaaal ist offline   Mit Zitat antworten
Alt 15-01-2005, 18:13   #2 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Hallo,

Denkfehler!

Bei jedem Aufruf von "slideButtons" wird die aktuelle x-Pos von "whichButton" mit > ("whichButton" - irgendwas) verglichen.
Dieser Vergleich muss immer true ergeben. Da der Aufruf ständig wiederholt wird, hat auch die Bewegung kein Ende.

Noch mal drüber nachdenken.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 15-01-2005, 20:07   #3 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Hallo,
OK, daraus schließe ich zunächst mal, dass auf alle Fälle mal das gotoAndPlay(1); weg muss, sonst bekommt die function also immer wieder den neuen Befehl, ist das richtig?

Der Ausdruck in der Klammer wird aber doch immer kleiner, weil sich die x-pos des "whichButton" immer näher an die geforderte x-pos heranschiebt. Also müsste das die Bewegung abbremsen. Nach meinen Berechnungen müsste dies nach spätestens 31 Durchläufen der Fall sein, denn dann ist auch die zweite Stelle hinterm Komma eine 0. Ich nehme an, dass flash das dann als 0 interpretiert. So müsste die Anfangsbedingung für die funktion also false sein, und die Bewegung stoppen.

Kannst Du mir sagen, wo da der Knoten in meinem Gehirn liegt, denn es funktioniert noch immer nicht (trotz des weglassens des goto befehls).
woifaaal ist offline   Mit Zitat antworten
Alt 16-01-2005, 10:22   #4 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Zitat:
Zitat von woifaaal
... das gotoAndPlay(1); weg muss ...
Das nützt gar nichts, da der mc sowieso als Schleife läuft. Wenn er nur einmal laufen soll, muß Bild 2 ganz weg. Dann hast Du aber keine Bewegung, sondern nur einen Ruck.

Ja, der Ausdruck in der Klammer wird immer kleiner, er wird sogar negativ. Das ändert nichts daran, dass der Vergleich immer true ergibt.
"difference" bleibt dagegen immer konstant (nämlich = (subButtons*81), der Rest wird doch wegsubtrahiert)!
Damit blebt auch "rate" konstant und nichts bremst.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 16-01-2005, 12:28   #5 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Das mit gotoAndPlay.. ist mir durchaus klar.

Aber warum bleibt difference immer gleich? In der letzten Zeile steht doch
PHP-Code:
_root[whichButton]._x _root[whichButton]._x rate
Das müsste ja _root[whichButton]._x doch immer wieder einen neuen Wert bekommen, oder?

Hilfe, ich habe einen Knoten im Kopf!

Vermutlich benötige ich eine while schleife, ja?
woifaaal ist offline   Mit Zitat antworten
Alt 16-01-2005, 19:46   #6 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Natürlich wird _root[whichButton]._x immer kleiner, desshalb geht er ja nach links, nur hat das keinen Einfluss auf difference oder rate.

while-Schleife ist eine gute Idee (bewegen bis Zielposition erreicht ist).
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 17-01-2005, 10:23   #7 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
OK, ich sehe ein: bis jetzt war ich einfach nur dumm (und wie)!!! Danke für die Geduld!!! Ich hoffe das ändert sich nun.
Offensichtlich hatte ich bei Gleichungen damals in der Schule nicht wirklich den Kopf bei der Sache.

Ich habe nun einiges umgestellt, sehe mich aber immer noch mit einem Problem konfrontiert, es funktioniert nicht (bzw. es tut sich gar nichts mehr).

Mein code ist nun ausschließlich auf einen Button fixiert (den home button), der zunächst mal weichen soll.

Der Code im 1.Frame der Ebene Actions:


Hier der Code:
PHP-Code:
function homeSlide (xButton,homeOrigin,subButtons,baseRate) {
while (
xButton >(homeOrigin - (subButtons*81))) {
    
difference xButton - (homeOrigin - (subButtons*81));
    
rate difference baseRate;
    
xButton xButton rate;
}

und dann noch der Code vom Skript MC
PHP-Code:
_root.homeSlide("_root.home._x",304,3,8); 
auf das gotoAndPlay (1) im 2. Frame habe ich nun verzichtet, da die while Schleife ja ohne das auskommen müsste (aber es funktioniert mit auch nicht).

Ich bin am verzweifeln, da ich die Sache unbedingt verstehen möchte. Ich habe nun zwar denke ich auch eine andere Lösung, die ist aber nicht so "elegant".
Danke nochmal
woifaaal ist offline   Mit Zitat antworten
Alt 17-01-2005, 12:05   #8 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Na vielleicht war die Idee mit while doch nicht so gut, weil dann sämtliche Schleifendurchläufe im gleichen Frame, also ohne Verzögerung ausgeführt werden.

Ich mal eine eigene variante entworfen und angehängt.
Angehängte Dateien
Dateityp: zip slideneu.zip (5,8 KB, 11x aufgerufen)
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 17-01-2005, 14:19   #9 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Verstehe (das mit while).

Allerbesten Dank für Deine Mühe. Leider funktioniert das Skript nicht so, wie ich es brauche. Das _root.Weg ist nun eigentlich die Hauptkomponente. Ziel ist anscheinend komplett egal.

Da "home" die Anfangsposition 304 hat, und 3x81 243 ist, müsste die Endposition 71 sein. Ist sie aber nicht. Es sieht vielmehr aus, als würde "home" um 71px nach links rücken. Es ist dabei völlig irrelevant, welchen Wert man für subButtons wählt.

_root.Weg bestimmt eigentlich, wie weit der button sich nach links bewegt, nimmt man nämlich den Wert 10, für _root.Weg, so ist nach dem 11.Durchlauf schluss. Bei Wert 50, erlaubt flash 18 Durchläufe (bei Multiplikator 0.8, wie von Dir verwendet). Beide male stoppt "home" vor dem eigentlichen Ziel. Gibt man jedoch 100 ein, so schießt "home" weit über das Ziel hinaus. Warum wird die zweite if-Bedingung hier einfach ingnoriert?

Oder spinnt etwa mein Flash?
woifaaal ist offline   Mit Zitat antworten
Alt 17-01-2005, 17:14   #10 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Neue Version

So, jetzt habe ich eine neue Version erstellt. Zumindest ein Teil funtkioniert so, wie es sein soll (siehe Anhang).

Ich habe einfach zu jedem Button einen eigenen scriptmc geschrieben, der auf Buttonclick die Eingaben erhält.

z.B.:Name: "scriptbutton1" (analog dazu alle Buttons bis "scriptbutton6"):
Frame1 ("stop"):
PHP-Code:
stop();
baseRatebutton1 4
Frame5 ("move"):
PHP-Code:
    differencebutton1 _root.targetxbutton1 _root.button1._x;
    
ratebutton1 differencebutton1 baseRatebutton1;
    
_root.button1._x += ratebutton1
Frame6:
PHP-Code:
gotoAndPlay ("move"); 
So, und der Button downloads verschickt nun folgende Befehle:
PHP-Code:
on (release) {
    
targetxbutton1 81;
    
targetxbutton2 162;
    
targetxbutton3 243;
    
scriptbutton1.gotoAndPlay("move");
    
scriptbutton2.gotoAndPlay("move");
    
scriptbutton3.gotoAndPlay("move");
    
gotoAndStop ("downloads");

Der Button Downloads als Beispiel ist jener der funktioniert, wenn es jemand probieren möchte.

Das Problem: obwohl nun drei Buttons gleichzeitig Befehle bekommen (und ich die Scripts nur modifiziert habe), funktioniert nur einer (home). Kann mir jemand sagen, was ich nicht richtig bedacht habe?
woifaaal ist offline   Mit Zitat antworten
Alt 17-01-2005, 20:56   #11 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Ort: Berlin
Beiträge: 194
meinste sowas wie das?
__________________
www.alexus-online.de
alexus ist offline   Mit Zitat antworten
Alt 17-01-2005, 21:26   #12 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Hallo Alexus, so ähnlich...
Nur 1. nicht bei Rollover, und 2. müssen dazwischen dann noch andere Buttons hinein. Es funktioniert ja eigentlich schon, aber eben immer nur bei einem Button.
woifaaal ist offline   Mit Zitat antworten
Alt 17-01-2005, 21:42   #13 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
sorry, das war wirklich mit der heißen Taste getippt.
Insbesondere hätte ich nicht Deine schlechte Programmstruktur beibehalten sollen. Da iost der Ablauf schwernachvollziehbar.
Ich versuch's noch mal besser, dauert aber länger.
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 18-01-2005, 10:50   #14 (permalink)
Der Alte
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 208
Hallo,
wie versprochen hier noch ein Versuch.
Die etwas entflochtene Struktur funzt mit "Downloads" und "Rates".
Bewegt wird immer "Home" (als Parameter daher eigentlich unnötig).
Die anderen Buttons hängen einfach dran (oder wolltest Du sie einzeln bewegen?).

Was noch fehlt ist das Zurückfahren, aber Du sollst ja auch selbst noch ein bisschen arbeiten.
Viel Spaß dabei.
Angehängte Dateien
Dateityp: zip slideneu1.zip (5,9 KB, 9x aufgerufen)
__________________
mfG

http://www.1ststeps.de
Billi_I ist offline   Mit Zitat antworten
Alt 18-01-2005, 11:18   #15 (permalink)
.
 
Benutzerbild von woifaaal
 
Registriert seit: Oct 2001
Ort: Wien
Beiträge: 238
Wirklich allerbesten Dank für Deine Mühe. Ich habe mittlerweile versucht es anders zu lösen und sitz gerade noch an dem Ansatz. Habe mir Deine Version schon angesehen, klingt super. Ich hoffe ich kann Euch mal das fertige Ding zeigen...
woifaaal 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 05:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele