Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird

CptK

Bekanntes Mitglied
Hallo, ich stehe gerade ein wenig au dem Schlauch:
Ich habe eine ArrayList mit verschiedenen Objekten, die sich von rechts nach links über den Bildschirm bewegen. Bleibt allerdings ein Objekt stehen, sollen die anderen nur so weit aufrücken, dass sie immer noch einen gewissen Abstand zueinander haben.

Ich weiß nicht was ihr alles zur Beantwortung wissen müsst, fragt da einfach nach.

Vielen Dank für die Hilfe!
 
Na, das ist einfach:
Um das zu erreichen, musst du die anderen Objekte rechts neben dem stehengebliebenen Objekt nur solange nach links bewegen, bis das Objekt direkt rechts neben dem stehengebliebenen Objekt einen gewissen Abstand zum stehengebliebenen Objekt erreicht hat und alle nachfolgenden Objekte weiter rechts jeweils zu dem direkt links neben ihnen stehenden Objekt auch jeweils einen gewissen Abstand erreicht haben.
 
Wie überprüfe ich jetzt, ob Objekte den nötigen Abstand zueinander haben? Das Problem ist, ich kenne den index des Objektes vom jeweilig rechten Objekt nicht.
 
Jaja schon klar aber wie kriege ich in einer ArrayList mit z.B. 1000 Objekten raus, welches das linke ist wenn ich den index vom aktuellen Objekt nicht kenne?
 
Häh? Wie willst du denn das linke Objekt von einem unbekannten Objekt (von dem du den Index nicht hast) berechnen? Wovon willst du denn "das linke" Objekt berechnen?
Was ist denn "das aktuelle Objekt"?
Ansonsten würde ich sagen: Sortier doch die Objekte in der List erstmal nach ihrer x-koordinate.
 
Also es ist so: In der Klasse Panel habe ich eine ArrayList aus dem Objekt Piratenschiff und in der Klasse Piratenschiff ist die Methode move(). In dieser Methode soll überprüft werden, ob der Mindestabstand zum Piratenschiff davor unterschritten wurde und wenn nicht soll sich das Schiff weiter bewegen.
ich habe jetzt versucht mit
Java:
p.getPiratenschiffe().indexOf(this)
den index des Objekts zu bekommen, geht aber nicht
 
die sich von rechts nach links über den Bildschirm bewegen. Bleibt allerdings ein Objekt stehen, sollen die anderen nur so weit aufrücken, dass sie immer noch einen gewissen Abstand zueinander haben

Angenommen, es sind drei Objekte, welche sich von rechts nach links bewegen. Dabei gilt: a gefolgt vom b, gefolgt vom c. Dann gilt:
  • wenn a auf ein Hindernis aufläuft, soll b in einem bestimmten Abstand zu a
  • c in einem bestimmten Abstand zu b ((2x Abstand + Länge von b) zu a)
stehen bleiben. Was soll aber passieren, wenn b auf ein Hindernis läuft? Dass c in einem bestimmten Abstand zu b stehen bleiben muss, ist klar. Was ist mit a, soll/darf es sich weiter bewegen?

Hinderniserkennung:
Was passiert den aber genau, bevor a auf ein Hindernis läuft? Richtig es bewegt sich nach vorn.
Also ist die Bewegung nach vorn an eine Bedingung geknüpft:
  • wenn vorn frei -> vor
  • wenn nicht -> setzte Objekt(Position des Objektes als Linie, für den Rest gilt die Reststrecke zu überwinden(X Mal Objekt vor einem, Y + 1 Abstand) ).
Also soll jedes Objekt, sobald er auf ein Hindernis aufläuft, eine Flagge werfen. Anschließend sollen alle Objekte, welche sich dem Ereignis unterwerfen müssen, die Reststrecke überwinden.
 
Aha, das heißt move() bewegt das Schiff gar nicht, sondern startet nur den Timer, der für die Änderung der Koordinaten sorgt. Das würde ich zwar anders entwerfen, ist aber ein anderes Thema. Im Moment frage ich mich eher, warum p.getPiratenschiffe().indexOf(this) nicht funktionieren sollte. Wenn Du da -1 zurückbekommst, hast Du entweder das Schiff nicht in die Liste aufgenommen oder equals falsch überschrieben.
 

Neue Themen


Zurück
Oben