Kreis herumfliegen & abprallen von Rändern

Status
Nicht offen für weitere Antworten.
J

JoeY9

Gast
Hallo!
Also ich überlege gerade wie ich es schaffen könnte, dass ein Kreis der sich in einem Frame "herumbewegt" von den "Wänden" abprallt. Also sagen wir mal das Fenster hat eine Größe von 300 x 300 dann soll der Kreis abprallen wenn er zu einem Rand des Fensters kommt.
 

Campino

Top Contributor
Indem du die Position des Balls mit den Rändern des Fensters vergleichst. Wenn die x-Koordinate des balls kleiner als 0 ist, hat der Ball grade die linke Fensterkante passiert.
Wenn die x-Koordinate größer als die Breite des Fensters (getWidth()) ist, hat der ball auf der rechten Seite das Fenster verlassen. Genauso für die y-Koordinate des Balls, nur muss man da getHeight() statt getWidth() verwenden...
 

jagdfalke

Bekanntes Mitglied
Du musst natürlich auch bedenken in welchem Winkel der Ball dan abprallt. Da hilft ein wenig Vektorgeometrie ganz gut.

mfg
jagdfalke
 

Campino

Top Contributor
jagdfalke: warum so kompliziert?

Code:
if(ball.x<=0||ball.x>=frame.getWidth()){
    bewegungX=bewegungX*-1;
}
if(ball.y<=0||ball.y>=getHeight()){
    bewegungY=bewegungY*-1;
}

ball.x=ball.x+bewegungX;
ball.y=ball.y+bewegungY;

sieht so ganz gut aus...für einfache Programme reicht das...oder willst du eine ganze Physiksimulation?
 

jagdfalke

Bekanntes Mitglied
Ich auch, aber wenn du den einen nicht weißt, weißt du den anderen auch nicht, gelle!?

So wie Campino das gemacht hat ist natürlich schlau! Man weiß nix über die Winkel und er macht trotzdem was man will :D

mfg
jagdfalke
 

GagamehlO

Aktives Mitglied
So wie Campino das gemacht hat ist es doch einfallswinkel = ausfallswinkel....???
Ich habs bis jetzt auch immer so gemacht...
Sieht eigentlich ganz gut aus so!

Wobei man eher so übrprüfen muss

if(ballx>=(300-ballsize))... Ansonten rollt der Ball schon aus dem Fenster.
 

André Uhres

Top Contributor
Code:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
/**
 *
 * @author  camickr
 */
public class TimerAnimation extends JLabel implements ActionListener{
    int deltaX = 2;
    int deltaY = 3;
    int directionX = 1;
    int directionY = 1;
    public TimerAnimation( int startX, int startY, int deltaX, int deltaY,
            int directionX, int directionY, int delay){
        this.deltaX = deltaX;
        this.deltaY = deltaY;
        this.directionX = directionX;
        this.directionY = directionY;
        try {
            setIcon( new ImageIcon(new URL("http://www.fh-bochum.de/fb3/images/red-ball.gif") ));
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
        setSize( getPreferredSize() );
        setLocation(startX, startY);
        new javax.swing.Timer(delay, this).start();
    }
    public void actionPerformed(ActionEvent e) {
        Container parent = getParent();
        //  Determine next X position
        int nextX = getLocation().x + (deltaX * directionX);
        if (nextX < 0) {
            nextX = 0;
            directionX *= -1;
        }
        if ( nextX + getSize().width > parent.getSize().width) {
            nextX = parent.getSize().width - getSize().width;
            directionX *= -1;
        }
        //  Determine next Y position
        int nextY = getLocation().y + (deltaY * directionY);
        if (nextY < 0) {
            nextY = 0;
            directionY *= -1;
        }
        if ( nextY + getSize().height > parent.getSize().height) {
            nextY = parent.getSize().height - getSize().height;
            directionY *= -1;
        }
        setLocation(nextX, nextY);      //  Move the label
    }
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.getContentPane().setLayout(null);
        frame.getContentPane().add( new TimerAnimation(10, 10, 2, 3, 1, 1, 10) );
        frame.getContentPane().add( new TimerAnimation(300, 100, 3, 2, -1, 1, 20) );
        frame.setSize(400, 400);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
YAZZ BlueJ Bewegung einer Figur im Kreis Java Basics - Anfänger-Themen 4
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
N Kreismuster auf Bestehendem Kreis erstellen Java Basics - Anfänger-Themen 10
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
C Kleinsten Kreis einer Punktmenge bestimmen Java Basics - Anfänger-Themen 4
CptK Interface Kleine Kreise in großem Kreis anordnen Java Basics - Anfänger-Themen 3
Y Kreis auf einer Kreisbahn bewegen Java Basics - Anfänger-Themen 5
P Erste Schritte Kreis animieren Java Basics - Anfänger-Themen 2
A Kreisumfang/-Fläche vom Kreis berechnen Java Basics - Anfänger-Themen 39
H Kreis verschieben Java Basics - Anfänger-Themen 10
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
X Kreis/Linie Programmieren Java Basics - Anfänger-Themen 1
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
L Dreieck Kreis Java Basics - Anfänger-Themen 12
A Kreis,Radius Programm Java Basics - Anfänger-Themen 3
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
A wie Kreis mit Schleife versetzten? Java Basics - Anfänger-Themen 25
O Punkte auf einem Kreis "wandern" lassen Java Basics - Anfänger-Themen 3
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
D Kreis mit Pfeiltaste bewegen Java Basics - Anfänger-Themen 3
K Bild auf Kreis packen Java Basics - Anfänger-Themen 2
E Kreis erstellen Java Basics - Anfänger-Themen 10
B Einen Kreis erzeugen Java Basics - Anfänger-Themen 3
S Erzeuge einen Kreis Java Basics - Anfänger-Themen 16
B Kreis,Punkt,Zylinder Java Basics - Anfänger-Themen 6
D Punktberechnung im Kreis Java Basics - Anfänger-Themen 15
TheKing Bild nur in Kreis sichtbar machen Java Basics - Anfänger-Themen 6
K Kreis mit neuer Position zeichnen Java Basics - Anfänger-Themen 3
M Umfang von Rechteck oder Kreis anhand der Parameter Java Basics - Anfänger-Themen 2
L Klickbarer Bereich in einem Kreis Java Basics - Anfänger-Themen 13
D kreis gelb gefüllt aber schwarzer rand. Java Basics - Anfänger-Themen 2
K Kreis Zeichnen ? Code Richtig aber keine Zeichung Java Basics - Anfänger-Themen 8
L Kreis der sich bewegt Java Basics - Anfänger-Themen 11
G Kreis auf JComponent zeichnen Java Basics - Anfänger-Themen 8
0 Klasse Kreis Java Basics - Anfänger-Themen 4
P Java-Applet, Kreis zeichnen Java Basics - Anfänger-Themen 4
E Kreis in Frame ,den man mit der Maus versetzen kann? Java Basics - Anfänger-Themen 2
7 Kreis zeichnen Java Basics - Anfänger-Themen 4
G contains - Punkt in Kreis enthalten? Java Basics - Anfänger-Themen 6
A Kreis mit gedrückter Maustaste bewegen. Java Basics - Anfänger-Themen 2
S Thread - Kugel im Kreis hin-und herflitzen lassen Java Basics - Anfänger-Themen 3
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
N Bälle abprallen lassen Java Basics - Anfänger-Themen 10
P Rechteck Zufallsverschiebung mit Abprallen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben