Hallo zusammen
Ich baue gerade ein kleines UFO Game in Form eines Swing-Applets. Ich bin auf das Problem gestoßen, dass ich im Center Bereich des Containers mehrere Komponenten platzieren möchte, die sollen sich dann auch noch bewegen. Weil man ja in so einen Bereich nur eine Komponente platzieren kann, wollte ich beide Komponenten (UFO und Plattform) auf ein JPanel hinzufügen, und dieses dann in den Center Bereich packen. Nur wird mir jetzt nichts mehr angezeigt. Zuvor, als ich nur eine Kompinente hatte und die direkt auf den Center Bereich gepackt hatte, funktionierte alles noch, inkl. Threads.
Ich hoffe jemand kann mir helfen
[Java]
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.event.*;
public class UFOTest extends JApplet implements Runnable {
public UFOTest(){}
private UFO ufo1;
private Plattform pf;
private JPanel pGame=new JPanel();
private Thread runner;
private int speed=1;
private Container c;
public void init() {
c=getContentPane();
c.setLayout(new BorderLayout());
ufo1=new UFO();
pf=new Plattform();
pGame.add(ufo1);
pGame.add(pf);
c.add(pGame,BorderLayout.CENTER);
setSize(1024, 768);
setLayout(null);
setVisible(true);
}
public void start() {
if(runner==null) {
runner=new Thread(this);
runner.start();
}
ufo1.setStart();
ufo1.setRightColor(11);
ufo1.setSpeed(speed);
}
public void stop(){
if(runner!=null)
runner=null;
}
public void run() {
Thread ich=Thread.currentThread();
while(ich==runner) {
ufo1.move();
if(ufo1.ufoGanzUnten()){
ufo1.setStart();
ufo1.setRightColor(11);
ufo1.setSpeed(++speed);
}
repaint();
try{
Thread.sleep(20);
}catch(InterruptedException e){}
}
}
}
[/Java]
[Java]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Plattform extends JPanel{
private final int height=15;
private final int defWidth=60;
private int width;
private int posX;
private final int defX=195; //wenn 60 Breit und wenn Spielfeld 450 Breit
private final int defY=440; // wenn Spielfeld 500 hoch (North=50, South=50)
public Plattform() {} //default Konstruktor
public void bewege(boolean i) {
if (!i)
posX=posX-5;
else if(i)
posX=posX+5;
}
public void setStart() {
posX=defX;
width=defWidth;
}
public void alterPlatform(boolean kleiner) {
if(kleiner)
width=width-10;
else if(kleiner==false)
width=width+10;
}
public int getX() {
return posX;
}
public void keyPressed(KeyEvent eP) {
if(eP.getKeyCode()==KeyEvent.VK_LEFT)
bewege(false);
else if(eP.getKeyCode()==KeyEvent.VK_RIGHT)
bewege(true);
}
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(defX, defY, defWidth, height);
}
}
[/Java]
[Java]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class UFO extends JPanel {
public UFO(){}
private int speed;
private final Color colDef=Color.GREEN;
private Color colUFO;
private final int height=20;
private final int width=50;
private int x;
private int y;
private Color[] ufoFarben={Color.RED,Color.BLUE,Color.GREEN,
Color.YELLOW,Color.WHITE,Color.BLACK,
Color.MAGENTA,Color.PINK,Color.CYAN,
Color.GRAY,Color.ORANGE,Color.LIGHT_GRAY};
public void setColor(Color c) {
colUFO=c;
}
public void setRightColor(int level) {
int randomColor=(int)(Math.random()*(level+1));
colUFO=ufoFarben[randomColor];
}
public void setSpeed(int level) {
speed=level+1;
}
public int getXPos(){
return x;
}
public int getYPos(){
return y;
}
public void paintComponent(Graphics g) {
g.setColor(colUFO);
g.fillOval(x,y,width,height);
}
public void setStart(){
x=(int)(Math.random()*500+1);
y=0;
}
public void move() {
y=y+speed;
}
public boolean ufoGanzUnten() {
if(y>=400)
return true;
return false;
}
}
[/Java]
Ich baue gerade ein kleines UFO Game in Form eines Swing-Applets. Ich bin auf das Problem gestoßen, dass ich im Center Bereich des Containers mehrere Komponenten platzieren möchte, die sollen sich dann auch noch bewegen. Weil man ja in so einen Bereich nur eine Komponente platzieren kann, wollte ich beide Komponenten (UFO und Plattform) auf ein JPanel hinzufügen, und dieses dann in den Center Bereich packen. Nur wird mir jetzt nichts mehr angezeigt. Zuvor, als ich nur eine Kompinente hatte und die direkt auf den Center Bereich gepackt hatte, funktionierte alles noch, inkl. Threads.
Ich hoffe jemand kann mir helfen
[Java]
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.event.*;
public class UFOTest extends JApplet implements Runnable {
public UFOTest(){}
private UFO ufo1;
private Plattform pf;
private JPanel pGame=new JPanel();
private Thread runner;
private int speed=1;
private Container c;
public void init() {
c=getContentPane();
c.setLayout(new BorderLayout());
ufo1=new UFO();
pf=new Plattform();
pGame.add(ufo1);
pGame.add(pf);
c.add(pGame,BorderLayout.CENTER);
setSize(1024, 768);
setLayout(null);
setVisible(true);
}
public void start() {
if(runner==null) {
runner=new Thread(this);
runner.start();
}
ufo1.setStart();
ufo1.setRightColor(11);
ufo1.setSpeed(speed);
}
public void stop(){
if(runner!=null)
runner=null;
}
public void run() {
Thread ich=Thread.currentThread();
while(ich==runner) {
ufo1.move();
if(ufo1.ufoGanzUnten()){
ufo1.setStart();
ufo1.setRightColor(11);
ufo1.setSpeed(++speed);
}
repaint();
try{
Thread.sleep(20);
}catch(InterruptedException e){}
}
}
}
[/Java]
[Java]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Plattform extends JPanel{
private final int height=15;
private final int defWidth=60;
private int width;
private int posX;
private final int defX=195; //wenn 60 Breit und wenn Spielfeld 450 Breit
private final int defY=440; // wenn Spielfeld 500 hoch (North=50, South=50)
public Plattform() {} //default Konstruktor
public void bewege(boolean i) {
if (!i)
posX=posX-5;
else if(i)
posX=posX+5;
}
public void setStart() {
posX=defX;
width=defWidth;
}
public void alterPlatform(boolean kleiner) {
if(kleiner)
width=width-10;
else if(kleiner==false)
width=width+10;
}
public int getX() {
return posX;
}
public void keyPressed(KeyEvent eP) {
if(eP.getKeyCode()==KeyEvent.VK_LEFT)
bewege(false);
else if(eP.getKeyCode()==KeyEvent.VK_RIGHT)
bewege(true);
}
public void paintComponent(Graphics g) {
g.setColor(Color.black);
g.fillRect(defX, defY, defWidth, height);
}
}
[/Java]
[Java]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class UFO extends JPanel {
public UFO(){}
private int speed;
private final Color colDef=Color.GREEN;
private Color colUFO;
private final int height=20;
private final int width=50;
private int x;
private int y;
private Color[] ufoFarben={Color.RED,Color.BLUE,Color.GREEN,
Color.YELLOW,Color.WHITE,Color.BLACK,
Color.MAGENTA,Color.PINK,Color.CYAN,
Color.GRAY,Color.ORANGE,Color.LIGHT_GRAY};
public void setColor(Color c) {
colUFO=c;
}
public void setRightColor(int level) {
int randomColor=(int)(Math.random()*(level+1));
colUFO=ufoFarben[randomColor];
}
public void setSpeed(int level) {
speed=level+1;
}
public int getXPos(){
return x;
}
public int getYPos(){
return y;
}
public void paintComponent(Graphics g) {
g.setColor(colUFO);
g.fillOval(x,y,width,height);
}
public void setStart(){
x=(int)(Math.random()*500+1);
y=0;
}
public void move() {
y=y+speed;
}
public boolean ufoGanzUnten() {
if(y>=400)
return true;
return false;
}
}
[/Java]
Zuletzt bearbeitet: