habe hier 3 Klassen davon erben 2 von Threads. Nur will die eine nicht die paint() aufrufen der System.out.print den ich in die run() einbaute zeigt das es aber den wert erhöht. Wenn ich den Quelltext aus der Datei Gegner in die andere einbaue dann geht das, warum geht das nicht so wie ich es geschrieben habe.
thx
Code:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.JFrame;
public class Main extends Thread{
public DrawPanel dp;
JFrame jf;
Thread th = null;
public Main() throws IOException {
dp = new DrawPanel();
jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(800, 800);
jf.setLocation(100, 100);
jf.add(dp);
//th = new Thread();
jf.addKeyListener( new KeyAdapter() {
public void keyPressed( KeyEvent e ) {
switch(e.getKeyChar()){
case 's':
dp.el2dmensch.setFrame(dp.el2dmensch.getX(), dp.el2dmensch.getY()+2, dp.w, dp.h);
dp.el2dmenschrand.setFrame(dp.el2dmenschrand.getX(), dp.el2dmenschrand.getY()+2, dp.w-2, dp.h-2);
//den schuss immer unter dem Körper mitbewegen
dp.el2dschuss.setFrame(dp.el2dschuss.getX(), dp.el2dschuss.getY()+2, dp.el2dschuss.getWidth(), dp.el2dschuss.getHeight());
dp.repaint();
break;
case 'w':
dp.el2dmensch.setFrame(dp.el2dmensch.getX(), dp.el2dmensch.getY()-2, dp.w, dp.h);
dp.el2dmenschrand.setFrame(dp.el2dmenschrand.getX(), dp.el2dmenschrand.getY()-2, dp.w-2, dp.h-2);
dp.repaint();
break;
case 'a':
dp.el2dmensch.setFrame(dp.el2dmensch.getX()-2, dp.el2dmensch.getY(), dp.w, dp.h);
dp.el2dmenschrand.setFrame(dp.el2dmenschrand.getX()-2, dp.el2dmenschrand.getY(), dp.w-2, dp.h-2);
dp.repaint();
break;
case 'd':
dp.el2dmensch.setFrame(dp.el2dmensch.getX()+2, dp.el2dmensch.getY(), dp.w, dp.h);
dp.el2dmenschrand.setFrame(dp.el2dmenschrand.getX()+2, dp.el2dmenschrand.getY(), dp.w-2, dp.h-2);
dp.repaint();
break;
//feuern eines schusses in form eines striches oder kreises
case ' ':
start();
break;
}
}
public void keyReleased( KeyEvent e ) {
}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
);
jf.setVisible(true);
}
public static void main(String[] args) throws IOException {
new Main();
Thread t = new Thread(new Gegner());
t.start();
}
public void start()
{
if (th == null)
{
th = new Thread(this);
th.start();
}
}
public void run() {
while(dp.el2dschuss.getX()>=0){
dp.el2dschuss.setFrame(dp.el2dschuss.getX(), dp.el2dschuss.getY()-10, dp.el2dschuss.getWidth(), dp.el2dschuss.getHeight());
dp.repaint();
if(dp.el2dmensch.contains(dp.el2dschuss.getX(), dp.el2dschuss.getY()))
System.out.println("Treffer");
try {
th.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Code:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
class DrawPanel extends JPanel{
//koordinaten des menschen
int x = 200;
int y = 500;
final static int h = 30;
final static int w = 30;
//koordinaten des Schusses
int sx = 165;
int sy = 55;
//Mensch
Ellipse2D el2dmensch;
Ellipse2D el2dmenschrand;
//schuss des Spielers
Ellipse2D el2dschuss;
//Gegner 3 x
Ellipse2D gegner1;
BufferedImage image = null;
public DrawPanel() throws IOException {
//getBackgroundImage();
el2dmenschrand = new Ellipse2D.Double(x+1, y+1, w-2, h-2);
el2dmensch = new Ellipse2D.Double(x, y, w, h);
el2dschuss = new Ellipse2D.Double(el2dmenschrand.getCenterX(),el2dmenschrand.getCenterY(),10,10);
gegner1 = new Ellipse2D.Double(40, 50, 15, 15);
File f = new File("background.jpg");
image = ImageIO.read(f);
}
@Override
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image, 0, 0, this);
g2.setStroke(new BasicStroke(3));
g2.draw(el2dmensch);
g2.setColor(Color.BLUE);
g2.fill(el2dmenschrand);
g2.fill(el2dschuss);
//farbe gegner setzten und die gegner zeichnen
g2.setColor(Color.GREEN);
g2.fill(gegner1);
}
}
Code:
import java.io.IOException;
public class Gegner extends Thread{
DrawPanel dp;
public Gegner() throws IOException {
dp = new DrawPanel();
//start();
}
public void run() {
System.out.println(dp.gegner1.getY());
while(dp.gegner1.getY()<=300){
dp.gegner1.setFrame(dp.gegner1.getX(), dp.gegner1.getY()+4, dp.gegner1.getWidth()+30, dp.gegner1.getHeight()+30);
System.out.println(dp.gegner1.getY());
dp.repaint();
try {
this.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public int anzahlGegner(){
int i = (int)(Math.random()*3);
return i;
}
}
thx