kollissionsabfrage

Status
Nicht offen für weitere Antworten.
E

Exodus

Gast
Hallo,

1.) Also wie mache ich am besten eine Kollisionsabfrage von fillOval????
2.) Und was bevorzugt ihr so für einen Leveleditor? arraybassiert?

MFG
Exodus
 
C

ClassNotFound

Gast
Ellipsenberechungen hat nicht jeder in Mathematik gehabt, man kann es sich aber via Scherung von den Kreisgleichungen ableiten.
 

ARadauer

Top Contributor
du musst jetzt nicht einen zweiten thread aufmachen.

fillOval is eine Methode mit der kannst überhaupt nix kollidieren.
ich würd mir, wie schon im anderen thread gesagt, objekte für deine spielelemente machen und das kollidieren mal mit rechtecken probieren.
da gibt es eine schöne intersect methode oder du machst es händisch.
nimm dir einen zettel und zeichne zwei rechteecke drauf, die sich übernschneiden, und dann überlegst du.....

hab sowas auch noch nie programmiert,, aber ich denke.. mhn wenn die linke seite der schlange nicht weiter rechts ist als die rechte seite des ziels und die rechte seite der schlange nicht weiter links ist als die linke seite des ziels, dann müssten sie sich eigentlich auf der X achse schneiden, das selbe noch mit der höhe und fertig....

kann sein, dass das kompletter mist ist, aber man kanns ja probieren bzw mal ausprogrammieren...
 

ARadauer

Top Contributor
start dati der thread? ja eh, halbe stunde später ein neuer zum ähnlichen thema.

aber wurscht. hab das jetzt mit den rechtecken ausprobiert und es hat geklappt, jetzt bin ich so stolz mein werk präsentieren zu müssen:

Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Snake extends JPanel implements MouseMotionListener {
	
	static Snake instance;
	static Rectangle target;
	static Rectangle mover;
	public static void Fenster(){ 
		JFrame f = new JFrame("HIT TEST");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setResizable(false);
		instance = new Snake();
		f.add(instance);
		f.setSize(800, 600);
	
		target = new Rectangle(200, 200, 200, 10);
		mover = new Rectangle(10,10, 50, 50);
	
		f.addMouseMotionListener(instance);
		f.setVisible(true);
	}

	
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
		RenderingHints.VALUE_ANTIALIAS_ON);
		
		g2.draw(target);
		g2.draw(mover);			
	}

	
	public static void main(String[] args) {
		Snake.Fenster();
	}

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


	@Override
	public void mouseMoved(MouseEvent e) {
		Point pos = e.getPoint();
		mover.setLocation(pos);
		//X werte
		int ml = (int) mover.getX();
		int mr = (int) (mover.getX()+mover.getWidth());		
		int tl = (int) target.getX();
		int tr = (int) (target.getX()+target.getWidth());
		
		//y werte
		int mo =(int) mover.getY();
		int mu =(int) (mover.getY()+mover.getHeight());
		int to =(int) target.getY();
		int tu =(int) (target.getY()+target.getHeight());
				
		if((ml<tr && mr > tl) && (mo<tu && mu>to)){
			System.out.println("hit: "+System.currentTimeMillis());
		}		
		this.repaint();
	}
}

if((ml<tr && mr > tl) && (mo<tu && mu>to)) yeah! geht sicher performanter, aber für den ersten versuch....
 

Quaxli

Top Contributor
Mal ein Verbesserungsvorschlag:

Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Snake extends JPanel implements MouseMotionListener {

	private static final long serialVersionUID = 1L;
	
	
   Rectangle target;
   Rectangle mover;
   
   public Snake(){
      JFrame f = new JFrame("HIT TEST");
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setResizable(false);
      f.add(this);
      f.setSize(800, 600);
      f.addMouseMotionListener(this);
      f.setVisible(true);
      
      target = new Rectangle(200, 200, 200, 10);
      mover = new Rectangle(10,10, 50, 50);
   }

   
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
      RenderingHints.VALUE_ANTIALIAS_ON);
      
      g2.draw(target);
      g2.draw(mover);         
   }

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

   public void mouseDragged(MouseEvent arg0) {
      // TODO Auto-generated method stub      
   }


   public void mouseMoved(MouseEvent e) {
      Point pos = e.getPoint();
      mover.setLocation(pos);

      if(mover.intersects(target)){
      	System.out.println("Kollision");
      }
      
      this.repaint();
   }
}

Das repaint() habe ich jetzt mal gelassen, wo's ist. Normalerweise macht man das auch anders.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kollissionsabfrage Kreise Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben