Hallo,
ich habe ein problem mit der methode intersectsLine() :
dies wird von einem separaten thread ausgeführt:
hier oben wird die linie(und die punkte) initialisiert
zur sicherheit auch mal die paintComponent methode.
(zu problem 1)
ich habe aber zwei probleme:
-ich hätte gerne dass die linie mit den punkten gezeichnet wird die in levelInfos() steht.Das ist aber nicht der der fall(wenn ich die werte bei der intialisierung ändere, dann ändert sich auch der strich)
-wenn ich mit meinem quadrat durch die linie laufe, dann bleibt das quadrat nicht an der linie hängen, sondern läuft einfach durch.
Wenn jemand das ganze ausprobieren möchte, hier das komplette programm:
ich habe ein problem mit der methode intersectsLine() :
Java:
private void abfrage()
{
while(true)
{
eingesammelt=rec.intersects(rectangle);
barriere = rec.intersectsLine(bar);
if(eingesammelt==true)
{
laufen=false;
}
if(barriere)
{
down=false;
up=false;
}
}
}
dies wird von einem separaten thread ausgeführt:
Java:
else
{
while(eingesammelt==false)
{
abfrage();
}
}
Java:
double x1=20;
double x2=40;
double y1=1000;
double y2=40;
Point2D.Double pt1=new Point2D.Double(x1, y1);
Point2D.Double pt2=new Point2D.Double(x2, y2);
Line2D.Double bar=new Line2D.Double(pt1,pt2);
hier oben wird die linie(und die punkte) initialisiert
Java:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.green);
g.fillRect(50, 50, 20, 20);
g.setColor(Color.blue);
g.fillRect(rec.x, rec.y, 10, 10);
g.setColor(Color.red);
g2.draw(new Line2D.Double(pt1,pt2));
}
zur sicherheit auch mal die paintComponent methode.
Java:
public void levelInfos()
{
if(level==1)
{
pt1.x=20;
pt1.y=40;
pt2.x=1000;
pt2.y=40;
}
else if(level==2)
{
}
else if(level==3)
{
}
else if(level==4)
{
}
}
ich habe aber zwei probleme:
-ich hätte gerne dass die linie mit den punkten gezeichnet wird die in levelInfos() steht.Das ist aber nicht der der fall(wenn ich die werte bei der intialisierung ändere, dann ändert sich auch der strich)
-wenn ich mit meinem quadrat durch die linie laufe, dann bleibt das quadrat nicht an der linie hängen, sondern läuft einfach durch.
Wenn jemand das ganze ausprobieren möchte, hier das komplette programm:
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.*;
import javax.swing.*;
class GamePanel extends JPanel implements KeyListener, Runnable
{
private static final long serialVersionUID = 1L;
JFrame frame;
boolean up;
boolean down;
boolean left;
boolean right;
int level=1;
static boolean eingesammelt=false;
static boolean laufen=true;
boolean passieren=false;
int x=0;
int y=0;
Rectangle rectangle=new Rectangle(50,50,10,10);
Rectangle rec=new Rectangle(x,y,10,10);
double x1=20;
double x2=40;
double y1=1000;
double y2=40;
Point2D.Double pt1=new Point2D.Double(x1, y1);
Point2D.Double pt2=new Point2D.Double(x2, y2);
Line2D.Double bar=new Line2D.Double(pt1,pt2);
boolean barriere;
Thread thread;
Thread thr;
public GamePanel (int w, int h)
{
levelInfos();
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.pack();
thread=new Thread(this);
thread.start();
thr=new Thread(this);
thr.start();
frame.setBackground(Color.yellow);
frame.setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.green);
g.fillRect(50, 50, 20, 20);
g.setColor(Color.blue);
g.fillRect(rec.x, rec.y, 10, 10);
g.setColor(Color.red);
g2.draw(new Line2D.Double(pt1,pt2));
}
public static void main(String[]args) //Fenster
{
new GamePanel(613,629);
}
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 check()
{
if(up)
{
if(rec.y!=0)
{
rec.y=rec.y-1;
}
}
if(down)
{
if(rec.y<604)
{
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;
}
}
}
private void abfrage()
{
while(true)
{
eingesammelt=rec.intersects(rectangle);
barriere = rec.intersectsLine(bar);
if(eingesammelt==true)
{
laufen=false;
}
if(barriere)
{
down=false;
up=false;
}
}
}
public void keyTyped(KeyEvent e)
{
}
public void levelInfos()
{
if(level==1)
{
pt1.x=20;
pt1.y=40;
pt2.x=1000;
pt2.y=40;
}
else if(level==2)
{
}
else if(level==3)
{
}
else if(level==4)
{
}
}
public void run()
{
if(Thread.currentThread()==thread)
{
while(level<5)
{
levelInfos();
while(laufen==true)
{
while(eingesammelt==false)
{
check();
repaint();
try{Thread.sleep(8);}catch(InterruptedException e){}
}
}
level++;
laufen=true;
eingesammelt=false;
}
}
else
{
while(eingesammelt==false)
{
abfrage();
}
}
}
}