Hallo Zusammen,
ich habe in java ein kleines spiel geschrieben, bei dem man "raumschiffe" (einfach kästchen im JPanel ;-) ) abschiessen muss.
nun wollte ich ein Textfeld anlegen, das den Punktestand anzeigt.
habe dazu JLabel gewählt.
das funktioniert.
aber leider kann ich es nicht aktualisieren. d. h. es bleiben immer 0 punkte drin.
die punkte werden richtig mitgezählt in einer eigenen klasse... habs getestet.
übrigens erfolgt der normale refresh über diese methode für die grafischen sachen:
paintComponent(Graphics g)
ich kopiere jetzt mal noch den code rein, für die main klasse, und die klasse mit der paintComponent, die ich ZeichenPanal genannt habe.
außerdem gibt es noch die klassen Geschuetz, Raumschiff, Projektil, punkte und mehrThread.
hauptsächlich werden in den klassen die koordinaten mitgerechnet wenn sich ein objekt bewegen soll. und von dort aus dann abgerufen vom panel fürs zeichnen.
tscheckt das wer?
(ich glaub ich würds jetzt net verstehen... ;-) )
naja... eigentlich gehts ja nur darum wie ich den text vom JLabel im JPanel refreshen kann...
danke schon mal und gruß,
Peter.
ich habe in java ein kleines spiel geschrieben, bei dem man "raumschiffe" (einfach kästchen im JPanel ;-) ) abschiessen muss.
nun wollte ich ein Textfeld anlegen, das den Punktestand anzeigt.
habe dazu JLabel gewählt.
das funktioniert.
aber leider kann ich es nicht aktualisieren. d. h. es bleiben immer 0 punkte drin.
die punkte werden richtig mitgezählt in einer eigenen klasse... habs getestet.
übrigens erfolgt der normale refresh über diese methode für die grafischen sachen:
paintComponent(Graphics g)
ich kopiere jetzt mal noch den code rein, für die main klasse, und die klasse mit der paintComponent, die ich ZeichenPanal genannt habe.
außerdem gibt es noch die klassen Geschuetz, Raumschiff, Projektil, punkte und mehrThread.
hauptsächlich werden in den klassen die koordinaten mitgerechnet wenn sich ein objekt bewegen soll. und von dort aus dann abgerufen vom panel fürs zeichnen.
tscheckt das wer?
(ich glaub ich würds jetzt net verstehen... ;-) )
naja... eigentlich gehts ja nur darum wie ich den text vom JLabel im JPanel refreshen kann...
danke schon mal und gruß,
Peter.
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Spaceinvaders implements KeyListener
{
Geschuetz Gun;
static JFrame frame;
Raumschiff Alien;
Projektil Schuss;
punkte pustand;
public static void main(String[] args)
{
//Ein Objekt Aufrufer wird angelegt:
Spaceinvaders gui = new Spaceinvaders();
gui.los();
}
public void los()
{
//Frame und Panel werden angelegt:
frame = new JFrame();
ZeichenPanel zeichnen = new ZeichenPanel();
JLabel textfeld = new JLabel(" Space-Invaders Revival. Developed by Peter Singer. Version Beta 2.0 Punkte: "+punkte.getStaticPunkte());
frame.addKeyListener(this);
//Anlegen der Steuerungsobjekte:
double ra = Math.random();
double rb = ra * 10;
int rc = (int)rb;
int rd = rc * rc * rc;
Gun = new Geschuetz(390,525,20,50);
Alien = new Raumschiff (rd,0,80,80);
Schuss = new Projektil(0,0,0,0);
//Hier noch die Daten für den Frame:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,600);
frame.setVisible(true);
Spaceinvaders.frame.getContentPane().add(BorderLayout.SOUTH, textfeld);
frame.getContentPane().add(BorderLayout.CENTER, zeichnen);
}
public void keyPressed(KeyEvent event)
{
int key = event.getKeyCode();
//Links
if (key == 37)
{
int a = Geschuetz.getXkoordinate();
int b = Geschuetz.getYkoordinate();
if (a > 0)
{
a=a-20;
Gun.setKoordinaten(a, b);
}
}
//Rechts
if (key == 39)
{
int a = Geschuetz.getXkoordinate();
int b = Geschuetz.getYkoordinate();
if (a < 780)
{
a=a+20;
Gun.setKoordinaten(a, b);
}
}
//Feuer
if (key == 32)
{
int a = Geschuetz.getXkoordinate();
int b = Geschuetz.getYkoordinate();
b = b - 20;
Schuss.setKoordinaten(a, b);
Schuss.setGroesse(20, 20);
}
frame.repaint();
if (key == 32)
{
Feuer();
}
}
public void keyReleased(KeyEvent event)
{
}
public void keyTyped(KeyEvent event)
{
}
public void Feuer ()
{
Runnable threadJob = new MehrThread();
Thread r = new Thread(threadJob);
r.start ();
}
public static void Grakfikaufruf ()
{
frame.repaint();
}
}
import java.awt.*;
import javax.swing.*;
public class ZeichenPanel extends JPanel
{
public void paintComponent(Graphics g)
{
int gxk = Geschuetz.getXkoordinate();
int gyk = Geschuetz.getYkoordinate();
int ggb = Geschuetz.getBreite();
int ggh = Geschuetz.getHoehe();
int hr=Raumschiff.getYkoordinate ();
Raumschiff.setStaticYKoordinate(hr+1);
int rxk = Raumschiff.getXkoordinate();
int ryk = Raumschiff.getYkoordinate();
int rgb = Raumschiff.getBreite();
int rgh = Raumschiff.getHoehe();
int pxk = Projektil.getXkoordinate();
int pyk = Projektil.getYkoordinate();
int pgb = Projektil.getBreite();
int pgh = Projektil.getHoehe();
//Alles was hier drin steht, wird nicht vom
//aufrufer direkt gestartet.
//Alles was hier drin steht, wird grafisch
//ausgeführt:
//altes, bildloses geschütz:
//g.setColor(Color.blue);
//g.fillRect(gxk,gyk,ggb,ggh);
g.setColor(Color.black);
g.fillRect(rxk,ryk,rgb,rgh);
g.setColor(Color.yellow);
g.fillRect(pxk,pyk,pgb,pgh);
Image image = new ImageIcon("geschuetz2.jpg").getImage();
g.drawImage(image,gxk-4,gyk-40,this);
}
}
[CODE]