Bewegung eines Grafikobjektes

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich arbeite gerade an einer Animation. In dieser soll sich ein Kreis völlig zufällig auf der Ebene bewegen.

Ich berechne auf Grundlage der momentanen Kreisposition und der per Math.random.... berechneten Zielposition eine Gerade durch diese beiden Punkte. Über diese Gerade berechne ich nun den jeweils nächsten y-Wert wobei ich den x-Wert des Kreises in jedem Durchlauf um 1 inkrementiere. Mein Problem ist nun, dass die Geschwindigkeit des Kreises bei höherer Steigung zunimmt, da bei einer Steigung von -sagen wir 85° für jede verschiebung von x um 1, der y-Wert sich um ein vielfaches von x erhöht.

Meine erste Überlegung hierzu war, in jedem Durchlauf den kreis um 100px statt um 1px zu verschieben. Dadurch könnte man über einen Modifikator die verschiebung auf der x-Achse im verhältnis zur verschiebung auf der y-Achse anpassen. Leider wird die Animation dadurch sehr holperich. Hätte jemand eine idee, wie man dieses Problem lösen könnte?
 

Steev

Bekanntes Mitglied
Holprige Bewegungen sind so eine Geschichte bei Animationen. Optimieren kannst du das ganze folgendermaßen:

1) Verkleineren des sleep-Wertes in der Repaint-Schleife um eine höhere FPS-Rate zu erzeugen, damit wird dein Objekt schneller neugezeichnet und somit kannst du eine schnellere Bewegung in vielen Einzelschritten erzielen.

2) Wenn das nicht reicht, dann musst du größere Einzelschritte benutzen. Nur das alleine reicht aber nicht aus, da die Bewegung dann ja wieder ruckelig ist, also musst du entweder zwischen der alten und der neuen Position des Objekte den Abstand ermitteln und an dieser Position eine Verblasste Instanz deines Objektes zeichnen, oder eine Art Motion-Blur programmieren.
 

0x7F800000

Top Contributor
Anonymous hat gesagt.:
In dieser soll sich ein Kreis völlig zufällig auf der Ebene bewegen.
mit was machst du das denn, jogl, j3d oder eigenbau-software-rasterizer, oder ist das alles 2D?

eine Gerade durch diese beiden Punkte.
Was für Punkte? ???:L

Mein Problem ist nun, dass die Geschwindigkeit des Kreises bei höherer Steigung zunimmt, da bei einer Steigung von -sagen wir 85° für jede verschiebung von x um 1, der y-Wert sich um ein vielfaches von x erhöht.
Ist das jetzt irgendwie doch 2D? Oder was meinst du mit "steigung"? Was machst du da überhaupt mit irgendwelchen Steigungen? :shock:

Irgendwie leuchtet mir absolut nicht ein, was das Problem ist. Random-walk in einer Ebene zu berechnen ist ja nichts abenteuerliches, die lokalen koordinaten samt der ebene irgendwohin schräg in den Raum zu transformieren auch nicht. Könntest du bitte präzisieren, was da überhaupt los ist?
 
G

Guest

Gast
erstmal vielen dank für die Antworten. Dann will ich mal versuchen etwas präzieser zu werden.
Es handelt sich hier um eine Bewegung in der Ebene. Ein Kreis der sich zu Anfang an einer Position (x1,y1) befindet soll sich an die Position (x2,y2) bewegen, mit allen nötigen zwischenschritten, damit es auch eine gleichförmige Bewegung ist.

Sagen wir der Kreis befindet sich zu Anfang (1. durchlauf) an der Position (0,0) und soll sich auf die Position (100,100) begeben. Damit habe ich zwei Punkte und kann jeden Zwischenpunkt auf dem Weg zu (100,100) berechnen. Bei einer Geschwindigkeit von 1 pixel pro durchlauf, sieht das bei mir dann so aus.

x-Wert des Kreises um 1 erhöhen. Den neuen x-Wert in die Geradengleichung einsetzen um den resultierenden y-Wert zu bekommen. In diesem Fall wäre das der wert y= 1, im nächsten durchlauf y=2, usw.

d.h. der kreis würde sich folgendermassen fortbewegen:

0. (0,0)
1. (1,1)
2. (2,2)
...

100 (100,100)

Nun sagen wir mal, der Zielpunkt ist nicht (100,100) sondern (1,100).
Dann würde der y-Wert beim ersten durchlauf (x=0+1) 100 sein. Der Kreis würde folglich sich auf der x-Achse um einen Pixel bewegen aber um 100 pixel auf der y_Achse. Genau das möchte ich nicht. Die Optimierungen werde ich mir mal anschauen.
 

Quaxli

Top Contributor
2 Kommentare dazu:

1. Wenn man ein Objekt jeweils um einen fixen Wert bewegt, erhält man meist keine gleichförmige Bewegung, da die repaint-Schleife nicht immer gleich lange benötigt. Es empfiehlt sich daher einen Delta-Wert für x und y zu nehmen (10 Pixel pro Sekunde) und die Bewegung in Abhängigkeit der Zeit, die der letzte Schleifendurchlauf benötigt hat zu berechnen.

2. Damit wären wir auch schon bei Deinem 2. Problem, daß man da gleich miterschlagen kann. Auf die oben beschriebene Art kannst Du für x und y unterschiedliche Deltas setzen und damit in x- und y-Richtung unterschiedlich schnell bewegen.

Wenn Dir das hiflt: Klicke mal in meiner Signatur auf "Spiele-Tutorial", da ist diese Vorgehensweise ausführlich beschrieben. ;)
 

0x7F800000

Top Contributor
Anonymous hat gesagt.:
Dann würde der y-Wert beim ersten durchlauf (x=0+1) 100 sein. Der Kreis würde folglich sich auf der x-Achse um einen Pixel bewegen aber um 100 pixel auf der y_Achse.
und was hindert dich daran, im ersten schritt den Kreis auf die Position (0.01,1) zu verschieben, wenn du das schon in 100 Schritten haben willst? ???:L Was die lineare Interpolation ist, ist hoffentlich bekannt?
Code:
x(t)=a+t(b-a); // a,b Punkte in der ebene, t aus dem intervall [0,1] z.b in 0.01 Schritten

Allgemeine Bemerkung: sowas wie "Steigung" hat in irgendwelchen Animationen oder gar Spielen meistens überhaupt nichts verloren.
 
G

Guest

Gast
Wenn Dir das hiflt: Klicke mal in meiner Signatur auf "Spiele-Tutorial", da ist diese Vorgehensweise ausführlich beschrieben.

ja, dass sieht sehr gut aus! Vielen, vielen Dank.

Allgemeine Bemerkung: sowas wie "Steigung" hat in irgendwelchen Animationen oder gar Spielen meistens überhaupt nichts verloren.

Sehr wohl hat es das wenn es z.B. um Geometrie geht und die Veranschaulichung der Theorie. Und wenn ich mir Deine Antworten so ansehe, erkenne ich weniger den Willen zu helfen als vielmehr den Willen zu korrigieren und zu belehren.

Was die lineare Interpolation ist, ist hoffentlich bekannt
Aber natürlich! wo kämen wir denn da hin, wenn jemand der dieses Forum aufsucht nicht weiss was lineare Interpolation ist?! Kaum auszudenken!
 

0x7F800000

Top Contributor
Anonymous hat gesagt.:
Aber natürlich! wo kämen wir denn da hin, wenn jemand der dieses Forum aufsucht nicht weiss was lineare Interpolation ist?! Kaum auszudenken!
ich kann nur hoffen, dass das nicht sarkastisch gemeint war :roll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Brauche Hilfe bei Bewegung eines Rechtecks [Applet] Spiele- und Multimedia-Programmierung 5
YangLee Ausgabe von einer Bewegung bei mehrzeiligen Strings Spiele- und Multimedia-Programmierung 1
D Arrays auf Bewegung prüfen (2048) Spiele- und Multimedia-Programmierung 1
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
K Bewegung falsch Spiele- und Multimedia-Programmierung 6
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
B Webcam Bewegung markieren Spiele- und Multimedia-Programmierung 3
R Asteroid unschöne Bewegung Spiele- und Multimedia-Programmierung 13
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
T Flüssige Bewegung Spiele- und Multimedia-Programmierung 7
U Freie Bewegung Realisierung Spiele- und Multimedia-Programmierung 13
M Bomberman: Bewegung der Spielfigur in windows viel schneller Spiele- und Multimedia-Programmierung 12
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
N Seltsame Exception bei Code eines Spiele-Tutorials Spiele- und Multimedia-Programmierung 6
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
T Position eines Image verändern mithilfe eines Timers Spiele- und Multimedia-Programmierung 6
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
K Click innerhalb eines 45° gekippten Rechtecks Spiele- und Multimedia-Programmierung 9
J LibGdx_3D: Klamotten eines Charakters modifizieren Spiele- und Multimedia-Programmierung 2
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
R Fehler beim Laden eines 2D-Bildes Spiele- und Multimedia-Programmierung 3
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
M Programmierung eines "Fantasy Rollenspiels" Spiele- und Multimedia-Programmierung 5
E Laufanimation eines Sprites Spiele- und Multimedia-Programmierung 6
Finalspace Entwicklung eines Jump & Run Spiels Video-Tutorial Spiele- und Multimedia-Programmierung 12
T Hintergrundmusik eines Spiels mit Hilfe von JLayer Spiele- und Multimedia-Programmierung 12
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
gamebreiti Index eines Elements einer ArrayList abfragen Spiele- und Multimedia-Programmierung 1
X "Rebuffen" - Messen der Zeit eines Timers Spiele- und Multimedia-Programmierung 3
S Design eines Schachspiels Spiele- und Multimedia-Programmierung 3
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
F Programmierung eines Bots Spiele- und Multimedia-Programmierung 23
A Wann ist ein Punkt inerhalb eines Polygons? Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
R Drehen eines Bildes relativ zur Mauszeigerposition Spiele- und Multimedia-Programmierung 2
M Pattern zur Auswahl eines Objektes anhand vieler Kriterien Spiele- und Multimedia-Programmierung 2
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
R Triangulation eines komplexen Polygons Spiele- und Multimedia-Programmierung 4
L Lwjgl Darstellung eines Kreises im Raum Spiele- und Multimedia-Programmierung 3
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
G Rotieren eines Objekts (2D) Spiele- und Multimedia-Programmierung 8
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
S Umfang eines Polygons erzeugen Spiele- und Multimedia-Programmierung 1
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
W CannotRealizeException (jmf) beim abspielen eines liedes Spiele- und Multimedia-Programmierung 3
F Meine Aufgabe: Client-Server am Beispiel einer Implementation eines Tic-Tac-Toe Netzwerkspieles Spiele- und Multimedia-Programmierung 7
D Koordinaten eines 2D Sprites Spiele- und Multimedia-Programmierung 2
B Teile eines Bildes laden - BitBlk und drawImage Spiele- und Multimedia-Programmierung 3
S Interpolation eines Bildes Spiele- und Multimedia-Programmierung 6
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14
N Bildposition innerhalb eines anderen Bildes ermitteln Spiele- und Multimedia-Programmierung 2
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
A Programmieren eines Bruchrechners Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
J Rotieren eines 2D Images endet in Java heap space Error Spiele- und Multimedia-Programmierung 15
W Affine Transformation, Rotieren eines Objekts Spiele- und Multimedia-Programmierung 2
S fließende/bewegende Striche eines Auswahlrechtecks Spiele- und Multimedia-Programmierung 9
A Bounds eines gedrehten Objekts berechnen Spiele- und Multimedia-Programmierung 30
T Erstellen eines ausdruckbaren Formulars Spiele- und Multimedia-Programmierung 5
T Umsetzung eines 2D Jump and Runs Spiele- und Multimedia-Programmierung 7
T Brightness eines Bildes [DRINGEND] Spiele- und Multimedia-Programmierung 2
S Java3D - mehrere Instanzen eines Geometrieobjektes erzeugen Spiele- und Multimedia-Programmierung 3
ARadauer Grauwerte eines jpg ermitteln Spiele- und Multimedia-Programmierung 4
A Anzeigen eines Grapfen Spiele- und Multimedia-Programmierung 13
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
S Problem bzgl. Umsetzung eines Rollenspiel Spiele- und Multimedia-Programmierung 6
M Ausschneiden eines Bereichs / Avatar Spiele- und Multimedia-Programmierung 2
G Ermitteln eines Punktes in einer anderen TransformGroup Spiele- und Multimedia-Programmierung 2
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
DEvent [2D] Farbe bestimmten Pixels eines Bildes ändern Spiele- und Multimedia-Programmierung 3
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
G Breite eines Strings Spiele- und Multimedia-Programmierung 2
S Text an einer Seite eines Cubes Spiele- und Multimedia-Programmierung 7
F Image eines bestimmten Bereichs eines JPanels erstellen Spiele- und Multimedia-Programmierung 4
N Grafik als Hintergrund eines Rechtecks verwenden? Spiele- und Multimedia-Programmierung 4
N Rundenstrategiespiel - Problem beim Drehen eines Bildes Spiele- und Multimedia-Programmierung 18
T Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze Spiele- und Multimedia-Programmierung 3
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
M Zerschneiden eines Bildes mit Wellenlinien? Spiele- und Multimedia-Programmierung 2
S Simulation in der Art eines Schachbrett Spiele- und Multimedia-Programmierung 2
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4
L nicht sichtbare Kanten eines Würfels Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen


Oben