Image nach MausMotion rotieren

Syny

Mitglied
Hallo Leute,

ich hatte vor ein Bild je nachdem wie der Mauszeiger steht zu rotieren, um genau zu sein soll die rechte Mitte des Bildes immer Richtung des Mauszeigers zeigen solange dieser im JFrame ist. Habe nun versucht immer den Winkel berechnen zu lassen mit ( arctan((y2 - y1)/(x2 - x1))) )wobei x1,y1 der Punkt auf dem Bild und x2,y2 der Punkt der Mauszeigerposition ist. Dies habe ich dann mit Math.toDegrees umgeformt um damit
später die Graphics Komponente zu drehen.

Und hier entsteht nun wahrscheinlich das Problem.
Java:
private void drawPlayer(Graphics2D g){
		rota = player.getRotation();
		double newRota= old-rota;
		BufferedImage blankCanvas = new BufferedImage(player.getLook().getWidth(),player.getLook().getHeight(),BufferedImage.TYPE_INT_ARGB);
		g.rotate(newRota,player.f_PosX+(player.getLook().getWidth())/2,player.f_PosY+(player.getLook().getHeight())/2);
		g.drawImage(player.getLook(),(int)player.f_PosX,(int)player.f_PosY,null);															
		old = rota;
		
	}
Die getRotation Methode gibt folgendes zurück:
Java:
return(Math.toDegrees(Math.tanh(((f_yPointer-(f_PosY+(getLook().getHeight()))/2))/((f_xPointer-(f_PosX+(getLook().getWidth())))))));

Also drehen tut es sich schon beim bewegen des Mauszeigers nur einfach nicht in die Richtung von diesem. Ich weiß nicht wie ich das umsetzen soll ich muss ja bei jedem zeichnen die Rotation berechnen die die Differenz von der neuen Mausposition zur Alten beschreibt.

Hat da jemand eine Idee bzw. kennt eine andere Methode?

MFG Syny

PS: Hoffe mein Anliegen ist einigermaßen Verständlich :)
 

dcc

Aktives Mitglied
Bin mir nicht sicher was du genau willst, aber:

1. Jedes JPanel / JFrame hat eine paintComponent() Methode die man beim zeichnen in das jeweilige JPanel überschreibt ! Da drin malst du deinen Kram hin. Bei dir scheint es die drawPlayer Methode zu sein - die kann von Java nicht automatisch updated werden !


2. Du brauchst dann die Rotation als Klassenvariable, im MotionListener berechnest du diese Variable immer neu. Ganz zum Schluss kommt ein repaint() hin, das ruft automatisch die paintComponent() methode aufs neue auf und lässt den inhalt neu zeichnen !

3. In der painComoponent Methode benutzt zu diese Variable um die Drehung darzustellen.

-------

Alternativ:
Jedes JFrame, JPanel etc. hat diese paintMethode in sich. Wenn du nun direkt im ActionListener zeichnen willst, dann benutzt du das Objekt (JPanel bla) in dem gezeichnet werden soll mit bla.getGraphics().drawRectangle.....

Ist der ActionListener im Panel implementiert in dem auch gezeichnet wird (class bla extends JPanel), ist es this.getGraphics() was dir das Graphics2D Objekt vom JPanel zurück gibt, auf dass du dann außerhalb der paintComponent() Methode zugreifen und reinmalen kannst.
 
Zuletzt bearbeitet:

JCODA

Top Contributor
Aiaiai,

so viel Nichtwissen in einem Post hab' ich schon lang nichtmehr gesehen dcc.

Ein JFrame hat keine paintComponent.
getGraphics() sollte man, wenn man passive rendering betreiben möchte nicht verwenden.
und falls man active rendering betreiben möchte, muss man andere Dinge beachten.

der TO hat offensichtlich nicht mit Swing, sondern mit der Mathematik die dahintersteckt, Probleme.

Ich hab' dem TO mal ne private Nachricht geschrieben, die das Problem mit der AffineTransform-Klasse löst.
 

Syny

Mitglied
Uiuiui,

zuerst mal danke für die Antworten und die PN werde mir die gleich mal durchlesen. Aber ja mir ging es einzig und allein um die Mathematik dahinter daher wollte ich auch nicht den ganzen Code posten.
1. Jedes JPanel / JFrame hat eine paintComponent() Methode die man beim zeichnen in das jeweilige JPanel überschreibt ! Da drin malst du deinen Kram hin. Bei dir scheint es die drawPlayer Methode zu sein - die kann von Java nicht automatisch updated werden !

Die wird natürlich mit jedem Durchlauf neu geupdated es bewegt sich ja nur nicht in die richtige Richtung :)

2. Du brauchst dann die Rotation als Klassenvariable, im MotionListener berechnest du diese Variable immer neu. Ganz zum Schluss kommt ein repaint() hin, das ruft automatisch die paintComponent() methode aufs neue auf und lässt den inhalt neu zeichnen !

Die x und y variable wo der Mauszeiger sich gerade befindet wird auch mit jedem Durchlauf neu übergeben habe mir den auch schon ausgeben lassen das stimmt soweit.

3. In der painComoponent Methode benutzt zu diese Variable um die Drehung darzustellen.

Ja da liegt das eigentliche Problem die Berechnung um wie viel es sich drehen muss stimmt wohl nicht :)


MFG Syny
 

dcc

Aktives Mitglied
Aiaiai,

so viel Nichtwissen in einem Post hab' ich schon lang nichtmehr gesehen dcc.

Ein JFrame hat keine paintComponent.
getGraphics() sollte man, wenn man passive rendering betreiben möchte nicht verwenden.
und falls man active rendering betreiben möchte, muss man andere Dinge beachten.

der TO hat offensichtlich nicht mit Swing, sondern mit der Mathematik die dahintersteckt, Probleme.

Ich hab' dem TO mal ne private Nachricht geschrieben, die das Problem mit der AffineTransform-Klasse löst.

Was ein Blödsinn du redest und dann auch noch andere des Unwissens bezichtigen !
Schau dir die API genauer an. Man kann definitiv auf JFrame plotten und dessen paint Methoden überschreiben, allerdings muss diese evntl manuell aufgerufen werden (bei Swing).

Das Teil erbt schließlich auch von java.awt.Container !
Und wieso schreibst PMs, lass die Leute doch sehen was du erzählst :x

Das hier zeichnet jedenfalls wunderbar auf JFrame.

Java:
package test;

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Test extends JFrame {

	Test() {
		setPreferredSize(new Dimension(500, 500));
		setVisible(true);
		pack();
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(0, 0, 50, 50);
	}

	public static void main(String[] args) {
		Test t = new Test();
	}
}
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Also es gibt da grundsätzlich zwei verschiedene Wege um diese Rotation zu verwirklichen.

1. per Trigonometrie. Das bedeutet in diesem Fall mit Math.atan2 (nicht Math.atan!) den Winkel berechnen und damit dann rotieren.
2. eine Rotationsmatrix direkt aus den Koordinaten berechnen und die dann dem Konstruktor von AffineTransform übergeben. (d.h. Mausposition - Rotationszentrum, das Ergebnis normalisieren und dann new AffineTransform(x, y, -y, x, 0, 0))
 

JCODA

Top Contributor
Was ein Blödsinn du redest und dann auch noch andere des Unwissens bezichtigen !
Schau dir die API genauer an. Man kann definitiv auf JFrame plotten und dessen paint Methoden überschreiben, allerdings muss diese evntl manuell aufgerufen werden (bei Swing).

Das Teil erbt schließlich auch von java.awt.Container !
Und wieso schreibst PMs, lass die Leute doch sehen was du erzählst :x

Natürlich kann man paint(Graphics g) auf einem JFrame überschreiben. Hier hast du nur zwei Probleme:

1. ist paint != paintComponent (Wie du oben Behauptet hast)
2. sollte man diese nicht überschreiben, da man dann über Komponenten zeichnet.

Und warum ich hier keinen Quellcode poste liegt wohl an http://tinyurl.com/onsowkh .
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
G Ein Image langsam einblenden und nach 5 Sekunden ausblenden? Java Basics - Anfänger-Themen 10
X Image nach BufferedImage wandeln ? Java Basics - Anfänger-Themen 9
P umwandeln von graphics nach image Java Basics - Anfänger-Themen 4
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
T Image Icon Java Basics - Anfänger-Themen 3
K File (png) in Image laden Java Basics - Anfänger-Themen 3
M Image löschen Java Basics - Anfänger-Themen 2
G Image in Vordergrund Java Basics - Anfänger-Themen 3
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
N Best Practice Image recognition fuzzy Superhash berechnen Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
R Image drehen Java Basics - Anfänger-Themen 1
R Image Teilen Java Basics - Anfänger-Themen 3
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
N Image von Resource wird nicht geladen Java Basics - Anfänger-Themen 2
N Datentypen Image zu Byte-Array Java Basics - Anfänger-Themen 4
F Image wird nicht gezeichent?! Java Basics - Anfänger-Themen 21
N Hintergrund image mit .setContentPane Java Basics - Anfänger-Themen 6
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
S buffered image Java Basics - Anfänger-Themen 18
V Scale displayed Image via JCheckBox Java Basics - Anfänger-Themen 1
I Resize Image - Einlesen von InputStream Java Basics - Anfänger-Themen 3
M Image Download klappt nicht mehr Java Basics - Anfänger-Themen 4
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
L Erste Schritte Java Image und Video-Slideshow GUI Java Basics - Anfänger-Themen 3
D Kleinere Positionsangabe als einzelne Pixel bei Image? Java Basics - Anfänger-Themen 28
S Image in Panel laden Java Basics - Anfänger-Themen 12
H Prüfen, ob jpg image schon vorhanden ist, bevor es geladen wird Java Basics - Anfänger-Themen 13
V Image Crawler Java Basics - Anfänger-Themen 3
P Erste Schritte Buffered Image splitten und darstellen Java Basics - Anfänger-Themen 2
P Erste Schritte Image anzeigen in ausführbarer jar mit der Toolkit class Java Basics - Anfänger-Themen 8
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
A Image (Bitmap) in String (für XML) Java Basics - Anfänger-Themen 7
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
T Image ist Null - warum? Java Basics - Anfänger-Themen 18
V Image -> 2D Array (int [][]) Java Basics - Anfänger-Themen 4
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
V FileInputStream auf ein swt.Image Java Basics - Anfänger-Themen 6
A Wie kann man etwas von Typ Image wieder löschen? Java Basics - Anfänger-Themen 7
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
G Problem mit Image.IO.read( File ) Java Basics - Anfänger-Themen 3
G Image spiegeln Java Basics - Anfänger-Themen 17
Y Trotz add wird Image in GradBagLayout nicht angezeigt Java Basics - Anfänger-Themen 5
Spin Image helper Java Basics - Anfänger-Themen 6
M Image Metadaten setzen Java Basics - Anfänger-Themen 2
Spin Backgrond Color von Image ermitteln Java Basics - Anfänger-Themen 2
C Image draw... Java Basics - Anfänger-Themen 7
M Image-Icon Ändern Java Basics - Anfänger-Themen 15
J Image upload auf ImageShack,TinyPic usw. Java Basics - Anfänger-Themen 11
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
M Image zeichenen mit Double Werten Java Basics - Anfänger-Themen 4
B polyline auf buffered image malen Java Basics - Anfänger-Themen 2
G Image to File Java Basics - Anfänger-Themen 4
T Image Position erkennen Java Basics - Anfänger-Themen 6
Spin Image skalieren Java Basics - Anfänger-Themen 2
Spin Background Image Java Basics - Anfänger-Themen 2
K Image / drawImage Java Basics - Anfänger-Themen 2
P Buffered Image, Bereich ausschneiden Java Basics - Anfänger-Themen 3
F Image Editor Java Basics - Anfänger-Themen 2
R Image aus jar laden (dieses mal awt) Java Basics - Anfänger-Themen 19
B Image flimmert Java Basics - Anfänger-Themen 4
Povlsen84 Image exakt erzeugen Java Basics - Anfänger-Themen 5
B Teile einer Image in neue Image kopieren Java Basics - Anfänger-Themen 4
X ARGB Werte auslesen aus Image Java Basics - Anfänger-Themen 2
O Image Loader laedt bild nicht Java Basics - Anfänger-Themen 11
H String to image! Java Basics - Anfänger-Themen 6
H2SO3- image beim awt frame wegmachen Java Basics - Anfänger-Themen 2
M Probleme mit Manifest und Image Java Basics - Anfänger-Themen 2
T Java Bilderverwaltung - Image Fetcher Problem Java Basics - Anfänger-Themen 4
E Image in Datei speichern bzw anzeigen Java Basics - Anfänger-Themen 5
G Image laden Java Basics - Anfänger-Themen 16
O Drag & Drop mit Image? Java Basics - Anfänger-Themen 2
G Image/-Icon wird nicht auf JPanel angezeigt Java Basics - Anfänger-Themen 4
M Image aus JPanel Java Basics - Anfänger-Themen 2
G Kompletten (image) Array löschen Java Basics - Anfänger-Themen 14
P Fileinputstream to image? Java Basics - Anfänger-Themen 3
G Image Problem Java Basics - Anfänger-Themen 5
G Image Java Basics - Anfänger-Themen 3
M draw.Image Java Basics - Anfänger-Themen 11
O Image laden Java Basics - Anfänger-Themen 6
G Image Java Basics - Anfänger-Themen 2
S Image-Datei mit relativem Pfad angeben Java Basics - Anfänger-Themen 3
S Botton und Image kombinieren Java Basics - Anfänger-Themen 3
S import javax.image.io.*; funktioniert nicht Java Basics - Anfänger-Themen 28
D Image drehen Java Basics - Anfänger-Themen 6
DeeDee0815 Uncaught error fetching image Java Basics - Anfänger-Themen 2
A Image erstellen Java Basics - Anfänger-Themen 3
N Grösse eines Image ändern? Java Basics - Anfänger-Themen 4
I Image Dateinformationen auslesen Java Basics - Anfänger-Themen 7
A image uploader applet Java Basics - Anfänger-Themen 10
S image speichern Java Basics - Anfänger-Themen 12
D ImageIO metadata auslesen aus png image Java Basics - Anfänger-Themen 2
G Ausmaße eines Image-Object herrausfinden Java Basics - Anfänger-Themen 4
R Einem Image-Object Alpha-Transparenz hinzufügen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben