Zufallszahlen...

SonMiko

Erfahrenes Mitglied
Hi...

Derzeit interessiere ich mich für diese erst schnellen dann immer langsamer werdenden Bewegungsabläufe in Flash... Am Anfang hielt ich das für schwer und wollte da mit meinen (sehr rudimentären) Trigonometrie-Kenntnissen Abhilfe verschaffen, aber im Prinzip
gehen einfache Divisionen - denn je kleiner die Zahl wird desto geringer die Bewegung, geht also quasi wie von selbst.

Jetzt hab ich hier etwas nettes gebastelt, aber irgendwie sind die Zufallszahlen echt doof.
Das zu animierende Objekt trudelt in die linke obere Hälfte und bleibt dann dort in dem Bereich - die Bewegungen stimmen zwar, aber es denkt garnicht daran auch mal vielleicht nach rechts unten zu gleiten...
Wird am "random(...)" liegen, den man ja mit floor oder so ersetzen soll...
Kann mir da jemand abhilfe verschaffen?

Würd nur wollen das das Teil auch mal weiter nach unten rechts gleitet...

Hier der Code
Code:
function bewegung(){
	this._x+=(neux-this._x)/5;
	this._y+=(neuy-this._y)/5;
	this._xscale+=(neuxs-this._xscale)/5;
	this._yscale+=(neuys-this._yscale)/5;
}
function zufallx(){
	var zufx = random(_root._xscale); 
	neux = zufx;
}
function zufally(){
	var zufy = random(_root._yscale); 
	neuy = zufy;
}
function zufallxs(){
	var zufxs = random(_root._xscale); 
	neuxs = zufxs;
}
function zufallys(){
	var zufys = random(_root._yscale); 
	neuys = zufys;
}
setInterval(zufallx,1000);
setInterval(zufally,1000);
setInterval(zufallxs,500);
setInterval(zufallys,500);

test_mc.onEnterFrame=bewegung;
function xyausgabe(){
	trace(test_mc._x +" "+ test_mc._y);
}
setInterval(xyausgabe,1000);

Jetzt noch das Tracing, zeitgleich mit ausführung der function Bewegung... Erst der X-Wert mit Komma und dann der Y-Wert ebenfalls mit Komma...
Code:
-213.3 96.7
30.9 70.8
4.8 8.45
19.8 40.55
20.8 92.1
92.6 58.4
70.5 96.1
7.55 40.05
84.2 25.95
44.8 57.6
84.95 71.8
9.45 7.65
38.75 46.1
23.05 49.65
76.95 53.6
49 36.2
84.3 87.15
10.35 86
78.85 61.7

Besten Gruß...

Mike
 
Hm also "Math.random()" hilft alleine nicht,
Der Wert ist dann 0 <= n < 1, da komme ich nicht auf die Breite der Bühne oder der Höhe der Bühne... Da muss noch ein Faktor hin nur welcher?
 
Hi,

Mit
var zufx = random(_root._xscale);
bekommst Du bestenfalls eine Zahl zwischen 0 und 100, da die Hauptzeitleiste (_root) nicht skaliert sein wird. Wenn du die Breite der Bühne abfragen willst, verwende Stage.width:
Code:
var zufx = Math.random * (Stage.width);

Gruß
.
 
Na und ob ;-)...

Code:
function bewegung(){
	this._x+=(neux-this._x)/5;
	this._y+=(neuy-this._y)/5;
	this._xscale+=(neuxs-this._xscale)/5;
	this._yscale+=(neuys-this._yscale)/5;
}
function zufallx(){
	var zufx = Math.random(_root._xscale)*_xscale*5;  
	neux = zufx;
}
function zufally(){
	var zufy = Math.random(_root._yscale)*_yscale*5; 
	neuy = zufy;
}
function zufallxs(){
	var zufxs = Math.random(_root._xscale)*_xscale*5; 
	neuxs = zufxs;
}
function zufallys(){
	var zufys = Math.random(_root._yscale)*_xscale*5; 
	neuys = zufys;
}
setInterval(zufallx,1000);
setInterval(zufally,1000);
setInterval(zufallxs,1000);
setInterval(zufallys,1000);

test_mc.onEnterFrame=bewegung;
function xyausgabe(){
	trace(test_mc._x +" "+ test_mc._y);
}
setInterval(xyausgabe,1000);

Besten Gruß...
 
naja aber dies klappt ja nicht irgendwie :-/
so bewegt es sich... aber eben nicht korrekt...

//EDIT 1

Hallo zusammen,
also das Problem ist IMMER noch nicht gelöst...
Das Objekt (in diesem Fall ein Würfel) bewegt sich
nicht über die Bühne sondern immer nur oben in der kleinen Ecke -
dabei fällt mir auf das die X und Y Koordinaten niemals die Höhe und Breite
des Objektes überschreiten... das ist Interessant...
Also der Würfel ist eine Fläche und das Objekt (also der MC) Würfel,
wird ja zufällig auf der Bühne platziert, dabei sind es immer die
Koordinaten die Teil der Fläche sind aber nicht größer...

Wie schaffe ich es das der Würfel nun endlich, zufallsgemäß über die ganze Bühne wandert

Und hier der Code


Code:
//Funktion fuer die Bewegung - wird dem Objekt zugeteilt
function bewegung(){
	this._x+=(neux-this._x)/5;
	this._y+=(neuy-this._y)/5;
	//this._xscale+=(neuxs-this._xscale)/5;
	//this._yscale+=(neuys-this._yscale)/5;
}
//Zufall Bewegung auf der X-Achse
function zufallx(){
	var zufx = 1+Math.floor(Math.random()*_root._width);  
	neux = zufx;
}
//Zufall Bewegung auf der Y-Achse
function zufally(){
	var zufy = 1+Math.floor(Math.random()*_root._height); 
	neuy = zufy;
}
//Zufall Skalierung auf der X-Achse
function zufallxs(){
	var zufxs = Math.random(_root._xscale)*_xscale*5; 
	neuxs = zufxs;
}
//Zufall Bewegung auf der Y-Achse
function zufallys(){
	var zufys = Math.random(_root._yscale)*_xscale*5; 
	neuys = zufys;
}
//Zeitliche Ausführungen der einzelnen Zufälle
setInterval(zufallx,1000);
setInterval(zufally,1000);
setInterval(zufallxs,1000);
setInterval(zufallys,1000);

//Dem Objekt zuweisen das beim Filmstart die Funktion "bewegung" ausgeführt und angewendet wird
test_mc.onEnterFrame=bewegung;

//DEBUG AUSGABE
function xyausgabe(){
	trace("X Wert: "+test_mc._x +" Y Wert: "+ test_mc._y);
}
setInterval(xyausgabe,1000);

//EDIT 2

Habe nun nochmal etwas zum Thema Math.random() gelesen...
Also ich verstehe das nicht.
Math Random gibt eine Fließkommazahl die größer als 0 aber kleiner als 1 ist wieder.

Wieso nehme ich nicht "random()", dort sage ich einfach "random(600)" also maximale breite, und "random(500)" sprich maximale Höhe...

Weshalb ist random überholt und durch Math.random() ersetzt worden?
Weil es genauer ist
Weil es eine Fließkommazahl ist und damit die Wahrscheinlichkeit erhöht wird das
eine Zahl "länger" ein Unikat bleibt (wenn man die Stellen hinter dem Komma beachtet - 8 oder so sind es glaube ich, oder)?

//EDIT 3

Jetzt scheint es zu klappen...
Hmpf...

Komisch. Habe den Code ein wenig ausgearbeitet...

Code:
//Funktion fuer die Bewegung - wird dem Objekt zugeteilt
//Dieses Objekt bekommt den Wert des Zufallsgenerators minus dem
//aktuellen Wert seiner selbst, und dieses Ergebnis geteilt durch 5 (damit es sich langsam bewegt).

//Das "+" steht dort, damit es immer wieder neu hinzugezählt wird, ansonsten
//würde das Objekt einfach immer nur eine neue Zuweisung, nämlich "(neux-this._x)/5"
//erhalten. Da dies aber nicht so schön und sehr eckig aussieht,
//wird der aktuelle Wert in das Ergebnis mit einbezogen also quasi dazu addiert.
function bewegung(){
	this._x+=(neux-this._x)/5;
	this._y+=(neuy-this._y)/5;
	this._xscale+=(neuxs-this._xscale)/5;
	this._yscale+=(neuys-this._yscale)/5;
	this._rotation+=(neurt-this._rotation)/5;
}
//Zufall Bewegung auf der X-Achse
function zufallx(){
	var zufx = Math.random()*_root._width;  
	neux = zufx;
}
//Zufall Bewegung auf der Y-Achse
function zufally(){
	var zufy = Math.random()*_root._height; 
	neuy = zufy;
}
//Zufall Skalierung auf der X-Achse
function zufallxs(){
	var zufxs = Math.random(_root._xscale)*_xscale*5; 
	neuxs = zufxs;
}
//Zufall Bewegung auf der Y-Achse
function zufallys(){
	var zufys = Math.random(_root._yscale)*_xscale*5; 
	neuys = zufys;
}
//Rotationsfunktion
function rotation(){
	var zufrt = Math.random()*180;
	neurt = zufrt;
	}
//Zeitliche Ausführungen der einzelnen Zufälle
setInterval(zufallx,1000);
setInterval(zufally,1000);
setInterval(zufallxs,1000);
setInterval(zufallys,1000);
setInterval(rotation,1000);

//Dem Objekt zuweisen das beim Filmstart die Funktion "bewegung" ausgeführt und angewendet wird
test_mc.onEnterFrame=bewegung;

function ausgaben(){
	xwert_txt.text=test_mc._x;
	ywert_txt.text=test_mc._y;
	xswert_txt.text=test_mc._width;
	yswert_txt.text=test_mc._height;
	rtwert_txt.text=Math.round(test_mc._rotation);
}
setInterval(ausgaben,1);
/*
//DEBUG AUSGABE
function xyausgabe(){
	trace("X Wert: "+test_mc._x +" Y Wert: "+ test_mc._y+" Rotationswert: "+test_mc._rotation);
}
setInterval(xyausgabe,1000);
*/
 
... musst Du deshalb wirklich vier(!) Postings hintereinander erstellen? :rolleyes:

Noch einmal:
  1. _root._xscale gibt in der Regel 100 aus

  2. _root._width gibt die zusammengezählte Breite aller Objekte auf der Hauptzeitleiste aus

  3. die Bühnenbreite bekommst Du mit Stage.width
.
 
:-( hehe... :( entschuldigung :D.
Dankeschön für die Antwort...

Ich hab immer _root._width bzw. _root._height verwendet,
nicht STAGE...
Mist, war so vertieft und versteift auf ne Lösung das ich nicht richtig gelesen habe...

Also danke mal wieder für die Hilfe Tobias, und sorry wegen den zahlreichen postings.

Besten Gruß,

Mike
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück