Animation berechnen

Status
Nicht offen für weitere Antworten.

markint

Mitglied
Hallo,
ich habe ein Problem mit der Bewegung auf meinem Radar.
Der Kreis der sich bewegt ist bei einer hohen Steigung zu schnell und man sieht nicht mehr die Bewegung. Hat jemand eine Idee wie man das lösen kann, sodass immer die gleiche Bewegungsgeschwindigkeit vollzogen wird?


[highlight=Java]

import javax.swing.*;
import java.awt.*;

public class Animation {

private int startx = 300;//Startpunkt
private int starty = 300;//Startpunkt
private int zielx = 100;//Zielpunkt
private int ziely = 440;//Zielpunkt

public static void main(String[] args){
Animation a = new Animation();
a.go();

}

public void go(){
JFrame frame = new JFrame();
frame.setSize(577, 597);
frame.setResizable(false);
MyPanel panel = new MyPanel();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

double m = calculateAlterationRate(startx, starty, zielx, ziely); //Steigung einer Geraden.

//Routenberechnung(FEHLERHAFT!!)

//Der If-Block macht überhaupt nichts richtig.
if (Math.abs(m) < 1){
double reciprocal = 1/m;
if(ziely >= starty){
while(!(zielx-10 <= startx && startx <= zielx+10) || !(ziely-10 <= starty && starty <= ziely)){
startx = (int)Math.round(startx - reciprocal);
starty++;
panel.repaint();

try{
Thread.sleep(200);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
else{
while(!(zielx-10 <= startx && startx <= zielx+10) || !(ziely-10 <= starty && starty <= ziely)){
startx = (int)Math.round(startx - reciprocal);
starty--;
panel.repaint();

try{
Thread.sleep(200);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}

//Dieser Else-Block hier scheint(!) korrekt zu laufen. Zumindest habe ich noch kein Gegenbeispiel gefunden.
else{
if(zielx >= startx){
while(!(zielx-10 <= startx && startx <= zielx+10) || !(ziely-10 <= starty && starty <= ziely)){
starty = (int)Math.round(m + starty);
startx++;
panel.repaint();

try{
Thread.sleep(200);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
else{
while(!(zielx-10 <= startx && startx <= zielx+10) || !(ziely-10 <= starty && starty <= ziely)){
starty = (int)Math.round(starty - m);
startx--;
panel.repaint();

try{
Thread.sleep(200);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
}

private double calculateAlterationRate(int startx,int starty,int zielx,int ziely){
return (ziely - starty)/(zielx - startx); //Steigung einer Gerade
}

class MyPanel extends JPanel {
//der Radar mit einem Kreis
public void paint(Graphics g){
g.setColor(Color.gray);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(new Color((float)0.2, (float)0.2, (float)0.2));
g.fillOval(0, 0, 570, 570);
g.setColor(Color.black);
g.fillOval(35, 35, 500, 500);
g.setColor(Color.white);
g.drawOval(35, 35, 500, 500);
g.setColor(new Color((float)0.0, (float)1.0, (float)0.5));
drawCircles(g);
g.setColor(Color.white);
g.fillOval(startx, starty, 20, 20);
}

private void drawCircles(Graphics g){
g.drawOval(235, 235, 100, 100);
g.drawOval(185, 185, 200, 200);
g.drawOval(135, 135, 300, 300);
g.drawOval(85, 85, 400, 400);
}
}
}

[/highlight]
 

Marco13

Top Contributor
Wenn man das startet bewegt sich ein Kreis sehr langsam am Linken Bildrand nach unten...

Ich vertraue mal meiner Kristallkugel, die mir gerade gesagt hat, was du machen willst...: Vergiß' alles, was mit "Steigung" zu tun hat. Es gibt keine "Steigung", es gibt nur eine Richtung. Die Richtung ist: Vom Startpunkt zum Zielpunkt. Und diese Differenz soll zurückgelegt werden. Entweder innerhalb einer bestimmten Zeit, oder mit einer bestimmten Geschwindigkeit. (Was von beidem? Darüber solltest du dir im klaren sein!)

Ein Beispiel...
Code:
import javax.swing.*;
import java.awt.*;

public class Animation {

    private int startx = 300;//Startpunkt
    private int starty = 300;//Startpunkt
    private int zielx = 100;//Zielpunkt
    private int ziely = 440;//Zielpunkt

    private int currentX = startx;
    private int currentY = starty;

    public static void main(String[] args){
        Animation a = new Animation();
        a.go();

    }

    public void go(){
        JFrame frame = new JFrame();
        frame.setSize(577, 597);
        frame.setResizable(false);
        MyPanel panel = new MyPanel();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        // Richtung (Strecke zwischen start und ziel) berechnen
        float dx = zielx - startx;
        float dy = ziely - starty;

        // Die Strecke mit 100 Schritten zurücklegen
        int steps = 100;
        for (int i=0; i<=steps; i++)
        {
            float a = (float)i/steps;

            // Richtige Position auf der Strecke für den aktuellen Schritt berechnen
            currentX = (int)(startx + a * dx);
            currentY = (int)(starty + a * dy);
            panel.repaint();

            try
            {
                Thread.sleep(20);
            }
            catch (InterruptedException e)
            {
                Thread.currentThread().interrupt();
            }
        }
    }

    class MyPanel extends JPanel {
        //der Radar mit einem Kreis
        public void paint(Graphics g){
            g.setColor(Color.gray);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(new Color((float)0.2, (float)0.2, (float)0.2));
            g.fillOval(0, 0, 570, 570);
            g.setColor(Color.black);
            g.fillOval(35, 35, 500, 500);
            g.setColor(Color.white);
            g.drawOval(35, 35, 500, 500);
            g.setColor(new Color((float)0.0, (float)1.0, (float)0.5));
            drawCircles(g);
            g.setColor(Color.white);
            g.fillOval(currentX, currentY, 20, 20);
        }

        private void drawCircles(Graphics g){
            g.drawOval(235, 235, 100, 100);
            g.drawOval(185, 185, 200, 200);
            g.drawOval(135, 135, 300, 300);
            g.drawOval(85, 85, 400, 400);
        }
    }
}
 

markint

Mitglied
Ich will das der Kreis von der Mitte aus sich in die richtige Richtung bewegt und wenn möglich mit einer konstanten Geschwindigkeit.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Animation läuft nicht korrekt AWT, Swing, JavaFX & SWT 8
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
DeBoiJoshua 2D-Grafik Gif Animation will nicht laden AWT, Swing, JavaFX & SWT 1
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Ruckelfreie Animation AWT, Swing, JavaFX & SWT 20
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
javampir 2D-Grafik Effizienz bei animation AWT, Swing, JavaFX & SWT 0
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
P Ansatz für 2D Animation gesucht AWT, Swing, JavaFX & SWT 2
Thallius HHübsche Kopier Animation? AWT, Swing, JavaFX & SWT 5
L JPanel kleine "Animation" AWT, Swing, JavaFX & SWT 7
E Animation läuft nicht mehr flüssig AWT, Swing, JavaFX & SWT 8
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
J GIF Animation AWT, Swing, JavaFX & SWT 2
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
R Swing Animation mit JLayeredPane? AWT, Swing, JavaFX & SWT 8
K 3D-Grafik Animation AWT, Swing, JavaFX & SWT 4
U Gif Animation mit JLabel AWT, Swing, JavaFX & SWT 3
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Animation flackert AWT, Swing, JavaFX & SWT 8
R Polygon-Animation mit Darstellungsfehlern AWT, Swing, JavaFX & SWT 5
StupidAttack Animation, JComponent AWT, Swing, JavaFX & SWT 3
S SWT Rudimentäre Bild Animation AWT, Swing, JavaFX & SWT 3
C Animation auf einem JPanel AWT, Swing, JavaFX & SWT 3
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
S Ich brauche eine Idee: Animation mit teil eines Bildes AWT, Swing, JavaFX & SWT 16
H "Animation" AWT, Swing, JavaFX & SWT 2
S Animation korrekt darstellen AWT, Swing, JavaFX & SWT 8
Developer_X Nach Animation Button adden AWT, Swing, JavaFX & SWT 3
Developer_X Swing JPanel-THE ANIMATION AWT, Swing, JavaFX & SWT 3
T JFrame und Scale-Animation AWT, Swing, JavaFX & SWT 8
M Animation auf JPanel per Knopfdruck AWT, Swing, JavaFX & SWT 12
P Problem bei Animation AWT, Swing, JavaFX & SWT 2
K Animation auf GUI AWT, Swing, JavaFX & SWT 3
R ruckelfreie animation AWT, Swing, JavaFX & SWT 8
T Animation will nicht trotz Thread. AWT, Swing, JavaFX & SWT 14
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
S Animation geht nicht AWT, Swing, JavaFX & SWT 3
m@nu Animation in GlassPane: Performanceeinbruch JFrame maximiert AWT, Swing, JavaFX & SWT 17
rudi.schraml Animation von Robotern auf FactoryFloor - repaint()? AWT, Swing, JavaFX & SWT 7
J Animation - Runnable AWT, Swing, JavaFX & SWT 3
O Animation in einem JPanel AWT, Swing, JavaFX & SWT 2
H Animation startet nicht/ Thread AWT, Swing, JavaFX & SWT 6
N Animation nach einem bestimmten Ereignis starten lassen? AWT, Swing, JavaFX & SWT 4
A Problem mit Animation AWT, Swing, JavaFX & SWT 4
M Animation mit Keylistener AWT, Swing, JavaFX & SWT 2
Tippster JavaFX Scene neu berechnen lassen AWT, Swing, JavaFX & SWT 5
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
Neumi5694 Größe von Komboboxen neu berechnen AWT, Swing, JavaFX & SWT 3
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
F Schriftgröße von Buchstaben berechnen AWT, Swing, JavaFX & SWT 3
B 2D-Grafik Collision berechnen AWT, Swing, JavaFX & SWT 2
H preferred size abhängig von Fenstergröße berechnen AWT, Swing, JavaFX & SWT 11
S Farbverlauf in for-Schleife berechnen AWT, Swing, JavaFX & SWT 4
M Swing JTextField "onthefly" auslesen und berechnen AWT, Swing, JavaFX & SWT 7
D Swing JViewPort, Absolut Koordinaten berechnen. AWT, Swing, JavaFX & SWT 2
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
T Swing JEditorPane Groesse berechnen AWT, Swing, JavaFX & SWT 2
C Alternative zu getFontMetrics um Stringlänge zu berechnen AWT, Swing, JavaFX & SWT 2
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
D Koordinaten von einem Kreissegment berechnen AWT, Swing, JavaFX & SWT 6
T Breite des Containers ist gegeben - wie die Höhe berechnen? AWT, Swing, JavaFX & SWT 3
J Schriftgröße aus vorhandenem Platz berechnen AWT, Swing, JavaFX & SWT 9
J resize eines Bildes automatisch berechnen lassen? AWT, Swing, JavaFX & SWT 2
C Farblayer berechnen AWT, Swing, JavaFX & SWT 24
G winkel berechnen AWT, Swing, JavaFX & SWT 4
P Winkel berechnen AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben