Autos (Rechtecke) in zufälligen Abständen von fahren lassen

Status
Nicht offen für weitere Antworten.

NatroN

Aktives Mitglied
Hallo!

Ich habe hier ein Problem.

Ich möchte Autos, welche durch vierekcke dargestellt werden von links nach rechts fahren lassen. Wäre soweit kein Problem.

Einfach duch dieses Codestück
Code:
g.drawRect(zaehler, 180, 50,20);

Das Problem ist, dass es mehrere Autos (ca. 6) sein müssen, die in zufälligen Abständen von links (Position: -50,180) starten und dann nach rechts fahren.

Jemand ne Idee?

Mfg
 
M

mr1st

Gast
Möglicher Ansatz: Jedes Auto ist ein Thread, und dann nach zufälligen Zeitabständen (Math.random()*1000 = zw. 0 und 1 Sek.) neue Autos/Threads starten.

MfG
 

NatroN

Aktives Mitglied
leider darf in meinem fall nur ein thread drin sein... deswegen fällt der ansatz flach.

ich habe es dann so probiert:
Bei der Variablendeklaration einfach
int verkehr1 = 900; //das ist schon ausserhalb des zeichenbereiches
int verkehr2=909;....



Code:
zufall=Math.random()*10 //Zahlen von 1 bis 10
switch (zufall)
{case 1: 
verkehr1=-50;
break;
case 2:
verkehr2=-50
break;
...
}
screen.fillRect(verkehr1+zaehler,180,50,20); //erstes Auto
screen.fillRect(verkehr2+zaehler,180,50,20); //2tes Auto

leider wird dann (obwohl der zufallsgenerator bei jedem repaint eine neue zahl auswirft) nur ein auto gestartet und fähr dann nach rechts.




mfg
#
p.s..: Vielleicht nicht uninteressant... alle laufen gleich schnell... somit sollte ein Thread (1 Zähler) reichen.

mfg
 
K

klom

Gast
Ich würde das über eine Klasse Auto und eine Klasse AutoManager implementieren.
In Auto sind dann Daten wie die Position, die Geschwindigkeit, vielleicht auch Farbe
usw. gespeichert, während die Klasse AutoManager in irgend einer Datenstruktur
z.B. Vector/Array ... die einzelnen Objekte Auto hält und deren Darstellung
nacheinander organisiert. Neue Autos fügst du dann einfach dazu und welche die
sich außerhalb des Bilschirms finden kannst du dann aus dem Array löschen.

Was du machen willst sind letztlich nichts anderes als Sprites. Du kannst dich also
auch dazu mal umschauen. Zu dem Thema gibt es auch eine ganze Reihe von
Tutorials.
 

NatroN

Aktives Mitglied
also ein atuo array ist ok.. dazu habe ich mich heute vormittag überreden lassen... auch wenn ich noch nicht weiß wie ich das hinbekommen soll.

was sprites nind weiß ich gar nicht...


ich habe dazu gerade im auto folgende idee gebohren.

1. Auto:
mit Math.Random()*(-250) einfach einen startwert von -0 - -250 festsetzen. dann erscheint das auto entweder gleich... oder kommt erst wenn der zähler bei 250 angelangt ist...

2. - ntes Auto
mit Math.Random()*(-vorgengerstartwert+250)-vogengerstartwert einfach einen startwert von dem startwert des vorgängerautos - 250 nach dem vorgängerauto festlegen. Dann erscheint das auto entweder sofort nach dem Vorgängerauto oder 250 nach dem vorgängerauto.

klingt doch gut oder?

werd ich gleich mal testen...
 
K

klom

Gast
Wie immer gibt es viele Möglichkeiten, aber das mit der Sichtbarkeit würde ich
anders lösen. Gibt der Klasse Auto einfach einfach eine Variable

private boolean visible;

und dazu Methoden

public getVisibility()
und
public setVisibility()

In AutoManager wird diese Variable dann immer geprüft und nur soweit
notwendig das Auto gezeichnet.
 

NatroN

Aktives Mitglied
naja das mit der sichtbarkeit ist ja egal... ob nun ausserhalb des bereiches gezeichnet wird oder nicht...


die frage momentan ist:

Code:
private int	verkehr1=(int)-(Math.random()*30);
private int		verkehr2=(int)-(Math.random()*((verkehr1+200)-verkehr1));  
private int	verkehr3=(int)-(Math.random()*((verkehr2+200)-verkehr2));
private int verkehr4=(int)-(Math.random()*((verkehr3+200)-verkehr3));

wo liegt der denkfehler??

es werden werte ausgespuckt die zuh nah beieinander liegen... und somit liegen die autos aufeinander
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben