Hallo Community,
ich habe ein kleines Problem bezüglich der intersects() methode, da diese sagt, dass zwei sachen sich treffen, die sich aber nicht ansatzweise berühren.
Hier mal einige ausschnitte:
*Initialisierung:
*Veränderung der Koordinaten im Thread
*collision()
*Veränderung der Koordinaten vom Rechteck in einem anderen Thread
wenn jemand sich den ganzen code angucken will dann hier:
weiß jemand woran das problem liegt und hat einen lösungsvorschlag?
ich habe ein kleines Problem bezüglich der intersects() methode, da diese sagt, dass zwei sachen sich treffen, die sich aber nicht ansatzweise berühren.
Hier mal einige ausschnitte:
*Initialisierung:
Java:
int a = 500;
int s =500;
Rectangle rect=new Rectangle(a,s,0,0);
int mousex=0;
int mousey=0;
Line2D.Double line=new Line2D.Double(0,0,0,0);
*Veränderung der Koordinaten im Thread
Java:
class Schleife implements Runnable
{
public void run()
{
while(true)
{
check(); //ZUR ERMITTLUNG DER EINGABEN DURCH TASTEN
collision();
frame.repaint();
try{Thread.sleep(10);}catch (InterruptedException e){}
}
}
}
*collision()
Java:
public void collision()
{
if(shoot)
{
Point mousep=MouseInfo.getPointerInfo().getLocation();
mousex=mousep.x /2;
mousey=mousep.y /2;
line.setLine(rec.x+5, rec.y+5, mousex, mousey);
}
if(rect.intersectsLine(line));
{
System.out.println("TRUE");
}
}
*Veränderung der Koordinaten vom Rechteck in einem anderen Thread
Java:
class KI implements Runnable
{
public void run()
{
while(true)
{
if(a>rec.x)
a--;
if(a<rec.x)
a++;
if(s>rec.y)
s--;
if(s<rec.y)
s++;
rect.setRect(a, s, 20, 20);
try{Thread.sleep(100);}catch(Exception e){}
}
}
}
wenn jemand sich den ganzen code angucken will dann hier:
Java:
public class BrickBreaker extends JPanel implements KeyListener, MouseListener
{
private static final long serialVersionUID = 1L;
JFrame frame;
int a = 500;
int s =500;
Rectangle rect=new Rectangle(a,s,0,0);
boolean up;
boolean down;
boolean left;
boolean right;
boolean shoot;
public int x=5;
public int y=5;
int mousex=0;
int mousey=0;
int zeits=0;
int zeitm=0;
int zeith=0;
Rectangle rec=new Rectangle(x,y,10,50);
Thread thread;
Thread th;
Line2D.Double line=new Line2D.Double(0,0,0,0);
public BrickBreaker (int w, int h)
{
this.setPreferredSize(new Dimension(w,h));
frame=new JFrame("Spiel");
frame.setResizable(false);
frame.setLocation(300,150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
frame.pack();
thread=new Thread(new Schleife());
thread.start();
th=new Thread(new Time());
th.start();
frame.getContentPane().setBackground(Color.black);
frame.setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D) g;
g.drawRect(rec.x,rec.y,10,10);
g.setColor(Color.blue);
if(shoot)
g2.draw(line);
g.drawString("TIME: "+(Integer.toString(zeith))+" : "+(Integer.toString(zeitm))+" : "+(Integer.toString(zeits)), 50, 10); //TIME AFFICHE
g.drawRect(a, s, 20, 20);
g.setColor(Color.blue);
}
public static void main(String[]args) //Fenster
{
new BrickBreaker(600,600);
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
up=true;
if(e.getKeyCode()==KeyEvent.VK_DOWN)
down=true;
if(e.getKeyCode()==KeyEvent.VK_LEFT)
left=true;
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
right=true;
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_UP)
{
up=false;
}
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
down=false;
}
if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
left=false;
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
right=false;
}
}
public void keyTyped(KeyEvent e)
{
}
public void check() // MOVE POSITION IF KEY IS TYPED
{
if(up)
{
if(rec.y!=0)
{
rec.y=rec.y-1;
}
}
if(down)
{
if(rec.y<588)
{
rec.y=rec.y+1;
}
}
if(left)
{
if(rec.x!=0)
{
rec.x=rec.x-1;
}
}
if(right)
{
if(rec.x<588)
{
rec.x=rec.x+1;
}
}
}
public void collision()
{
if(shoot)
{
Point mousep=MouseInfo.getPointerInfo().getLocation();
mousex=mousep.x /2;
mousey=mousep.y /2;
line.setLine(rec.x+5, rec.y+5, mousex, mousey);
}
if(rect.intersectsLine(line));
{
System.out.println("TRUE");
}
}
class Schleife implements Runnable //MOVE
{
public void run()
{
while(true)
{
check();
collision();
frame.repaint();
try{Thread.sleep(10);}catch (InterruptedException e){}
}
}
}
class Time implements Runnable //TIME UPPER
{
public void run()
{
while(true)
{
zeits++;
if(zeits % 60 == 0)
{
zeitm++;
zeits=0;
if(zeitm % 60 ==0)
{
zeith++;
zeitm=0;
}
}
if(zeits > 10)
makeMonster();
try {Thread.sleep(999);} catch (InterruptedException e) {e.printStackTrace();}
}
}
}
@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
shoot=true;
}
public void mouseReleased(MouseEvent e)
{
shoot=false;
}
public void makeMonster()
{
Thread threads=new Thread(new KI());
threads.start();
}
class KI implements Runnable
{
public void run()
{
while(true)
{
if(a>rec.x)
a--;
if(a<rec.x)
a++;
if(s>rec.y)
s--;
if(s<rec.y)
s++;
rect.setRect(a, s, 20, 20);
try{Thread.sleep(100);}catch(Exception e){}
}
}
}
}
weiß jemand woran das problem liegt und hat einen lösungsvorschlag?