Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-07-2005, 20:32   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 78
Bilder durch springen, wenn ich random verwende

Hi Leutz,
Habe folgendes Problem:
Vorweg: Müssen für die Schule die Siedler von Catan nachprogrammieren.

Möchte mir per attachMovie() einige MovieClips auf die Bühne ziehen.
Diese sollen per random() zufällig ausgewählt werden. Das klappt auch soweit!
Habe ihnen dann eine _x und _y Position zugeordnet. Damit sie schön sortiert auf der Bühne liegen.
Komischerweise klappt das ganze aber nur ein paar mal bei mir. Bei den anderen Malen, schiebt er immer ein Movieclip (oder mehrere) auf die Position 0.0.

Verstehe das einfach nicht, da ich doch feste Positionen zugeordnet habe!
Komme so einfach nicht weiter!
Wäre spitze, wenn ihr da mal kurz ein Auge drauf ewrfen könntet!

Habe euch die .fla mal http://home.edvsz.fh-osnabrueck.de/%...spielbrett.fla upgeloadet.
Kempi ist offline   Mit Zitat antworten
Alt 07-07-2005, 20:56   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
So ists besser...
PHP-Code:
    for (var 1<= 3i++)
    {
        var 
zufall Math.round(1+(Math.random()*4));
        var 
land attachMovie("land"+zufall+"_mc""land"+zufall+"_mc"i+10);
        
land._y 162.7;        
        
land._x 365+(97*i);
    } 
__________________
ERROR: Signature is too large

Geändert von rendner[i] (07-07-2005 um 20:59 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 08-07-2005, 09:22   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 78
OK, klappt! Besten Dank für die echt prompte Antwort.

Jetzt habe ich allerdings noch ein Problem:
Und zwar dürfen von jedem Movieclip nur eine bestimmte Anzahl auf der Bühne erscheinen. Sprich von MovieClip 1 dürfen max. 4 Instanzen erscheinen, danach nicht mehr oder von MovieClip 2 max. 3 Instanzen.
Dies soll realisiert werden, um eine ausgewogenere Verteilung der einzelnen Instanzen zu gewährleisten.

Habe momentan keine richtig gute Idee, um das umzusetzen. Evtl. Matrizen & globale Variablen?!?!

Bitte schau da doch mal kurz einer nach!

Hier die aktualisierte .fla
Kempi ist offline   Mit Zitat antworten
Alt 08-07-2005, 11:49   #4 (permalink)
Co&Bold
 
Benutzerbild von Cysign
 
Registriert seit: Nov 2004
Ort: Troisdorf (bei Köln)
Beiträge: 170
kann man nicht ein array per zufall sortieren lassen?
dann könnte man die gewünschte anzahl an ländern einfach in ein array schreiben, das dann auslesen und danach das spielfeld aufbauen
__________________
Friede!
Cysign ist offline   Mit Zitat antworten
Alt 08-07-2005, 22:54   #5 (permalink)
Neuer User
 
Benutzerbild von dnex5
 
Registriert seit: May 2003
Ort: Österreich
Beiträge: 90
Ich habe vor kurzem auch über einer Array-Zufalls-Sortier-Funktion gegrübelt (bei meinem Remember (Memory) Spiel) - hier ist mein Ansatz:

Im Prinzip funktioniert das so: ich nehme aus einem Array immer ein zufälliges Element heraus und schreibe dieses in ein neues Array. Danach lösche ich das eben eingefügte Element aus dem ursprünglichen Array (mit Array.splice).

ActionScript:
  1. allePaare = 12;
  2. zufallsKartenErmitteln = function () {
  3.     // ich benötige jetzt ein array in dem zufällig zB 6 kartenpaare eingefügt
  4.     // werden. in meinem kartenmovieclip habe zB 19 verschiedene karten,
  5.     // und ich benötige jetzt daraus zufällig 6 pärchen
  6.     zufallsKarten = new Array(allePaare);
  7.     for (i=0; i<paare; i++) {
  8.         var zufallszahl = random(alleKarten.length);
  9.         // eine karte muss in einem array 2 mal vorhanden sein, damit ich
  10.         // ein kartenpärchen habe
  11.         // hier füge ich die erste karte ein
  12.         zufallsKarten[i] = alleKarten[zufallszahl];
  13.         // und die zweite karte füge ich "hinten weiter" im array ein
  14.         // damit ich meine karten doppelt habe
  15.         zufallsKarten[i+paare] = zufallsKarten[i];
  16.         // damit ich ein pärchen nicht zweimal habe - sprich ich hätte
  17.         // 4 gleiche karten - schneide ich die eben eingefügte karte
  18.         // aus dem array aus, wo alle karten gespeichert sind
  19.         alleKarten.splice(zufallszahl, 1);
  20.     }
  21. };
  22. zufallsKartenErmitteln();
  23. kartenMischen = function () {
  24.     gemischteKarten = new Array(allePaare);
  25.     // jetzt muss ich meine karten durchmischen!
  26.     // sonst würden alle karten nebeneinander liegen!
  27.     for (i=0; i<gemischteKarten.length; i++) {
  28.         // ich ermittle solange eine zufällige zahl
  29.         // und füge diese karte in mein array ein,
  30.         // bis das ursprüngliche array leer ist!
  31.         var zufallszahl = random(zufallsKarten.length);
  32.         // ich ermittle eine zufällige zahl und füge diese karte
  33.         // in mein array gemischteKarten ein
  34.         gemischteKarten[i] = zufallsKarten[zufallszahl];
  35.         // jetzt schneide ich die eben eingefügte karte aus
  36.         // dem ursprünglichen array mit den kartenpärchen für
  37.         // das aktuelle spiel aus
  38.         zufallsKarten.splice(zufallszahl, 1);
  39.     }
  40. };
  41. kartenMischen();
__________________
Was denkbar ist, ist programmierbar!
Flash.Nepraunig.com
dnex5 ist offline   Mit Zitat antworten
Alt 10-07-2005, 11:45   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Habe da ne extra Funktion geschrieben, die Dir die MC#s attached und die erschienenen Teile um 1 runterzählt.
PHP-Code:
var depth 2;

function 
attachLandxy){
    var 
zufall Math.round(1+(Math.random()*4));
    var 
str "land" zufall "_mc";
    if( 
_globalstr ] > )
    {
        
_globalstr ]--;
        
trace_globalstr ] +"  " str);
        var 
land attachMoviestrstr depthdepth++);
        
land._y x;        
        
land._x y;
        return 
true;
    }
    else return 
false;

Somit sähe Deine for-Schleife für die 1te Reihe so aus.
PHP-Code:
// Reihe 1
    
for (var 1<= 3i++)
    {
        if( ! 
attachLand162.7365+(97*i)) ) i--;
    } 
Du solltest nur darauf achten das auch so viel Teile zu attachen sind wie Deine for-Schleifen verlangen ( wenn man Deine _global.land... addiert muss die gleiche Zahl rauskommen wie wenn man die maxWerte Deiner for-Schleifen addiert ), ansonsten hängt Flash in einer "endlosschleife".
Weil wenn Du in Deiner letzten for-Schliefe noch ein Teil attachen willst und alle gloabal.land gleich 0 sind kann er ja nix mehr attachen und die for-Schleife würde theoretisch nie abbrechen weil ja i dann immer um 1 verringert werden würde.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 11-07-2005, 15:03   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 78
Sauber! Besten Dank an alle, die mir Tipps haben zukommen lassen!
Habe jetzt die Funktion von rendner[i] benutzt. Auch Danke an dnex5 für deine Funtion. Die vom rendner sah mir allerdings ein bissl einfacher & vor allem auch kürzer aus
Läuft 100%ig!

Vielen Dank nochmal!
Kempi
Kempi 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 18:23 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele