Sprite zur Maus bewegen

Status
Nicht offen für weitere Antworten.

Dagobert

Bekanntes Mitglied
Die Überschift sagt eigentlich alles.
Ich versuche gerde mein Sprite bis zur Maus entlang laufen zu lassen, leider weis ich nicht ganz wie ich das anstellen soll.
Ich habe die Funktion Linie2D gefunden. Eine Linie ist ja nichts anderes als eine Gerade, lassen sich damit auch Funktionswerte bestimmen?
Falls nicht bleibt mir ja immer noch die Funktion manuel zu berechnen mit den zwei Punkten die ich habe (Sprite und Maus). Jedoch klappt das leider nicht vllt. übersehe ich gerade ein Fehler in meiner Formel:
[Java]
public void update(long elapsedTime){
super.update(elapsedTime);

if(target != null){
double m = (target.getY() - getY()) / (target.getX() - getX());
double b = -m * getX() + getY();

setVelocityX(0.05F);

setY(Math.round(m*getX()+b));
if(getX() == target.getX()){
target = null;
setVelocityX(0);
}

if(getVelocityX() > 0){
setAnim(right);
}
}[/Java]
oder ich muss X/Y irgendwie anders Setzen :D

mfg. Dagobert
 

Quaxli

Top Contributor
Mal auf die Schnelle zusammengeschustert:

Java:
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
import java.awt.*;

public class Test extends JPanel implements MouseMotionListener, Runnable{


	private static final long	serialVersionUID	= 1L;
	JFrame frame;
	Point point;
	Hunter hunter;
	double angle = 0;

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

	public Test() {
		hunter = new Hunter();
		point = new Point(0,0);

		setPreferredSize(new Dimension(800,600));
		addMouseMotionListener(this);
		
    frame = new JFrame("MouseHunter");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.pack();
		frame.setVisible(true);
		
		Thread t = new Thread(this);
		t.start();
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		Graphics2D g2 = (Graphics2D)g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		hunter.paintHunter(g2);
		
	}

	
	public void run() {
		
		long last = System.nanoTime();
		long delta = 0;
		
		while(frame.isVisible()){
			
			delta = System.nanoTime() - last;
			last = System.nanoTime();
			hunter.move(delta);
			
			computeAngle();
			hunter.setDirection(angle);
			
      try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
      repaint();
			
		}
		
	}

	private void computeAngle(){
		
		double diffx = point.x - (hunter.x + hunter.width/2);
		double diffy = point.y - (hunter.y + hunter.height/2);
				
		angle = Math.toDegrees(Math.atan((diffy/diffx)));
	  angle += 90;
	  
	  if(diffx<0){
	  	angle += 180;
	  }
	  
	  
	  if(angle<0){
	  	angle+= 360;
	  }
		
	}
	
	

	public void mouseDragged(MouseEvent e) {
		
	}

	public void mouseMoved(MouseEvent e) {
	  point = e.getPoint();
	}


}

class Hunter extends Rectangle2D.Double {
	
	double dx = 0;
	double dy = 0;
	double speed = 150;
	
	public Hunter(){
		super(395,295,10,10);
	}
	
	public void move(long delta) {
		
    if(dx!=0){
      x += dx*(delta/1e9);
    }
    
    if(dy!=0){
      y += dy*(delta/1e9);
    }
		
	}

	public void setDirection(double angle) {
	
		dy = Math.cos(Math.toRadians(angle)) * speed * -1;
		dx = Math.sin(Math.toRadians(angle)) * speed; 
		
	}

	public void paintHunter(Graphics g){
		g.setColor(Color.RED);
		g.fillOval((int)x,(int)y,(int)width,(int)height);
	}
	
	
}
 

Dagobert

Bekanntes Mitglied
Ich merk schon ich war schon wieder komplett auf dem Holzweg, kann das sein? :D Ich werde mir gleich mal dein Beispiel angucken und gucken was das alles für Mathematische Dinger sind ;) und bei Fragen mich wieder Melden :D
 

Dagobert

Bekanntes Mitglied
Oder Du schreibst hier was rein. Bevor Du mit erhobenem Arm vor dem PC sitzt und nix passiert.
wie meinst du das? Willst du damit sagen das ich selber mehr nachdenken soll? :D
Ich hab doch nicht erwartet das du mir wieder so eine ausfühliche Lösung presäntierst ;) (torzdem danke, ist echt besser so zu verstehen). Ich wollte doch nur ein Denkanstoß wie das Funktionieren könnte (oder warum es ebend nicht funktioniert) und welche mathematischen Mittel es dafür in Java gibt ;)
Ich sollte mir echt mal die Math API angucken bevor ich alle Rechensachen selber tippe :D

mfg. Dagobert
 

Dagobert

Bekanntes Mitglied
erinner mich blos nicht an die Schulzeit :D
Ich bin froh das das vorbei ist und ab Oktober ins Sutdium geht :D
 

Dagobert

Bekanntes Mitglied
So dann komme ich mal wieder zurück aufs Thema:

Ich habe das ganze mal manuel veranschaulicht (siehe Anhang)
Ich habe die Distanz d zwischen den beiden Punkten mit dem Phytagoras bestimmt. Dannach wird der Winkel an s mithilfe des Tangens o.a bestimmt. Da jedoch das KS des Computers gedreht ist werde nochmal 90° (richtig ??? oO) addiert um auf den eigentlichen Winkel zu kommen der für das Com. KS richtig ist. Dannach wird der Winkel in Bogenmaß umgerechnet. Dy wird dann dadruch berechnet indem man den Bogenmaß mal die Geschwindigkeit setzt. (Wofür ist das -1 da gut?) Dy gibt die Pixelversetzung von y pro GameLoop an. Das gleiche wird für die X-Koordinate auch noch gemacht. Wobei dx die Pixelversetzung von x pro GameLoop angibt.
Ist das soweit richtig?

Jedoch möchte ich jetzt auch noch den Weg angeben den der Sprite bis zum aktuellen Augenblick zurück gelegt hat. Ich hatte gedacht ich müsste einfach
Java:
 weg += dx*delta+dy*delta
rechnen, aber dem ist offensichtlich nicht so. Warum? :D

mfg. Dagobert
 

Quaxli

Top Contributor
Das mit dem "Melden" sollte ein sprachlicher Witz sein. Ist wohl nicht so angekommen... ;)


...
Ich habe die Distanz d zwischen den beiden Punkten mit dem Phytagoras bestimmt. Dannach wird der Winkel an s mithilfe des Tangens o.a bestimmt. Da jedoch das KS des Computers gedreht ist werde nochmal 90° (richtig ??? oO) addiert um auf den eigentlichen Winkel zu kommen der für das Com. KS richtig ist.

Nö, das kommt daher, daß ich eigentlich den falschen Winkel berechne...
Genau, der andere solltete es sein. Mit dem KS des Computers hat das ja eigentlich nix zu tun. Da habe ich es mir etwas einfacher gemacht, weil das Ganze auf die Schnelle geproggt war.

Dannach wird der Winkel in Bogenmaß umgerechnet. Dy wird dann dadruch berechnet indem man den Bogenmaß mal die Geschwindigkeit setzt. (Wofür ist das -1 da gut?) Dy gibt die Pixelversetzung von y pro GameLoop an. Das gleiche wird für die X-Koordinate auch noch gemacht. Wobei dx die Pixelversetzung von x pro GameLoop angibt.

Das Bogenmaß ist notwendig, weil die Winkelfunktionen in Java Winkel im Bogenmaß erwarten bzw. liefern.
Das -1 ist diesmal wirklich dafür da, das KS umzudrehen, da in Y-Richtung Null am oberen Bildschirmrand ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rotation von Sprite klappt nicht Spiele- und Multimedia-Programmierung 4
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
S 2D Sprite Level Editor Konzeptfrage Spiele- und Multimedia-Programmierung 17
M Sprite Library (in Anlehnung an Quaxli) Spiele- und Multimedia-Programmierung 14
X JOGL - 2D Sprite richtig platzieren Spiele- und Multimedia-Programmierung 4
F LWJGL Sprite Overlay Problem (halbtransparent) Spiele- und Multimedia-Programmierung 2
P RPG Sprite-Player Anim Problem Spiele- und Multimedia-Programmierung 11
H Mausbewegungen wie eine echte Maus in 3 dimensionalen Spielen Spiele- und Multimedia-Programmierung 12
N Schüsse in Richtung der Maus Spiele- und Multimedia-Programmierung 5
B GLFW 3D Maus- Input Spiele- und Multimedia-Programmierung 7
Arif Maus-Objekt im Player Klasse implementieren !? Spiele- und Multimedia-Programmierung 2
B Maus Cursor aus/einblenden bei Unity 3d mit .js Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
S Mausklicks innerhalb eines JFrames/SWTBrowser ohne richtige Maus simulieren Spiele- und Multimedia-Programmierung 6
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
M Maus an Fedenkreuz heften Spiele- und Multimedia-Programmierung 16
M Beim schießen richtet sich die Kugel nach der Maus aus (Quaternion) Spiele- und Multimedia-Programmierung 5
G Maus springt --> Free-Hand-Zeichnen Spiele- und Multimedia-Programmierung 2
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
S Schiff in Richtung der Maus rotieren - Problem :/ Spiele- und Multimedia-Programmierung 5
M Grafikprogramm, zeichnen mit Maus Spiele- und Multimedia-Programmierung 7
S Problem bei Kartenbewegung mit Maus! Spiele- und Multimedia-Programmierung 3
M Exakte Position auf Kugel mit Maus picken , Java3d Spiele- und Multimedia-Programmierung 14
D Bilderpositionierung mit Maus Spiele- und Multimedia-Programmierung 23
T Maus-Cursor-Position manipulieren Spiele- und Multimedia-Programmierung 3
K Ein 3D-Objekt mit Maus auswählen Spiele- und Multimedia-Programmierung 5
T Problem mit Maus und Bildschirm Spiele- und Multimedia-Programmierung 3
C NavigationBehaviour mit Maus und Keyboard Spiele- und Multimedia-Programmierung 5
A Maus im Spiel-Menu oder nicht? Spiele- und Multimedia-Programmierung 5
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
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
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
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
2 Kugel bewegen? Spiele- und Multimedia-Programmierung 17
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
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