Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-04-2005, 22:03   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
Mal wieder eine Zufallsfrage...

Hi!
Ich habe folgendes Problem:
Ich habe 11x6 Felder (bzw. 66 x/y-Koordinaten-Paare). Von diesen 66 Koordinaten möchte ich per Zufall z.B. 7 auswählen und an diese 7 Positionen jeweils ein Movieclip dynamisch laden (also mit createEmptyMovieClip("container_mc", i) und dann loadMovie("name.swf") usw.)

Mein (hoffentlich logisch) gedachter Lösungsweg ist, dass sich meine Koordinatenpäarchen aus der Kombination von 11 Werten für x und 6 Werten für y zusammensetzen (66 Möglichkeiten). Also packe ich die x Koordinaten in ein Array, mit den y Koordinaten mache ich das gleiche. Dann hole ich mir per Zufall eine x und eine y Koordinate und erstelle mein Movieclip an den erhaltenen Koordinaten.

Wo ich jetzt einfach nicht weiterkomme ist der Vergleich der Koordinatenpaare - es soll ja kein Paar zweimal vergeben werden.

Ist mein Ansatz überhaupt richtig, geht es einfacher und besser. Kann mir jemand bitte helfen?!
joba ist offline   Mit Zitat antworten
Alt 14-04-2005, 22:14   #2 (permalink)
robo kalkühl
Gast
 
Beiträge: n/a
ein versuch währe es, zur laufzeit in die "vergebenen" arrayporitionen eine feste zahl zu schreiben, die sonst nicht vorkommt (zb 0), und dann immer vergleichen, ob an der stelle, die zufällig ausgesucht wurde eben diese zahl steht, und wenn ja, dann nochmal mit ner neuen zufallzahl versuchen.
geht bestimmt auch effizienter, aber was solls...
  Mit Zitat antworten
Alt 14-04-2005, 22:51   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
Hallo robo kalkühl!

Ich verstehe nicht so ganz was Du meinst.

Inzwischen habe ich mal angefangen, ein Script zu schreiben. Es scheint alles so zu funktionieren, wie ich es haben möchte, bis auf die Überprüfung, dass sich die Paare nicht doppeln dürfen.
Vielleicht könnt Ihr daran ein wenig weiterbasteln und mir helfen.

ActionScript:
  1. //Code liegt im 1. Frame
  2.  
  3. xPosGesamt = new Array();
  4. //alle möglichen x-Koordinaten
  5. xPosGesamt[0] = 10;
  6. xPosGesamt[1] = 20;
  7. xPosGesamt[2] = 30;
  8. xPosGesamt[3] = 40
  9. xPosGesamt[4] = 50;
  10. xPosGesamt[5] = 60;
  11. xPosGesamt[6] = 70;
  12. xPosGesamt[7] = 80;
  13. xPosGesamt[8] = 90;
  14. xPosGesamt[9] = 100;
  15. xPosGesamt[10] = 110
  16. xPosGesamt[11] = 120;
  17.  
  18. xPosAuswahl = new Array();
  19. // hier kommt die Auswahl der x-Koordinaten rein
  20.  
  21. yPosGesamt = new Array();
  22. //alle möglichen y-Koordinaten
  23. yPosGesamt[0] = 10;
  24. yPosGesamt[1] = 20;
  25. yPosGesamt[2] = 30;
  26. yPosGesamt[3] = 40;
  27. yPosGesamt[4] = 50;
  28. yPosGesamt[5] = 60;
  29.  
  30. // hier kommt die Auswahl der y-Koordinaten rein
  31. yPosAuswahl = new Array();
  32.  
  33.  
  34. // 7 x-Koordinaten auswählen
  35. for (i=0; i<=6; i++) {
  36.     zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  37.     xPosAuswahl.push(xPosGesamt[zufall_x]);
  38. }
  39.  
  40. // 7 y-Koordinaten auswählen
  41. for (i=0; i<=6; i++) {
  42.     zufall_y = Math.floor(Math.random() * yPosGesamt.length);
  43.     yPosAuswahl.push(yPosGesamt[zufall_y]);
  44. }
  45.  
  46. trace(xPosAuswahl);
  47. trace(yPosAuswahl);
  48.  
  49. // Lade MovieClip1
  50. this.createEmptyMovieClip("container1_mc", 1);
  51. container1_mc._x = xPosAuswahl[0];
  52. container1_mc._y = yPosAuswahl[0];
  53. container1_mc.loadMovie("MovieClip1.swf");
  54.  
  55. // Lade MovieClip2
  56. this.createEmptyMovieClip("container2_mc", 2);
  57. container2_mc._x = xPosAuswahl[1];
  58. container2_mc._y = yPosAuswahl[1];
  59. container2_mc.loadMovie("MovieClip2.swf");
  60.  
  61. // Lade MovieClip3
  62. this.createEmptyMovieClip("container3_mc", 3);
  63. container3_mc._x = xPosAuswahl[2];
  64. container3_mc._y = yPosAuswahl[2];
  65. container3_mc.loadMovie("MovieClip3.swf");
  66.  
  67. // Lade MovieClip4
  68. this.createEmptyMovieClip("container4_mc", 4);
  69. container4_mc._x = xPosAuswahl[3];
  70. container4_mc._y = yPosAuswahl[3];
  71. container4_mc.loadMovie("MovieClip4.swf");
  72.  
  73. // Lade MovieClip5
  74. this.createEmptyMovieClip("container5_mc", 5);
  75. container5_mc._x = xPosAuswahl[4];
  76. container5_mc._y = yPosAuswahl[4];
  77. container5_mc.loadMovie("MovieClip5.swf");
  78.  
  79. // Lade MovieClip6
  80. this.createEmptyMovieClip("container6_mc", 6);
  81. container6_mc._x = xPosAuswahl[5];
  82. container6_mc._y = yPosAuswahl[5];
  83. container6_mc.loadMovie("MovieClip6.swf");
  84.  
  85. // Lade MovieClip7
  86. this.createEmptyMovieClip("container7_mc", 7);
  87. container7_mc._x = xPosAuswahl[6];
  88. container7_mc._y = yPosAuswahl[6];
  89. container7_mc.loadMovie("MovieClip7.swf");

Geändert von joba (14-04-2005 um 23:39 Uhr)
joba ist offline   Mit Zitat antworten
Alt 14-04-2005, 23:13   #4 (permalink)
robo kalkühl
Gast
 
Beiträge: n/a
ActionScript:
  1. for (i=0; i<=6; i++) {
  2.        do {
  3.         zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  4.       } while (zufall_x ==0);
  5.         xPosAuswahl.push(xPosGesamt[zufall_x]);
  6.         xPosGesamt[zufall_x] = 0;
  7. }

steht an der stelle in dem array eine null, sucht er sich die nächste zufallszahl, so lange bis er einen eintrag findet, wo keine null steht, liest diesen aus, und setzt die position in dem array auf null.
sollte eigentlich klappen, habs aber nicht getestet...
  Mit Zitat antworten
Alt 14-04-2005, 23:33   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
Habe Dein Script bei mir eingesetzt und ausprobiert. Funktioniert leider nicht. Und zwar wird als 7. Wert immer eine Null ausgeben und je nach Zufall auch öfters an den übrigen Positionen im Array.

Abgesehen davon werden nicht die Paare verglichen, sondern nur die x- bzw. y-Koordinaten untereinander.

Z.B. kann xPosAuswahl[1]=100 und xPosAuswahl[2]=100 sein, wenn yPosAuswahl[1]=30 und yPosAuswahl[2]=20 ist (Paar1 != Paar2).

Das scheint mir also, nicht der richtige Weg zu sein.
joba ist offline   Mit Zitat antworten
Alt 22-04-2005, 19:00   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
geschafft - denke ich

hi! leider hat sich keiner mehr von euch meinem problem erbarmt. derweil habe ich mich mit vielen umwegen selbst drum gekümmert. ich denke, ich habe das problem gelöst.
das möchte ich euch nicht vorenthalten.vielleicht hilft es dem einen oder anderen von euch weiter. für code-verbesserungen oder aufdeckungen von fehlern bin ich dankbar...

ActionScript:
  1. //Code liegt im 1. Frame
  2.  
  3. xPosGesamt = new Array();
  4. //alle möglichen x-Koordinaten
  5. xPosGesamt[0] = 10;
  6. xPosGesamt[1] = 20;
  7. xPosGesamt[2] = 30;
  8. xPosGesamt[3] = 40
  9. xPosGesamt[4] = 50;
  10. xPosGesamt[5] = 60;
  11. xPosGesamt[6] = 70;
  12. xPosGesamt[7] = 80;
  13. xPosGesamt[8] = 90;
  14. xPosGesamt[9] = 100;
  15. xPosGesamt[10] = 110
  16. xPosGesamt[11] = 120;
  17.  
  18. xPosAuswahl = new Array();
  19. // hier kommt die Auswahl der x-Koordinaten rein
  20.  
  21. yPosGesamt = new Array();
  22. //alle möglichen y-Koordinaten
  23. yPosGesamt[0] = 10;
  24. yPosGesamt[1] = 20;
  25. yPosGesamt[2] = 30;
  26. yPosGesamt[3] = 40;
  27. yPosGesamt[4] = 50;
  28. yPosGesamt[5] = 60;
  29.  
  30. // hier kommt die Auswahl der y-Koordinaten rein
  31. yPosAuswahl = new Array();
  32.  
  33.  
  34. // Zufallsauswahl der Koordinatenpaare
  35. for (i=0; i<7; i++) {
  36.     zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  37.     zufall_y = Math.floor(Math.random() * yPosGesamt.length);
  38.  
  39. //Überprüfung, ob das Koordinatenpaar schon im Array existiert.
  40. //Wenn true, dann Koordinatenpaar nochmal auswählen und nochmal überprüfen.
  41.  
  42.     for (a=0; a<=xPosAuswahl.length; a++) {
  43.         do {
  44.         zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  45.         zufall_y = Math.floor(Math.random() * yPosGesamt.length);
  46.         } while ((xPosGesamt[zufall_x] == xPosAuswahl[a]) && (yPosGesamt[zufall_y] == yPosAuswahl[a]));
  47.         }
  48. //Wenn false, dann füll das Array mit den neuen Koordinaten
  49.  
  50.     xPosAuswahl.push(xPosGesamt[zufall_x]);
  51.     yPosAuswahl.push(yPosGesamt[zufall_y]);
  52.     }
joba ist offline   Mit Zitat antworten
Alt 22-04-2005, 19:24   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
zu früh gefreut...

schade, leider kommt doch das eine oder andere mal eine doppelung vor.
irgendwo ist da ein fehler drin, den ich nicht sehe.
kann mir wirklich keiner helfen?!
joba ist offline   Mit Zitat antworten
Alt 27-04-2005, 10:33   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 12
jetzt hab ich's

habe meinen kleinen fehler entdeckt...
hier nun der richtige code:

ActionScript:
  1. //Code liegt im 1. Frame
  2.  
  3. xPosGesamt = new Array();
  4. //alle möglichen x-Koordinaten
  5. xPosGesamt[0] = 10;
  6. xPosGesamt[1] = 20;
  7. xPosGesamt[2] = 30;
  8. xPosGesamt[3] = 40
  9. xPosGesamt[4] = 50;
  10. xPosGesamt[5] = 60;
  11. xPosGesamt[6] = 70;
  12. xPosGesamt[7] = 80;
  13. xPosGesamt[8] = 90;
  14. xPosGesamt[9] = 100;
  15. xPosGesamt[10] = 110
  16. xPosGesamt[11] = 120;
  17.  
  18. xPosAuswahl = new Array("1");
  19. // hier kommt die Auswahl der x-Koordinaten rein
  20. // "1" an Position 1, damit später bei der Überprüfung keine Endlosschleife entsteht
  21.  
  22. yPosGesamt = new Array();
  23. //alle möglichen y-Koordinaten
  24. yPosGesamt[0] = 10;
  25. yPosGesamt[1] = 20;
  26. yPosGesamt[2] = 30;
  27. yPosGesamt[3] = 40;
  28. yPosGesamt[4] = 50;
  29. yPosGesamt[5] = 60;
  30.  
  31. yPosAuswahl = new Array("1");
  32. // hier kommt die Auswahl der y-Koordinaten rein
  33. // "1" an Position 1, damit später bei der Überprüfung keine Endlosschleife entsteht
  34.  
  35. n_mc = 7;
  36. // Anzahl der zu ladenen mc's
  37.  
  38. // Zufallsauswahl der Koordinatenpaare
  39. for (i=0; i<=n_mc; i++) {
  40.         zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  41.         zufall_y = Math.floor(Math.random() * yPosGesamt.length);
  42.        
  43. //Überprüfung, ob das Koordinatenpaar schon im Array existiert.
  44.         for (a=0; a<=xPosAuswahl.length; a++) {
  45.                while ((xPosGesamt[zufall_x] == xPosAuswahl[a]) && (yPosGesamt[zufall_y] == yPosAuswahl[a])) {
  46.  zufall_x = Math.floor(Math.random() * xPosGesamt.length);
  47.                         zufall_y = Math.floor(Math.random() * yPosGesamt.length);
  48.         }
  49. }
  50.         //Wenn false, dann füll das Array mit den neuen Koordinaten
  51.         xPosAuswahl.push(xPosGesamt[zufall_x]);
  52.         yPosAuswahl.push(yPosGesamt[zufall_y]);
  53. }

ciao.
joba 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 19:39 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele