Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-04-2006, 11:34   #1 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
einen Wert im Array mit dem ersten Wert tauschen

Moinsen FF!



Montag Morgen ... Hirn arbeitet trotz der normalen Dosis Kaffee nur auf 28% Leistung, folge: ich bekomm ein einfaches Script mal wieder nicht hin und beiss mir seit Stunden daran die Zähne aus.

Situation: auf der Bühne sind untereinander 4 MCs mit der beschriftung 1, 2, 3 und 4 und jeweils ein Button drin:

1
2
3
4

Nun möchte ich bei klick auf z.B. 3, dass die 3 im Array mit dem ersten Wert (hier also die 1) die Position tauscht. Dazu werden die _y Werte der betreffenden MCs getauscht, sollte dann also so aussehen:

3
2
1
4

Bin das ganze schon 3 mal komplett neu angegangen und bin nun endlich mal rech Nah, es passiert aber imm noch ein Fehler:
Sobalt man einen MC wieder anklickt nachdem mal einen anderen geklickt hat, kommt das ganze durcheinander. Ich versteh es einfach nicht!

Hier das Scipt zu dem Ganzen:

PHP-Code:
texte_height_array = [152.2178.2201.2224.2];

texte_positionen_array = ["text_1""text_2""text_3""text_4"];

text_1.btn.onRelease = function(){    
    
text_to_top(1);
    };
    
text_2.btn.onRelease = function(){    
    
text_to_top(2);
    };

text_3.btn.onRelease = function(){    
    
text_to_top(3);
    };
    
text_4.btn.onRelease = function(){
    
text_to_top(4);
    };
    
function 
text_to_top(x){
    
trace(x);
    if (
"text_"+== texte_positionen_array[0]){
        
// blocken wenn Textfeld ganz oben geklickt wurde
    
} else {                
        
//Position vom geklickten Feld im Array herausfinden
        
for(i=1;i<texte_positionen_array.length;i++){
                if(
"text_"+== texte_positionen_array[i]) {
                    
pos i;
                    }        
            }
        
//Textfelder Höhen tauschen
        
this[""+texte_positionen_array[0]]._y =texte_height_array[pos];
        
this[""+texte_positionen_array[pos]]._y =texte_height_array[0];
        
        
// Array umsortieren. Geklicktes Feld tauscht Position mit dem ersten Feld.
        
cut_1 texte_positionen_array.splice(pos,1);
        
cut_2 texte_positionen_array.splice(0,1);
        
texte_positionen_array.unshift(cut_1);
        
texte_positionen_array.splice(pos,0,cut_2);
    }
}; 
Fla kann ich leider nicht senden ... hier ist wegen Benutzerrecht nicht mal zippen möglich -.-



Falls nicht genau klar sein sollte was ich meine oder wo der Fehler liegt, dann erklär ich es auch gerne nochmal genauer. Wäre klasse wenn mir jemand erklären könnte warum da was schief läuft und wie ich das verhindern kann.

Danke!
djdwarf ist offline   Mit Zitat antworten
Alt 10-04-2006, 11:58   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Ich wär das jetzt mal ohne Array angegangen... einfach testweise 4 MCs (mc1 - mc4) auf der Bühne untereinander angeordnet:
PHP-Code:
var topMC:MovieClip mc1;

function 
swapPositions(pClip:MovieClip):Void {
    
    if (
pClip == topMC) return;
    
    
pClip._x ^= topMC._x
    topMC
._x ^= pClip._x
    pClip
._x ^= topMC._x
    
    pClip
._y ^= topMC._y
    topMC
._y ^= pClip._y
    pClip
._y ^= topMC._y
        
    topMC 
pClip;
}

for (var 
i:Number 1<= 4i++) {
    
this["mc" i].onRelease = function():Void {
        
swapPositions(this);
    };

Edit:
schnelles Bsp. anbei...
Angehängte Dateien
Dateityp: zip swapPositions.fla.zip (5,2 KB, 8x aufgerufen)

Geändert von sonar (10-04-2006 um 12:05 Uhr)
sonar ist offline   Mit Zitat antworten
Alt 10-04-2006, 13:20   #3 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Hi Sonar!


Joa, das ja recht simpel. Danke!
Ist das AS2? Bekomm da jedenfalls leider nicht den Durchblick Muss ich mal bisschen mit rumprobieren.



Aber warum meine Variante nicht funzt weisst du auch nich, oder? Mich wurmt das, dass ich den Fehler einfach nicht finde.

Falls du dir das nochmal anschauen magst, könntest du in deine Fla das Scipt austauschen gegen dieses:



PHP-Code:
stop();

// alte Heights texte_height_array = [206, 232, 255, 278];
texte_height_array = [100150200250];

texte_positionen_array = ["mc1""mc2""mc3""mc4"];

mc1.onRelease = function(){    
    
text_to_top(1);
    };
    
mc2.onRelease = function(){    
    
text_to_top(2);
    };

mc3.onRelease = function(){    
    
text_to_top(3);
    };
    
mc4.onRelease = function(){
    
text_to_top(4);
    };
    
function 
text_to_top(x){
    if (
"mc"+== texte_positionen_array[0]){
        
// blocken wenn Textfeld ganz oben geklickt wurde
    
} else {                
        
//Position vom geklickten Feld im Array herausfinden
        
for(i=1;i<texte_positionen_array.length;i++){
                if(
"mc"+== texte_positionen_array[i]) {
                    
pos i;
                    break;
                    }        
            }
        
//Textfelder Höhen tauschen
        
this[""+texte_positionen_array[0]]._y =texte_height_array[pos];
        
this[""+texte_positionen_array[pos]]._y =texte_height_array[0];
        
        
// Array umsortieren. Geklicktes Feld tauscht Position mit dem ersten Feld.
        
cut_1 texte_positionen_array.splice(pos,1);
        
cut_2 texte_positionen_array.splice(0,1);
        
texte_positionen_array.unshift(cut_1);
        
texte_positionen_array.splice(pos,0,cut_2);
    }
}; 
Dann hast du genau die von mir beschriebene Version, mit dem Fehler nach erneuten klick auf einen bereits geklickten MC. Vielleicht findest du ja den Grund dafür, das wäre noch klasse .. sonst lässt mich das heute nicht schlafen


Gruß,
Dwarf
djdwarf ist offline   Mit Zitat antworten
Alt 10-04-2006, 13:26   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Tag!
Mal auf die Schnelle. So sollte es doch klappen:
PHP-Code:
function text_to_top(x) {
    for (var 
1i<texte_positionen_array.lengthi++) {
        if (
"text_"+== texte_positionen_array[i]) {
            
this[texte_positionen_array[0]]._y texte_height_array[i];
            
this[texte_positionen_array[i]]._y texte_height_array[0];
            
temp texte_positionen_array[i];
            
texte_positionen_array[i] = texte_positionen_array[0];
            
texte_positionen_array[0] = temp;
            break;
        }
    }

__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 10-04-2006, 13:29   #5 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Zitat:
Zitat von djdwarf
Joa, das ja recht simpel. Danke!
Ist das AS2? Bekomm da jedenfalls leider nicht den Durchblick Muss ich mal bisschen mit rumprobieren.
Den 'XOR'-Operator (^=) gab's sogar schon in Flash 5...
Das hab aber nicht ich mir ausgedacht, die Credits dafür gehen an Matze Kannengießer. Von dem hab ich nen Artikel in ner alten 'Internet Intern' gelesen, da war das Thema "Werte ohne Zwischenvariable tauschen" drin zu finden...

Edit:
wusst ich's doch, dass der Frager sich noch des Array-Themas annimmt...
sonar ist offline   Mit Zitat antworten
Alt 10-04-2006, 13:31   #6 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Hi Frager!




Jap, genau so hat ichs mir gedacht. Bist mal wieder mein Retter


*genaueranguck* ... boa, näääää! Natürlich! Was mach ich mir das so umständlich?? *gegenstirnklatsch* *kopfauftischditsch* .... *seufs* Bin heute irgendwie echt nicht ganz auf dem Damm.


Danke Frager! Dann kann ich ja weitermachen.


EDIT: @sonar: Beschäftige mich nun schon ne Weile mit Flash, aber ich kenn bis jetzt irgendwie immer nur noch n winzigen Ausschnitt aus dem kompletten AS Horizont. Das wird mir jedes mal wieder bewusst hier *g*

Geändert von djdwarf (10-04-2006 um 13:35 Uhr)
djdwarf ist offline   Mit Zitat antworten
Alt 10-04-2006, 13:34   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
@sonar -> Diese XOR-Geschichte checke ich auch nicht. Hat aber was unheimliches...

@djdwarf -> Na dann...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 10-04-2006, 16:10   #8 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
kannte ich bis dato auch nicht ....aber funky
__________________
gruß bloba

2 x onkel² b_d
bloba 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 07:09 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele