Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-02-2004, 16:13   #1 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
Question onPress = funktion auf alle bis auf den angeklickten?

hi (mal wieder :-)

mal angenommen, ich habe 5 mcs auf der bühne (oder zusammen in einem mc).
wenn ich auf einen dieser 5 mcs klicke, sollen alle bis auf den angeklickten etwas machen (z.B. mal play())

der angeklickte soll aber nichts machen.

danke für hilfe!
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 21-02-2004, 17:48   #2 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
angenommen die heißen 'mc1', 'mc2', etc...


ActionScript:
  1. //anzahl der mc´s festlegen:
  2. var mc_count=5;
  3.  
  4. //array für die mc´s
  5. myArr = [];
  6.  
  7. // alle mc´s in ein array pushen
  8.  
  9. for(var i=1; i<=mc_count;i++){
  10.      myArr.push(this['mc'+i] )
  11.  
  12.      // funktionen z.bsp. onPress generieren:
  13.          this['mc'+i].onPress=function(){
  14.  
  15.                //alle außer sich selbst:
  16.                  for(var j=0;j<_root.myArr.length;j++){
  17.                        if(_root.myArr[j] != this){
  18.                            
  19.                          // hier nun, was geschehen soll: (bsp.: trace)
  20.                             trace('hey!  sagt : '+_root.myArr[j]);
  21.                        }
  22.                  }
  23.          }                     
  24. }

ich gebe zu, dass mir diese lösung nicht sonderlich gefällt...
aber eine andere die ich hätte, würde zu viele erklärungen kosten...

diese hier sollte wunderbar laufen und übersichtlich sein...
*habs ausm kopp getippt*

bei probs einfach fragen...

hoffe das ist das , was du gesucht hattest...

greetz

kelor

Geändert von kelor (21-02-2004 um 17:51 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 21-02-2004, 18:21   #3 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
hi kelor,

erstmal danke.

bei mir wendet er die funktion nur auf sich an und lässt alle anderen in ruhe.

ich kann dir ja nochmal ebenetwas mehr erzählen:

also es geht um einen drag&drop fall:
mal angenommen, ich schiebe einen mc auf ein ziel und es rastet da ein.
dann will ich einen weiteren mc auf das ziel schieben und möchte, daß der bereits auf dem ziel liegende mc dann an seine ursprungsposition zurückkehrt.

ich habe den mcs (die sich in einem parent mc befinden) keine instanznamen gegeben und #include deren scripte aus einem AS file.

die reihenfolge der mcs kann stark variieren, weshalb ich den mcs ungern eine zahlenreihenfolge in den namen vergeben möchte, sondern wenn, dann höchstens individuelle namen.

vielleicht fällt dir ja spontan noch was dazu ein.
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 23-02-2004, 13:00   #4 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
hey [mr.twister] tornado... das kann aber nicht sein...

habe eben meinen code mal schnell in eine fla gestopft.
funktioniert genau so, wie es sollte...

wenn ich auf 'mc1' klicke, bekomme ich mc2, mc3, mc4, mc5 angezeigt...

wenn ich auf 'mc3' bekomme ich mc1,mc2,mc4,mc5 angezeigt...
genau so, wie es beabsichtigt ist...

der code funktioniert also so, wie er sollte.


nun zu deinem fall:

wie wäre es, wenn du einfach die ausgangspositionen deiner mc´s in einem object speicherst und einfach alle, außer dem aktiven, wieder auf diese pos setzt...



ActionScript:
  1. // ich benenne die mc´s einfach mal :hugo, fritz, emma, karl
  2.  
  3. // var count ist die anzahl der mc´s:
  4.  
  5. var count=4;
  6.  
  7. // array zum ablegen der mc´s und der objekte, die die daten enthalten
  8. mc_arr= [hugo,fritz,emma,karl];
  9. mc_obj=[];
  10.  
  11. // objekte für die einzelnen mc´s anlegen:
  12.  
  13. for(var i=1;i<=count;i++){
  14.      var mc =mc_arr[i-1];
  15.      var k=mc._name;
  16.      mc_obj[k]={x:mc._x, y: mc._y};
  17. }
  18. delete mc;
  19. delete k;
  20. delete i;

sodele...jetzt hast du 4 objekte, die wie deine mc´s heißen
auf die mc´s kannst du nun via :
mc_arr[n] zugreifen


auf die objekte via:
var mcName=mc_arr[n]._name;
mc_obj[mcName];


und auf deren werte, via:
mc_obj[mcName].x

oder

mc_obj[mcName].y

jetzt kannst du ja meine fkt von oben nehmen und überprüfen, welcher der aktive ist...

verstanden?

hilft das jetzt weiter?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 23-02-2004, 14:04   #5 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
hi!

also erstmal sorry, daß ich wohl dein AS aus dem ersten beitrag falsch angewendet hab.

und zu deinem zweiten posting:
danke dafür, ich habe jetzt ne halbe stunde versucht, damit zurechtzukommen, es mag auch gut funktionieren, mir fehlt nur leider das nötige hintergrundwissen, um das script sinnvoll anzuwenden.

ANHANG

ich habe hier mal eine einfache version meines falls gebastelt.

Es tut mir leid, daß ich noch nicht so weit bin, was AS angeht, aber vielleicht magst du ja trotzdem kurz mal einen blick in die datei werfen (ist sowohl 2004 version als auch MX version in der zip enthalten) und mir dann nochmal schildern, wie der fall zu lösen wäre bzw. wo ich was von deinem script einsetze und wie ich es ansteuere.

ich gehe in der 2004er version extra über ein externes AS script, was ich auf alle kreis mcs lege, damit ich die swf möglichst klein halte.
und ich schreibe das script für das draggen der mcs extra nicht in die zeitleiste, weil ich da wiederrum erst ein array für alle mcs anlegen müsste, was ich mit dieser methode nicht brauche.

also ich wäre dir auf jeden fall für weitere hilfe sehr dankbar!

ich hoffe, daß meine bitte nicht zu dreist ist :-)
*kopfeinziehundwegrenn*

MGF - twister.
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 23-02-2004, 14:58   #6 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
also einmal die mx-version [KEIN 2oo4] :

1. entferne alle scripte auf den dragable mc´s...komplett weg damit!

2. folgendes script auf die hauptzeitleiste ins bild[ da wo schon der rest von meinem script stand- entferne das und setzte folgendes script dafür ein!!]

ActionScript:
  1. // ich benenne die mcŽs einfach mal :hugo, fritz, emma, karl
  2. // var count ist die anzahl der mcŽs:
  3. _root.besetzt = null;
  4. var count = 3;
  5. // array zum ablegen der mcŽs und der objekte, die die daten enthalten
  6. mc_arr = [drag1, mcdrag2, dragger3];
  7. mc_obj = [];
  8. // objekte für die einzelnen mcŽs anlegen:
  9. for (var i = 1; i<=count; i++) {
  10.     var mc = mc_arr[i-1];
  11.     var k = mc._name;
  12.     mc_obj[k] = {x:mc._x, y:mc._y};
  13.     mc.onPress=function(){
  14.        this.startDrag();
  15.        this.swapDepths(50);
  16.     }
  17.     mc.onRelease=function(){
  18.        this.stopDrag()
  19.        if(this.hitTest(this._parent.plattenspieler)){
  20.                        //platte liegt auf teller
  21.                this._x = this._parent.plattenspieler._x +25;
  22.                this._y = this._parent.plattenspieler._y +25;
  23.                if(_root.besetzt != null){
  24.                    _root[_root.besetzt]._x=_root.mc_obj[_root.besetzt].x;
  25.                    _root[_root.besetzt]._y=_root.mc_obj[_root.besetzt].y;
  26.                }
  27.                _root.besetzt = this._name;
  28.        }else{
  29.                        //platte geht zurück
  30.                this._x = _root.mc_obj[this._name].x;
  31.                this._y = _root.mc_obj[this._name].y;
  32.        }
  33.     }
  34. }
  35. delete mc;
  36. delete k;
  37. delete i;

sodele...jetzt aber...


ersetzt dir den jeweiligen mc auf deinem zielobjekt und setzt dorthin zurück, wo er her kam...

die mx 2oo4 version kommt gleich...


greetz


kelor

Geändert von kelor (23-02-2004 um 15:00 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 23-02-2004, 15:10   #7 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
WOOOOOW ! ! ! !

ich danke dir vielmals, jetzt klappt das ja wunderbar!
das mit dem "besetzt" hab ich das auch schon ewig und drei tage versucht, aber es hat bei mir nie so geklappt, wie es sollte.
ich versuche grad, das AS zu verstehen, aber da muss ich wohl noch n bißchen dazulernen :-)
aber es funzt ja schonmal.

ich könnte das ja schon so nehmen, wie es da steht, aber ich warte trotzdem noch eben auf die 2004 version.

nochmal vielen vielen dank!
durch deine hilfe komme ich jetzt echt weiter.
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 23-02-2004, 17:25   #8 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
habe es dir mal mit einer klasse aufgelöst...
würde aber auch anders gehen.

halt ein bischen 2oo4-style


1. in der *.fla nimm alle includes von den dragablen-mc´s raus!

2. in der *.fla ins erste einzige bild folgendes:
ActionScript:
  1. _root.besetzt = null;
  2.  
  3. // deine mc´s
  4. var my_mcs =[drag1,mcdrag2,dragger3];
  5.  
  6. // instanz deiner klasse
  7. var discMC:dragMcClass= new dragMcClass(my_mcs);

und in der *.as datei, die den gleichen namen hat, wie die klasse:

ActionScript:
  1. class dragMcClass {
  2.  
  3.   var count:Number;
  4.   var mc_arr:Array;
  5.   var arr_obj:Array=[];
  6.  
  7.          // constructor
  8.          function dragMcClass(arr:Array){
  9.                   mc_arr=arr;
  10.                   count=mc_arr.length;
  11.                   setObjects();
  12.          }
  13.  
  14.          //methode zum setzen der wertepaare[x - y] und der mc-methoden
  15.          function setObjects(){
  16.  
  17.                   for (var i=1; i<=count; i++) {
  18.                        var mc = mc_arr[i-1];
  19.                        var k = mc._name;
  20.  
  21.                        // iss zwar nicht sauber, funZt aber...
  22.                        // verweis in den mc´s auf das objekt
  23.                        mc.watchObj = this;
  24.  
  25.                                    // assi-array mit objekten füllen, die den namen der mc´s haben
  26.                        arr_obj[k] = {x:mc._x, y:mc._y};
  27.  
  28.                        //setzen der onEvents für die mc´s
  29.  
  30.                        mc.onPress=function(){
  31.                           this.startDrag();
  32.                           this.swapDepths(50);
  33.                        }
  34.                        mc.onRelease=function(){
  35.                          
  36.                           var obj = this.watchObj;
  37.                           this.stopDrag()
  38.                           if(this.hitTest(this._parent.plattenspieler)){
  39.                              //platte liegt auf teller
  40.                              this._x = this._parent.plattenspieler._x +25;
  41.                              this._y = this._parent.plattenspieler._y +25;
  42.  
  43.                              // wenn plattenteller bereits belegt ist
  44.                              if(_root.besetzt != null){
  45.                                 _root[_root.besetzt]._x=obj.arr_obj[_root.besetzt].x;
  46.                                 _root[_root.besetzt]._y=obj.arr_obj[_root.besetzt].y;
  47.                              }
  48.                      // belegt 'besetzt' mit dem mc-namen, der aktuell auf dem teller liegt
  49.                              _root.besetzt = this._name;
  50.                           }else{
  51.                              //platte geht zurück
  52.                              this._x = obj.mc_obj[this._name].x;
  53.                              this._y = obj.mc_obj[this._name].y;
  54.                           }
  55.                       } // end of 'release'
  56.  
  57.                  } // end of 'for'
  58.         }// end of 'setObjects'
  59. }

die AS-Datei MUSS genauso heißen, wie die klasse.
in deinem fall also dragMcClass.as !!!

hoffe, dass hilft dir nun weiter...

greetz

kelor

Geändert von kelor (23-02-2004 um 17:31 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 23-02-2004, 18:19   #9 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
hi, das klappt auch super.
auch wenn ich in der zwischenzeit mit der MX version zurechtgekommen bin, was mir positiverweise auch die externe AS datei ersparte. die hielt ich eh eher für einen komprosmiss.

ich möchte noch eben *deine leistung in allen ehren* anmerken, daß wenn ich eine scheibe auf das ziel ziehe und die selbe anschließend nochmal auf das ziel ziehe, daß sie dann nur noch an den anfangspunkt springt.
ist zwar auch logisch, da sie sich ja selbst den befehl gibt, sich als "besetzer" zu sehen, weshalb sie sich rauskickt und an die ursprungsposi geht, aber diesen kleinen "bug" halte ich für ziemlich irrelevant. ist ja auch sowieso ne recht irsinnige aktion, die scheibe 2x aufs ziel zu ziehen.

so, wie ich ja bereits sagte, bin ich dir sehr dankbar, du hast mir quasi den tag gerettet :-)

schönen abend noch!
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 23-02-2004, 18:25   #10 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
einfach folgende zeile in der 'dragMcClass' erweitern, dann klappt´s auch mit dem nachbarn:
ActionScript:
  1. // wenn plattenteller bereits belegt ist
  2. if(_root.besetzt != null ){
um folgendes erweitern:
ActionScript:
  1. if(_root.besetzt != null && _root.besetzt != this._name){





greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 23-02-2004, 19:11   #11 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
oah, yeah - so einfach kanns gehen *freu*

du schreibst in deiner signatur was von einem buch.
gibts irgendwo mehr infos dazu?
__________________
Design ist AUCH Geschmackssache.
Mr.Twister ist offline   Mit Zitat antworten
Alt 23-02-2004, 19:19   #12 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
mr.twister...

da haben sich leider beim kopieren und beim schnellen eintragen 2 fehler eingeschlichen...

1. es muss:

ActionScript:
  1. if(_root.besetzt != null || _root.besetzt != this._name){

heißen... also ein 'oder' anstelle eines 'und'


und

es muss die 'else'-bedingung MUSS natürlich so heißen:
ActionScript:
  1. }else{
  2.          //platte geht zurück
  3.          this._x = obj.arr_obj[this._name].x;
  4.          this._y = obj.arr_obj[this._name].y;
  5. }


also *.arr_obj und NICHT *.mc_obj


der gesamte code der 'dragMcClass' sieht also folgendermaßen aus:
ActionScript:
  1. class dragMcClass {
  2.  
  3.   var count:Number;
  4.   var mc_arr:Array;
  5.   var arr_obj:Array=[];
  6.  
  7.          // constructor
  8.          function dragMcClass(arr:Array){
  9.                   mc_arr=arr;
  10.                   count=mc_arr.length;
  11.                   setObjects();
  12.          }
  13.  
  14.          //methode zum setzen der der wertepaare und der mc-methoden
  15.          function setObjects(){
  16.  
  17.                   for (var i=1; i<=count; i++) {
  18.                        var mc = mc_arr[i-1];
  19.                        var k = mc._name;
  20.                        mc.watchObj = this;
  21.                        arr_obj[k] = {x:mc._x, y:mc._y};
  22.  
  23.                        //setzen der onEvents für die mc´s
  24.  
  25.                        mc.onPress=function(){
  26.                           this.startDrag();
  27.                           this.swapDepths(50);
  28.                        }
  29.                        mc.onRelease=function(){
  30.                           var obj = this.watchObj;
  31.                           this.stopDrag();
  32.                              //wenn platte über teller
  33.                           if(this.hitTest(this._parent.plattenspieler)){
  34.                              // wenn plattenteller bereits belegt ist
  35.                              if(_root.besetzt != null || _root.besetzt != this._name){
  36.                                 _root[_root.besetzt]._x=obj.arr_obj[_root.besetzt].x;
  37.                                 _root[_root.besetzt]._y=obj.arr_obj[_root.besetzt].y;
  38.                              }
  39.                              this._x = this._parent.plattenspieler._x +25;
  40.                              this._y = this._parent.plattenspieler._y +25;
  41.                              _root.besetzt = this._name;
  42.                           }else{
  43.                              //platte geht zurück
  44.                              this._x = obj.arr_obj[this._name].x;
  45.                              this._y = obj.arr_obj[this._name].y;
  46.                           }
  47.                             
  48.                       } // end of 'release'
  49.  
  50.                  } // end of 'for'
  51.         }// end of 'setObjects'
  52. }


sorry for that...war mein fehler


mein buch wird ende april erscheinen...


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 23-02-2004, 19:48   #13 (permalink)
ActionStripper
 
Benutzerbild von Mr.Twister
 
Registriert seit: Nov 2001
Ort: Oldenburg
Beiträge: 3.275
ahja, okay, alles klar.

dann warte ich mal bis ende april und gucke mal, was der kelor da so auf den buchmarkt gebracht hat :-)
__________________
Design ist AUCH Geschmackssache.
Mr.Twister 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 23:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele