Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-01-2006, 18:16   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Spezielle Movieclip Anordnung.

Hallo,
habe eine beliebige Anzahl an Movieclips. Der Vereinfachung sagen wir mal 7 MCs. Für diese gibt es je eine Position. Egal über welchen MC ich die Maus bewege, er soll sich stets zu Position 1 (X=..., Y=...) bewegen. Der MC, der sich zuletzt an Position 1 befand soll sich dann an eine bestimmte Position 7 (X=..., Y=...) setzen.

Bsp:
- Ausgangsposition: MC1, MC2, MC3, MC4, MC5, MC6, MC7
- Useraktion: Er bewegt Maus über MC4.
Was soll passieren: MC4 soll an die Position von MC1. Die Lücke die MC4 hinterlässt sollen von den nachfolgenden MCs (MC5, MC6, MC7) geschlossen werden. MC1 soll an die Position von MC7 (vor der Useraktion) "rutschen".
- Endposition: MC4, MC2, MC3, MC5, MC6, MC7, MC1

Bedingung: Die Animation soll nichtlinear verlaufen und während der Bewegung sollen die MCs, die sich bewegen (in meinem Beispiel: MC1, MC5, MC6, MC7) mit einem leichten "Motion" Blur (ich weiß, dass es so was nciht gibt, aber einen normalen) versehen werden.

Wie gehe ich hierbei am besten vor?
thomas_as ist offline   Mit Zitat antworten
Alt 20-01-2006, 14:43   #2 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Ich würde versuchen "Felder" (feste Positionen) zu definieren, meine MCs in ein Array legen und dann mit einer "for" Abfrage starten.
Mein Problem hierbei ist die Sache mit dem "onRollOver" Befehl. Wie lege ich diesen auf ein "Feld" statt auf einen MC"?

Wie würdet ihr vorgehen?
thomas_as ist offline   Mit Zitat antworten
Alt 20-01-2006, 16:43   #3 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
du legst diesen trotzdem auf den MovieClip gibst ihm aber eine Variable, welche ihm die Position angibt!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 21-01-2006, 16:15   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Zitat:
Zitat von bamboocha
du legst diesen trotzdem auf den MovieClip gibst ihm aber eine Variable, welche ihm die Position angibt!
Das verstehe ich nicht ganz. Kannst du mir bitte den Anfang des Codes hier kurz als Bsp. geben? Lege ich die variable auf jeden MC? Komme mit dem "Austasch" momentan noch nicht klar.
thomas_as ist offline   Mit Zitat antworten
Alt 22-01-2006, 19:42   #5 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
So... hatte wieder ein bisschen Zeit...
bitte sehr!
Angehängte Dateien
Dateityp: zip navi.zip (5,0 KB, 58x aufgerufen)
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 23-01-2006, 11:15   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
wow, das ist ja abgefahren...

Erstmals vielen Dank für die geniale (Teil-)Lösung meines Problems. Dein Script macht genau was ich will. Nur habe ich überhaupt keine Ahnung warum das der Fall ist. Sehe zwar den Code und verstehe die Begriffe solange sie separat stehen nur im Zusammenhang kann ich deren Interaktion miteinder leier nicht mehr folgen.
Das Ganze fängt schon dabei an, dass ich in der Bibliothek einen MC finde (flaechen), in dem ich aber außer einem "A" und dem grünen "Hintergrund" nichts finden kann. Wo kommen 1,2,3...7 als Grafik her?

Vielen Dank im Voraus!!!
thomas_as ist offline   Mit Zitat antworten
Alt 23-01-2006, 12:30   #7 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Ok, hier die Erklärung dazu:
Zu allererst definiere ich alle Variabeln, Arrays und Funktionen. Die Buttons hole ich erst nachher per AS auf die Bühne:
PHP-Code:
for(var 08i++) {
    
order[i] = i;
    
yPos.push(i*60);
    
xPos.push(50);
    var 
mc _root.attachMovie("flaechen""feld"+ii);
    
mc.i;
    
mc._x xPos[i];
    
mc._y yPos[i];
    
mc.label.text mc.z;
    
mc.onPress = function() {
        
reorder(this.z);
    }

zuerst pushe ich jeweils das Array für die Reihenfolge (order), sowie die Array für die x- und die y-Position (xPos/yPos). Anschliessend hole ich mit attachMovie den MC "flaechen" aus der Bibliothek und benenne ihn mit "feld"+i (--> am Schluss hast du feld0 bis feld7). Dann gebe ich ihm seinen Wert in der Variable z mit (.z), da i ja immer erhöht wird und so der Wert auch immer steigen würde. Anschliessend hole ich die x- und y-Werte für den MC aus dem Array (die Werte, die ich vorhin gerade hereingepusht habe). Am Schluss setze ich den Wert des Textfeldes in "flaechen" auf den Wert der Variable z und weise bei onPress noch die reorder-Funktion mit dem Eigenwert als Parameter zu:
PHP-Code:
function reorder(aktueller) {
    if(
aktueller != order[0]) {
        var 
alt order[0];
        
order[0] = aktueller;
        var 
1;        
        for(var 
18i++) {
            if(
order[i] != order[0]) {
                
order[x] = order[i];
                
x++;
            }
        }
        
order[7] = alt;
        for(var 
08i++) {
            
_root["feld"+order[i]]._x xPos[i];
            
_root["feld"+order[i]]._y yPos[i];
        }
    }

Zuerst erfolgt eine Abfrage, ob der gedrückte Button derjenige an Position 0 in order ist, wenn dies der Fall ist, soll er nichts machen. Wenn die genannte Bedingung nicht erfüllt ist, soll der gedrückte als erster gesetzt werden. Mit der folgenden Schlaufe, werden lediglich die anderen Werte entsprechend angeordnet und die Lücken aufgefüllt! Anschliessend wird der alte 0-Wert an Position 7 in order gesetzt und die Positionen neu zugeordnet. That's it!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 09:27   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
PHP-Code:
order[i] = i
was sagt diese Zeile genau aus?

PHP-Code:
    var mc _root.attachMovie("flaechen""feld"+ii); 
der sich in der Bibliothek befindende Movieclip namens "flaechen" wird nun hereingeholt. Warum die Umbenennung und wo finde ich die einzelnen "Buttons"? Dadurch dass du die "Buttons" mit feld0 bis feld7 benennst erhältst du 8 verschiedene Zustände. Okay. Aber wo kann ich sehen wie die 8 Zustände aussehen? Bzw- wo kann ich sie verändern? Ich weiß, dass deine MCs aus dem Hintergrund und einem dynamischen Text bestehen. Jedoch kann ich im Script leider nicht erkennen welche Aussage für den Inhalt und somit die Zahlen notwendig ist. In meinem Menü gibt es keine Zahlen, jedoch würde ich die Instanznamen der MC-Buttons gerne durchnummerieren um das Script adaptieren zu können.

PHP-Code:
mc.i
x,y,z. D.h. z steht für die Tiefeninfo. Liegt die Zahl 2 hinter der 1, ist sie nicht sichtbar. Wo und womit legst du fest wann welche Zahl/welcher Button/wlcher Movieclip wo - bzgl. der Z-Achse - positioniert ist?

Vielen Dank im VOraus
thomas_as ist offline   Mit Zitat antworten
Alt 24-01-2006, 09:39   #9 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Zitat:
Zitat von thomas_as
PHP-Code:
order[i] = i
was sagt diese Zeile genau aus?
Du fügst dem Array order ja in einer Schleife Elemente hinzu. Damit machst du nix anderes als order[1] = 1, order[2] = 2, etc!
Zitat:
Zitat von thomas_as
PHP-Code:
var mc _root.attachMovie("flaechen""feld"+ii); 
der sich in der Bibliothek befindende Movieclip namens "flaechen" wird nun hereingeholt. Warum die Umbenennung und wo finde ich die einzelnen "Buttons"? Dadurch dass du die "Buttons" mit feld0 bis feld7 benennst erhältst du 8 verschiedene Zustände. Okay. Aber wo kann ich sehen wie die 8 Zustände aussehen? Bzw- wo kann ich sie verändern? Ich weiß, dass deine MCs aus dem Hintergrund und einem dynamischen Text bestehen. Jedoch kann ich im Script leider nicht erkennen welche Aussage für den Inhalt und somit die Zahlen notwendig ist. In meinem Menü gibt es keine Zahlen, jedoch würde ich die Instanznamen der MC-Buttons gerne durchnummerieren um das Script adaptieren zu können.
Warum die Umbennenung!? Wenn du einen MovieClip aus der Bibliothek auf die Bühne ziehst gibst du auch jeder Instanz einen anderen Namen! Ich hätte die Felder natürlich auch "flaechen"+i nennen können. Die einzelnen Buttons wirst du nie auf der Bühne finden, diese werden eben per ActionScript zur Laufzeit auf die Bühne gezogen (instanziert - das selbe wie aus der Biblio auf die Bühne ziehen). Und nein - ich erhalte nicht 8 verschiedene Zustände! Ich habe lediglich 8 Instanzen von "flaechen", die alle den selben Zustand haben.
Folgender Teil weist dem Textfeld den Wert zu:
PHP-Code:
mc.label.text mc.z
Anstelle von mc.z kannst du zuweisen, was du willst...
Zitat:
Zitat von thomas_as
PHP-Code:
mc.i
x,y,z. D.h. z steht für die Tiefeninfo. Liegt die Zahl 2 hinter der 1, ist sie nicht sichtbar. Wo und womit legst du fest wann welche Zahl/welcher Button/wlcher Movieclip wo - bzgl. der Z-Achse - positioniert ist?
Vielen Dank im VOraus
Falsch... z ist wiederum einfach ne frei - und auf Grund von Faulheit - gewählte Variable, die dem Button mitteilt, welche er Nummer er hat! Da die Buttons eh nie übereinanderliegen werden, ist eine z-Achsen-Anordnung überflüssig! Hätte stattdessen auch:
PHP-Code:
mc.nr 
schreiben können, hat aber einen Buchstaben mehr als z!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 10:04   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Erstmals vielen Dank für die Müde und die Geschwindig- und Ausführlichkeit deiner Antworten! Langsam wird mir das Ganze etwas klarer, jeodch bin ich noch immer nicht in der Lage dein geniales Script zu nutzen.

Zitat:
Zitat von bamboocha
Die einzelnen Buttons wirst du nie auf der Bühne finden, diese werden eben per ActionScript zur Laufzeit auf die Bühne gezogen (instanziert - das selbe wie aus der Biblio auf die Bühne ziehen). Und nein - ich erhalte nicht 8 verschiedene Zustände! Ich habe lediglich 8 Instanzen von "flaechen", die alle den selben Zustand haben.
Nich auf der Bühe: Sehe ich.
Aber in der Bibliothek ja auch nicht...
Was muss ich tun um das Script verwenden zu können? Ich habe 7 Button_MCs (können der Vereinfachung aber gerne 8 sagen weil du ja 8 in deinem Beispiel hattest), dazu je eine andere Seite.
Wenn das alles klappt möchte ich die Buttons nicht springen lassen, sondern die Positionsänderungen animieren. Aber erstmals die einfache Version.

Zitat:
Zitat von bamboocha
PHP-Code:
mc.nr 
schreiben können, hat aber einen Buchstaben mehr als z!
verstehe... und ich habe schon gedacht bei meinem flash stimmt was nciht, weil ich das z nicht im Action Script Editor fand. Habe aber gerade vorhin noch gelesen, dass es in Flash keine z-Achse gibt.
thomas_as ist offline   Mit Zitat antworten
Alt 24-01-2006, 10:18   #11 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Zitat:
Zitat von thomas_as
Aber in der Bibliothek ja auch nicht...
Öhm doch... wie schon gesagt sind alle Buttons Instanzen des selben MovieClips! Das heisst, alles was du an diesem MovieClip in der Bibliothek änderst wird bei allen Buttons zu sehen sein! Probier doch mal!
Wenn du dann halt nur 7 Buttons willst, ersetze alle "8" im Script durch ne 7 - et voilà!
Ja, die Beweganimation ist dann was anderes (und auch nicht so schwierig! )
Zitat:
Zitat von thomas_as
Habe aber gerade vorhin noch gelesen, dass es in Flash keine z-Achse gibt.
Ne, stimmt nicht ganz! Du hast sogar mindestens zwei z-Achsen, wenn du so willst! Du hast ja die Levels (_root als _level0) und darin jeweils deren verschiedene Tiefen und darin evtl. noch MC's mit ihren Tiefen, etc.
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 11:04   #12 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Zitat:
Zitat von bamboocha
Öhm doch... wie schon gesagt sind alle Buttons Instanzen des selben MovieClips! Das heisst, alles was du an diesem MovieClip in der Bibliothek änderst wird bei allen Buttons zu sehen sein! Probier doch mal!
Wenn du dann halt nur 7 Buttons willst, ersetze alle "8" im Script durch ne 7 - et voilà!
Das ist mir schon klar. Jedoch ist es mir nicht klar wie das gehen soll wenn ich einen MC mit unterschiedlichen Text und Bildinhalten habe.
So hab ich das z.B. gemeint
MC1: Baum-Bild (Text: Eiche)
MC2: Fisch-Bild (Text: Forelle)
MC3 ...


Zitat:
Zitat von bamboocha
Ja, die Beweganimation ist dann was anderes (und auch nicht so schwierig! )
Ehrlich? Ich dachte es wäre einfacher in AS ein Bild springen zu lassen wie zu animieren. Zumindest geht es mir so; abgesehen von dem "automatischen Platztauschen".
Mein Ziel irgendwann (möglichst bald *g*): Ich möchte das mit dem Platztauschen beibehalten, jedoch statt einem Sprung mit einer Animation. Parallel dazu sollen dazu folgende Aktionen ablaufen:
a) RollOver: Im Hintergrund soll sich ein Falbfeld mit der Mouse mitbewegen, im Optimalfall bei den Buttons sanft "einrasten" und wenn die Maus heruntergeht (RollOut) (aus der "Buttonleiste") soll das Farbfeld wieder an Position 0 (ganz oben) sein.
b) onRelease: Austausch der Buttons wie gehabt, nun aber animiert. Parallel zum sich-nach-oben-bewegenden-Button soll das Farbfeld mitanimiert werden. Außerdem soll eine Animation gestartet werden, die meinen Content-Bereich (Fischbild+Text) aktiviert. Diese Animation animiere ich aber per Hand, weil ich da momentan noch schneller bin.
thomas_as ist offline   Mit Zitat antworten
Alt 24-01-2006, 11:15   #13 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
hmmmm... dann hast du ja noch was vor!
Ach so! Ist auch nicht weiters schwierig! Mach nen rechtsklick auf deine MovieClips, die du dann reinziehen willst! Dann auf "Eigenschaften > Erweitert" oder "Verknüpfung" (kommt aufs selbe raus).
Dann klickst du das Feld "Export für ActionScript" an. Das Häkchen in "ins erste Bild exportieren kannst du stehen lassen. Danach musst du noch einen Namen vergeben. Hier wäre es schlau, wenn du deine Bilder durchnummerierst, da es das ganze einfacher macht! Achtung: Der Verknüpfungsname muss nicht gleich sein, wie der MovieClip-Name in der Bibliothek! Du kannst also deinen MC Eidechse-MC nennen, als Verknüpfer aber "mc1" oder ähnliches vergeben. Wichtig ist dann einfach, dass du aus AS heraus mc1 ansprichst und nicht Eidechse-MC!

Habs mal angepasst:
PHP-Code:
var yPos = new Array();
var 
xPos = new Array();
var 
order = new Array();
var 
maxbild 7;
function 
reorder(aktueller) {
    if(
aktueller != order[0]) {
        var 
alt order[0];
        
order[0] = aktueller;
        var 
1;        
        for(var 
1maxbildi++) {
            if(
order[i] != order[0]) {
                
order[x] = order[i];
                
x++;
            }
        }
        
order[7] = alt;
        for(var 
0maxbildi++) {
            
_root["feld"+order[i]]._x xPos[i];
            
_root["feld"+order[i]]._y yPos[i];
        }
    }
}
for(var 
0maxbildi++) {
    
order[i] = i;
    
yPos.push(i*60);
    
xPos.push(50);
    var 
mc _root.attachMovie("mc"+i"feld"+ii);
    
mc.i;
    
mc._x xPos[i];
    
mc._y yPos[i];
    
mc.label.text mc.z;
    
mc.onPress = function() {
        
reorder(this.z);
    }

Das dürfte funktionieren, wenn du deine MC's mit mc0 bis mc7 in der Verknüpfung durchnummerierst!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 11:42   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 211
Zitat:
Zitat von bamboocha
var maxbild = 7;
sollte wohl so heißen:
PHP-Code:
var maxbild 8
sonst funktioniert das automatische Neuanordnen nicht und alle MCs bleiben an Position0 stehen.

Dass sogar dir gelegentlich Fehler passieren baut mich doch gleich wieder auf.

Spaß beiseite. Vielen Dank für deine Unterstützung! Werde jetzt versuchen die Sachen zu animieren.
thomas_as ist offline   Mit Zitat antworten
Alt 24-01-2006, 12:18   #15 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
öhm... ne! ^^ sollte schon
PHP-Code:
maxbild 
heissen! Allerdings dürfte es nicht mehr
PHP-Code:
order[7] = alt 
heissen sondern
PHP-Code:
order[maxbild-1]= alt 
.

War halt im Mittagsstress!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha 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 10:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele