# kollissionsabfrage



## Exodus (14. Nov 2007)

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


----------



## Memphis (14. Nov 2007)

1. Logic und Mathematik
2. Ja

3. MFG

4. Tolle Fragen.


----------



## ClassNotFound (15. Nov 2007)

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


----------



## Quaxli (15. Nov 2007)

Google hat aber jeder und Mathematikseiten gibt's zuhauf.


----------



## Evil-Devil (15. Nov 2007)

Dafür muss er erstmal lernen Google zu benützen...


----------



## ARadauer (15. Nov 2007)

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...


----------



## SlaterB (15. Nov 2007)

und du musst mal auf die Start-Dati beider Threads schauen


----------



## ARadauer (15. Nov 2007)

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:


```
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 (15. Nov 2007)

Mal ein Verbesserungsvorschlag:


```
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.


----------

