Bewegung rauf und ab

Javaamateur

Mitglied
Hey Leute habe eine frage.

Wie kann man eine Figur in meinem fall ein kreis rauf und ab bewegen lassen. also ich will das dieser kreis 100 Pixel runter schwebt und dann wieder 100 hoch und das ohne pause?
Er soll gleiten und nicht einfach erst hoch dann runter gesetzt werden
 

Robat

Top Contributor
Wenn die Antwort genauso ungenau werden soll wie die Frage würde ich sagen:
Indem du die y-Koordinate erst 100px lang dekrementierst und danach 100px lang inkrementierst. ;)

Ansonsten:
Gib mal ein paar mehr Informationen. Nutzt du Swing oder JavaFx? Was hast du bereits?
Dann kann man auch eine genauere Antwort geben. Du brauchst auf jeden Fall irgendwie ein Model was den Kreis abbildet und eine Methode die die Position des Kreises in einem separaten Thread verändert und diesen neu zeichnet.
 

Javaamateur

Mitglied
habe das schon versucht hat nicht geklappt. Ich arbeite mit libgdx im Android Studio.
ich habe schon einen Kreis in der Mitte des Bildschirmes.

ich habe es mit einer if Bedingung versucht wie z.B

Der kreis gleitet in dem fall durchgehend nach unten.
habe schon viel probiert aber nichts klappt

Code:
]if(kreisPosition > kreisPosition -100){
 Verschiebung++;
kreisPosition -= Verschiebung;
}else if(kreisPosition == kreisPosition -100){
Verschiebung++;
kreisPosition += Verschiebung
}
 
Zuletzt bearbeitet:

Robat

Top Contributor
Versuch mal folgendes umzusetzen:
Als erstes musst du dir deine Ausgangsposition posStart abspeichern.
Du inkrementierst deine pos vom Kreis immer um einen Wert velocity. Danach prüfst Du ob deine neue pos gleich (posStart - 100) oder (posStart) ist, wenn ja drehst du das Vorzeichen von velocity um.
 

Javaamateur

Mitglied
Das Funktioniert nicht. Denke liegt daran das wenn die Bedingung erfüllt ist der ball eben dann um 1 Pixel zurückgesetzt wird und die Bedingung dann eben wieder nicht erfüllt ist.

Habe dafür aber eine lösung denn wenn die Bedingung erfüllt ist dann soll Velocity um 1 herabgesetzt werden solange die Position vom kreis ungleich posStart ist.
Da ist jedoch da Problem das die 100 Pixel sofort wieder draufgerechnet werden und nicht pro Frame um 1 Pixel. Also naja ist schwieriger als gedacht. habe echt sehr viel versucht klappt jedoch noch immer nicht
 
Zuletzt bearbeitet:

Robat

Top Contributor
Weiß nicht genau wie/was du implementiert hast.
Hab dir mal ein kleines Swing-Beispiel geschrieben (Quick-&-Dirty). Das sollte relativ einfach auf dein Vorhaben abgeändert werden können.
Java:
public class MovingCircleExample {

    public MovingCircleExample() {
        JFrame frame = new JFrame();
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new Painting());

        frame.setVisible(true);
    }

    class Painting extends JComponent {
        private MovingCircle circle;

        public Painting() {
            circle = new MovingCircle();
            Timer t = new Timer(20, e -> {
                circle.move();
                repaint();
            });
            t.start();
        }

        @Override
        public void paintComponent( Graphics g ) {
            super.paintComponent(g);
            circle.paint(g);
        }
    }

    class MovingCircle {

        private final int DELTA = 25;
        private int startY, y, velocity;

        public MovingCircle() {
            this.y = startY = 50;
            this.velocity = 5;
        }

        public void move() {
            if ( checkPosition() ) {
                velocity = -velocity;
            }
            this.y += velocity;
        }

        private boolean checkPosition() {
            return (y == startY-DELTA || y == startY + DELTA);
        }

        public void paint( Graphics g ) {
            g.setColor(Color.BLACK);
            g.fillOval(50, y, 40, 40);
        }
    }

    public static void main( String[] args ) {
        new MovingCircleExample();
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben