Kugel bewegen?

Status
Nicht offen für weitere Antworten.

23

Bekanntes Mitglied
Hey,

ich möchte auf einem JPanel eine Kugel malen und diese bei jedem Mouseklick bewegen.

Ich weiß ungefähr wie dies funktioniert jedoch würde ich es gerne so schreiben, dass die Kugel einen eigene Klasse bekommt.

Kann ich Kugel von etwas ableiten?

Ich habe mir so gedacht die Kugel hat zwei int Werte für die Pos und setter und getter.

So kann ich in der JPanel Klasse genau alles festlegen bzw. malen aber ist dies der richtige bzw. beste Weg?

Vlg
 

raven

Bekanntes Mitglied
leite sie doch von Point ab! der hat eine x- bzw. y-koordinate...
und deine Methoden kannst du auch so noch hinzufügen...
mfg raven
 

hdi

Top Contributor
leite sie doch von Point ab!

Oh Gott bloss nicht...
Eine Kugel kannst du beschreiben durch die linke obere Ecke, also zwei int-Werte.
Ja, oder einen Punkt.

Aber eine Kugel ist kein Punkt, das ist ein Fehlgriff in Sachen Vererbung.
Man leitet nicht ab, nur weil man ne Eigenschaft aus einer Klasse braucht!
 

23

Bekanntes Mitglied
Hey,

danke für den Tipp!

Aber wie mache ich das wenn ich eine Kugel möchte? Wenn ich eine eigene Klasse schreibe müsste ich aufwendig berechnen wo sich die Kugel auf dem JPanel befindet?

Geht das nicht einfacher?

Ich möchte einfach bei Klick/oder Tastendruck eine Methode aufrufen setNeuePos() oder setEinsweiter() + repaint()

und ich möchte auf einfache Weiße wissen wo dieses Objekt im JPanel ist. Diese Info soll aber in der Kugelklasse bekannt sein, nicht in der JPanel Klasse!
 
Zuletzt bearbeitet:

hdi

Top Contributor
Was willst du denn "berechnen"? Das geht recht einfach:

[HIGHLIGHT="Java"]public class Kugel {

private Point position;
private int durchmesser;

public Kugel(int startX, int startY){
position = new Point (startX, startY);
durchmesser = 20; // px
}

public void move(int xtrans, int ytrans){

position.translate(xtrans,ytrans);
}

public void paint(Graphics g) {
g.drawOval(position.x, position.y, durchmesser, durchmesser);
}
}[/HIGHLIGHT]

Die Position ist dem Panel jetzt nicht bekannt, das panel macht in seiner
paintComponent Methode nur:

[HIGHLIGHT="Java"]meineKugel.paint(g);[/HIGHLIGHT]

und die Kugel malt sich selbst.

Und verschieben tuste sie mit der move-Methode.
 
Zuletzt bearbeitet:

23

Bekanntes Mitglied
Habe mal ein kleines Testprogramm erstellt.

[HIGHLIGHT="Java"]
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Panel extends JPanel {

private Kugel mKugel;

public Panel() {

mKugel = new Kugel(10,10);

setPreferredSize(new Dimension(400,400));

addMouseListener(new MouseListener() {

@Override
public void mouseClicked(MouseEvent e) {

mKugel.move(15, 15);

repaint();

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}


});

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

g.translate(super.getSize().width / 2, super.getSize().height / 2);

mKugel.paint(g);

}

public static void main(String[] args) {

JFrame a = new JFrame("as");

a.add(new Panel());

a.pack();

a.setVisible(true);

}

}
[/HIGHLIGHT]

Wie kann ich nun merken ob auf die Kugel geklickt wird oder ins Leere?

Soll ich nun alle Grafik Objekte wie deine aufbauen also per Point für die Position?

vlg
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Bei einem MouseEvent die Entfernung zwischen dem event.getPoint() und der Position der Kugel ausrechnen (dafür gibbt's Methoden in "Point") und dann schauen, ob die Entfernung kleiner ist als der Radius der Kugel.
 

hdi

Top Contributor
Also alle Objekte die du hast sollten so sein wie die Kugel, ja schon.
Sie haben einen Punkt der ihre Position beschreibt, und können sich selbt malen
wenn man ihnen ein Graphics-Objekt gibt (paint-Methode).

Wie kann ich nun merken ob auf die Kugel geklickt wird oder ins Leere?


[HIGHLIGHT="Java"]public void mouseClicked(MouseEvent e) {
Point clicked = e.getPoint();
if( mKugel.contains(clicked) ){
// es wurde auf die Kugel geklickt
}
}

// in der Kugel-Klasse eine neue Methode:
/* returns whether the specified Point lies within this ball */
public boolean contains(Point p) {
int radius = durchmesser / 2;
return (p.distance(position.x + radius, position.y + radius) <= radius);
}[/HIGHLIGHT]
 

Marco13

Top Contributor
Aaahho-wohoh, ja, sorry, ... hdi hat die "richtige" Version gepostet, aber nur in bezug auf die vorgeschlagene Art, die Kugel zu implementieren... : Ich würde eine Kugel (bzw einen Kreis) grundsätzlich über seinen Mittelpunkt und seinen Radius beschreiben...
 

23

Bekanntes Mitglied
Hey,

danke schonmal :)

Kann mir mal jemand erklären wieso position.translate(position.x,--position.y);

Nach 2-4 Mouseklick rießige Abstände bringt?

Vlg
 

hdi

Top Contributor
Ja, "menschennäher" ist sicherlich Marco's Variante.
Im Endeffekt ist es egal für welche Version du dich entscheidest:
Entweder die Kollisions-Überprüfung wird intuitiver, oder der Aufruf von drawOval.
 

hdi

Top Contributor
translate(x,y) verschiebt den Punkt um x und y.
D.h. wenn du die Methode mit den Werte des Punktes selber aufrufst,
schleuderst du das Ding gleich mal paar hundert Pixel weiter.
(je nach Startposition)

... btw: negative Werte verschieben nach links/oben, positive nach rechts/unten.
 

23

Bekanntes Mitglied
Die Sprünge werden immer größer!

Auch wenn ich die Startwerte speichere und nur diese nutze!

position.translate(--mX,mY);

mX, mY hat die Startwerte aus dem Kon.
 
Zuletzt bearbeitet:

hdi

Top Contributor
Schau mal: translate(x,y) verschiebt den Punkt, auf den du das anwendest, um x und y.
Der Punkt, den das betrifft, ist ja die position von der Kugel.

Wenn du diese doofe Kugel also um eins (als Ziffer: 1) nach rechts bewegen willst, machste

[HIGHLIGHT="Java"]translate(1,0); // und das bleibt so, egal wie oft du das machst.[/HIGHLIGHT]
 

23

Bekanntes Mitglied
Achso dann muss x bzw y nicht die Koordinate sein sondern kann einfach 1 bzw 0 mit Vorzeichen? Sehs grad in der Api :)

(x + dx, y + dy).

Ok Danke!!
 

hdi

Top Contributor
Genau, das ist einfach der Wert, um den es den Punkt verschiebt. Nicht die neue Position.

(Depp) Nein Spass sry, ich bin grad lustig drauf nich Ernst nehmen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
R Texturproblem bei Kugel in LWJG Spiele- und Multimedia-Programmierung 3
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
Kr0e 3D Kugel gätten Spiele- und Multimedia-Programmierung 9
M Exakte Position auf Kugel mit Maus picken , Java3d Spiele- und Multimedia-Programmierung 14
Z Schach Figuren bewegen Spiele- und Multimedia-Programmierung 4
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
astro151 JButtons mit Mausklicks bewegen Spiele- und Multimedia-Programmierung 2
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
javampir Lange Hintergrundgrafik einfügen und bewegen Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
R Canvas Circle bewegen? Spiele- und Multimedia-Programmierung 14
K auf Mapraster frei bewegen Spiele- und Multimedia-Programmierung 7
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
K Zum Ziel bewegen Spiele- und Multimedia-Programmierung 4
Helgon Große Welt bewegen? Spiele- und Multimedia-Programmierung 15
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
G 2D Welt bewegen Spiele- und Multimedia-Programmierung 20
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
M Figur bewegen Spiele- und Multimedia-Programmierung 7
F RPG - Spielfigur soll sich nicht frei bewegen können. Anregugen wären gerne gesehen^^ Spiele- und Multimedia-Programmierung 13
N Objekt entgegengesetzt bewegen Spiele- und Multimedia-Programmierung 8
D Sprite zur Maus bewegen Spiele- und Multimedia-Programmierung 9
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
R Teilgraphen bewegen Spiele- und Multimedia-Programmierung 5
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
Z Obejkt drehen & vorwärts bewegen Spiele- und Multimedia-Programmierung 9
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
G Bewegen von Objekten Spiele- und Multimedia-Programmierung 4
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben