Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-02-2004, 09:17   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Ort: Nds (H/BS)
Beiträge: 4
hitTest und drei Zustände

G-Mo an das Forum.

Ich hab da ein Problem...
(nein, nicht zu kurze Arme;-)

Ich habe 'n' Spielsteine und die gleiche Anz. Felder.
Jetzt möchte ich sicher gehen, das ein bestimmter Spielstein nur auf einem bestimmten Feld landet und dies dem Anwender farblich mitteilen (s. Code unten - MX).

Wie bekomme ich das Feld wieder grau, wenn der drüber gezogene Stein rausgezogen wird?
Alle z.Vfg. stehenden (on) Ergeinisse funktionieren nicht richtig.
Mit einem Button als Feld kam ich auch nicht weiter.
Hat jemensch von Euch evtl. eine Lösung?
Danke schon mal.

3 MCs (2 Kreise und 1 Rechteck)
k1 + k2:
ActionScript:
  1. on(press) {
  2.     startDrag(this);
  3. }
  4. on(release) {
  5.     stopDrag();
  6. }
f1:
ActionScript:
  1. onClipEvent(enterFrame){
  2.  
  3. //Schleifenabfrage aller Steine
  4.     for(u=1;u<3;u++) {
  5.  
  6.             if(this.hitTest("_root.k"+u)) {
  7. trace("Gehalten wird (k)  "+u);
  8.                 mov=this._name;
  9.  
  10.                 hier=_name.substring(mov.length-1,mov.length);
  11. trace("Fläche-Abfrage ist "+hier);       
  12.                 if(hier==u){
  13.                     farbe=new Color(this);
  14.                     farbe.setRGB(0x33FF33);
  15.                 } else {
  16.                     if(hier<>u){
  17.                         farbe=new Color(this);
  18.                         farbe.setRGB(0xFF3333);
  19.                     } else {
  20.                         farbe=new Color(this);
  21.                         farbe.setRGB(0x333333);
  22.                        
  23.                     }//eo if(hier<>
  24.                                
  25.                 }// eo if(hier==
  26. trace("_____________________");
  27.             }// eo if(this.hit
  28.  
  29.         }// eo for(u
  30.                       
  31. //  }// eo if(Position
  32.  
  33. }// eo onClipEvent(
  34.  
  35. // Nur mit der Maus drüber, dann wirds grau!
  36. on(rollOut){
  37.     farbe=new Color(this);
  38.     farbe.setRGB(0x333333);
  39. }


Oops, sehe grad, das einige Zeilen 'tot' sind bzw. überflüssig ;-)
__________________
Das Leben ist eine Krankheit!
Beim Geschlechtsverkehr übertragen endet sie immer tödlich!
Eine ist offline   Mit Zitat antworten
Alt 18-02-2004, 09:29   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
tach eine,

du müsstest deine if-Abfragen anders schachteln. Das Feld soll ja wieder grau werden, wenn der hittest nicht mehr true zurückgibt:
ActionScript:
  1. if(this.hitTest("_root.k"+u)) {
  2.                         trace("Gehalten wird (k)  "+u);
  3.                         mov=this._name;
  4.                        
  5.                         hier=_name.substring(mov.length-1,mov.length);
  6.                         trace("Fläche-Abfrage ist "+hier);
  7.                         if(hier==u){
  8.                                 farbe=new Color(this);
  9.                                 farbe.setRGB(0x33FF33);
  10.                         } else {
  11.                                         farbe=new Color(this);
  12.                                         farbe.setRGB(0xFF3333);
  13.                          }
  14.                         }else{
  15.                 farbe=new Color(this);
  16.                                         farbe.setRGB(0x333333);
  17.                                        
  18.                                 }
gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 18-02-2004, 10:58   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Ort: Nds (H/BS)
Beiträge: 4
Oh yo, danke ;-)

Aber jetzt gehts mit Kreis 1 (grün) net, obwohl ein Trace in dem Zweig abgearbeitet wird. Auch ein anderer 'Farbname' hilft net.
Hab grad probiert, den hitTest in die Kreise zu setzen.
Funzt auch net recht.
Mh, mh.
Werd auf jeden weiter probieren.

Vielenb Dank für die (eigentlich logische;-) Hilfe.
Eine
__________________
Das Leben ist eine Krankheit!
Beim Geschlechtsverkehr übertragen endet sie immer tödlich!

Geändert von Eine (18-02-2004 um 11:31 Uhr)
Eine ist offline   Mit Zitat antworten
Alt 18-02-2004, 12:22   #4 (permalink)
Neuer User
 
Registriert seit: Mar 2002
Ort: D'dorf
Beiträge: 765
jepp, das stimmt natürlich, weil die for-Schleife immer komplett durchgelaufen wird.
Ein einfacher Weg das zu lösen, ist die for-Schleife direkt mit "break" zu verlassen, wenn der Kreis über der richtigen Fläche ist:
ActionScript:
  1. onClipEvent(enterFrame){
  2.        
  3.         //Schleifenabfrage aller Steine
  4.         for(u=1;u<3;u++) {
  5.                
  6.                 if(this.hitTest("_root.k"+u)) {
  7.                         trace("Gehalten wird (k)  "+u);
  8.                         mov=this._name;
  9.                        
  10.                         hier=_name.substring(mov.length-1,mov.length);
  11.                         trace("Fläche-Abfrage ist "+hier);
  12. if(this.hitTest("_root.k"+u)) {
  13.         trace("Gehalten wird (k)  "+u);
  14.         mov=this._name;
  15.        
  16.         hier=_name.substring(mov.length-1,mov.length);
  17.         trace("Fläche-Abfrage ist "+hier);
  18.         if(hier==u){
  19.                 farbe=new Color(this);
  20.                 farbe.setRGB(0x33FF33);
  21. break; // <-- bricht die for-Schleife ab
  22.         } else {
  23.                 farbe=new Color(this);
  24.                 farbe.setRGB(0xFF3333);
  25.         }
  26. }else{
  27.         farbe=new Color(this);
  28.         farbe.setRGB(0x333333);   
  29. }
  30. }
  31. }
  32. }
Allerdings würd ich mir noch mal überlegen, ob du das Problem nicht anders lösen kannst.
Ich stell mir gerade vor, du hast 100 Flächen und 100 Kreise. D.h. onEnterFrame wird in jedem Frame 100 mal abgearbeitet. Das wird die Performance wohl ziemlich in die Knie zwingen.

gruß,
roman
romän ist offline   Mit Zitat antworten
Alt 18-02-2004, 13:21   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Ort: Nds (H/BS)
Beiträge: 4
Aaah,
jetzt - ja!

Sind derzeit zum Glück nur max. 10 Felder.
Aber bei Erweiterung(en) richtig.
Mal gucken, ein function().Aufruf besser wär.

Nochmal danke und weiterhin einen sonnigen Tag
Grüße
__________________
Das Leben ist eine Krankheit!
Beim Geschlechtsverkehr übertragen endet sie immer tödlich!
Eine 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 16:26 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele