Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-11-2006, 14:45   #1 (permalink)
Flash-Fan
 
Benutzerbild von Hoscakal
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 139
Math.random() soll nicht nacheinander selbe Zahl Generieren !

Hallo !

Wie kann ich das verhindern ??

Danke !
Hoscakal ist offline   Mit Zitat antworten
Alt 17-11-2006, 14:51   #2 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
ActionScript:
  1. var a=Math.random();
  2. var b=Math.random(a);
  3. var c=Math.random(b);
  4. trace(a+","+b+","+c);
gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 17-11-2006, 14:55   #3 (permalink)
Flash-Fan
 
Benutzerbild von Hoscakal
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 139
mit drei verschiedenen Variblen ist mir schon klar, Ich möchte das aber nur mit einer variable erledigen
Hoscakal ist offline   Mit Zitat antworten
Alt 17-11-2006, 14:58   #4 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
ne, es geht nicht um verschiedene variablen denn:
ActionScript:
  1. var a=Math.random();//1.1
  2. var b=Math.random();//1.1 gleiches ergebnis
  3. var c=Math.random();//1.1 gleiches ergebnis
  4.  
es ging mehr darum, dass du der random methode immer nen anderen parameter übergibst. dieser andere parameter ist z.b der vorheringe wert des random ergebnisses.
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:11   #5 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
schreib die zahl in ein array und überprüfe zuvor ob sie schon da drin steht.

PHP-Code:

rand_arr 
= new Array();
for(
i=0;i<250;i++){
    
Math.random();
    
fillarr(arand_arr);
}

function 
fillarr(a,arr){
var 
exist false;
for(var 
i=0;i<arr.length;i++){
    if(
arr[i]==a)exist true;
}
if(!
exist)arr.push(a);

__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:11   #6 (permalink)
Flash-Fan
 
Benutzerbild von Hoscakal
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 139
PHP-Code:
        function Effeckt()
    {
        var 
Zufall:Number Math.random()*2+1;
        var 
Zufall:Number Math.round(Zufall);
        if (
Zufall == 1) {
            
container_mc.loadMovie("efeckt.swf");
        }
        if (
Zufall == 2) {
            
container_mc.loadMovie("efeckt2.swf");
        }
        if (
Zufall == 3) {
            
container_mc.loadMovie("efeckt2c.swf");
        }
        
trace(Zufall)
    } 
Wie würdest du hier das umsezten ?
Hoscakal ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:19   #7 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
PHP-Code:
arr = new Array("efeckt.swf","efeckt2.swf","efeckt2c.swf");
mc_toLoad arr[random(arr.length)];
container_mc.loadMovie(mc_toLoad ); 
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:23   #8 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
ActionScript:
  1. var cnt=1;
  2. function Effeckt() {
  3.     var arrTemp:Array=["efeckt.swf","efeckt2.swf","efeckt2c.swf"];
  4.     var nRnd:Number=Math.round(Math.random(cnt++)*(arrTemp.length-1));
  5.     container_mc.loadMovie(arrTemp[nRnd]);
  6.     trace(nRnd);
  7. }
  8.  
  9. Effeckt();
  10. Effeckt();
  11. Effeckt();
wenn du allerdings verhindern willst, dass der geladene mc beim erneuten aufruf nochmal (zufällig) geladen wird, mach das so:
ActionScript:
  1. var arrTemp:Array=["efeckt.swf","efeckt2.swf","efeckt2c.swf"];
  2. function Effeckt() {
  3.     var nRnd:Number=Math.round(Math.random(cnt++)*(arrTemp.length-1));
  4.              var strName:String=arrTemp[nRnd];
  5.              del(arrTemp,strName);
  6.     container_mc.loadMovie(strName);
  7.     trace(nRnd);
  8. }
  9. function getPos(arr:Array,element):Number
  10.     {
  11.         for(var nI in arr)
  12.             if(arr[nI]==element)
  13.                 return Number(nI);
  14.         return -1;   
  15.     }
  16. function del(arr:Array,element):Array
  17.     {
  18.         arr.splice(getPos(arr,element),1);
  19.         return arr;
  20.     }
die 2 unteren funktionen sind übirgens aus meinen utils. und sollten eigendlich statische funktionen sein

gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!

Geändert von artjom (17-11-2006 um 15:34 Uhr)
artjom ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:29   #9 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Ok vorneweg meine Klugschei*erei:
Es heißt Effekt und wenn du immer erst alle Werte einmal haben willst,
dann ist es eigentlich auch kein Zufallswert mehr, vielmehr eine
zufällige Reihenfolge.

Würde es wohl so in dem Dreh machen:
ActionScript:
  1. var a = [1, 2, 3];
  2.  
  3. initShuffle();
  4. for (var i=0; i<100; i++)
  5. {
  6.     trace(getShuffledValue());
  7. }
  8. //
  9. //
  10. var counter;
  11. function initShuffle()
  12. {
  13.     trace("//");
  14.     var shuffle = function()
  15.     {
  16.         return random(2);
  17.     }
  18.     counter = 0;
  19.     a.sort(shuffle);
  20. }
  21. function getShuffledValue()
  22. {
  23.     if(counter>=a.length) initShuffle();
  24.     counter++;
  25.     return a[counter-1];
  26. }

Geändert von sebastian (17-11-2006 um 15:31 Uhr)
sebastian ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:34   #10 (permalink)
Flash-Fan
 
Benutzerbild von Hoscakal
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 139
@ mooseMash

das mit array sehr gute idee aber ich habe immer noch das selbe Üroblem
weil :
mc_toLoad = arr[random(arr.length)]; hier werden ja auch efeckte zufällig geladen !

Ich werde jetzt die anrede Beispiele hier ausprobieren !

Ich Danke euch ALLEN für schnelle Antworten !
Hoscakal ist offline   Mit Zitat antworten
Alt 17-11-2006, 15:40   #11 (permalink)
Flash-Fan
 
Benutzerbild von Hoscakal
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 139
@ artjom

Dein beispiel functioniert ! danke !

ABERRRR

ich habe im galeri 10 bilder, und es werden nur ersten 3 Bilder mit effekt versehen, bei den anderen funktionieren nicht ? Was nun ?

DANKE ! DANKE
Hoscakal ist offline   Mit Zitat antworten
Alt 17-11-2006, 16:10   #12 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
du hast nicht geschrieben, wie der effekt angewant werden soll. mehr details wären hilfreicher.

aber die einfachste lösung (impementiert alle möglichen anwendungen des scripts) ist es einfach das array zu erweitern:
ActionScript:
  1. var arrTemp:Array=["efeckt.swf","efeckt.swf","efeckt.swf",
  2. "efeckt2.swf","efeckt2.swf","efeckt2.swf",
  3. "efeckt2c.swf","efeckt2c.swf","efeckt2c.swf","efeckt2c.swf"];

.. wer meint das sieht wie quick & dirty aus, der hat recht

gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!

Geändert von artjom (17-11-2006 um 16:12 Uhr)
artjom 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:50 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele