Zufallsposition

C

Chaosprogrammer

Gast
Hallo!

Ich möchte bei meinem Spiel Objekte zufällig herunterfallen lassen.
Die Karte hat die Maße 400*600 und ich möchte eben eine zufällige x-Position.

Das funktioniert soweit.Nun möchte ich aber nur einen bestimmten Bereich von x in die Zufallsberechnung einbeziehen!

An der Stelle komme ich gerade nicht weiter.

Hier mal der Code der Methode:

Java:
object.setX((int)(Math.random()*(this.getWidth()-this.getWidth())));

Wie kann ich jetzt bei diesem getWidth den Bereich genau definieren?
 

Marco13

Top Contributor
Wenn bei [c]this.getWidth()-this.getWidth()[/c] etwas anders als 0 rauskommt, liegt irgendwas im Argen.... ;)

Wenn man ein Fenster der Breite w=600 hat, und zufällig zwischen x0=200 und x1=400 eine Position haben will, kann man sowas machen wie
Code:
int x0 = 200;
int x1 = 400;
int x = x0+(int)(Math.random()*(x1-x0));
 

Steev

Bekanntes Mitglied
Wenn bei [c]this.getWidth()-this.getWidth()[/c] etwas anders als 0 rauskommt, liegt irgendwas im Argen.... ;)

Rein theoretisch könnte das schon passieren, wenn man mit mehreren Threads arbeitet und der Sheduler genau an dieser Stelle die Verarbeitung des ersten Threads unterbricht um einen Thread abzuarbeiten, der das width-Attribut verändert. Die Warscheinlichkeit ist zwar sehr gering, aber man sollte generell nicht mehrfach einen Getter verwenden sondern nur einmal den Wert mithilfe des Getters in eine lokale Variable schreiben und diese dann verwenden.
 

Marco13

Top Contributor
Rein theoretisch könnte das schon passieren, wenn man mit mehreren Threads arbeitet und der Sheduler genau an dieser Stelle die Verarbeitung des ersten Threads unterbricht um einen Thread abzuarbeiten, der das width-Attribut verändert. Die Warscheinlichkeit ist zwar sehr gering, aber man sollte generell nicht mehrfach einen Getter verwenden sondern nur einmal den Wert mithilfe des Getters in eine lokale Variable schreiben und diese dann verwenden.

Diesen Fall hatte ich schon im Hinterkopf. Genauso wie den Fall, dass getWidth mit sowas überschrieben ist wie
Code:
int getWidth()
{
    int result = width;
    width += 1;
    return result;
}
:autsch:
Deswegen auch nur die allgemeine Aussage: WENN dort etwas anderes als 0 rauskommt, liegt irgendwas im Argen - egal ob Threadingprobleme oder murksige Implementierungen ;)
 

Empire Phoenix

Top Contributor
randzahl*wertebereich-(wertebereich/2)
wertebereich = 50-> zahlen zwischen -25und+25
randzalh*wertebereich
wertebereich = 100-> zajhlen zwischen 0 und 100
 

Neue Themen


Oben