Hilfe bekomme den IF befehl nicht hin

  • Themenstarter Themenstarter Blitzmaus
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Blitzmaus

Gast
hi,

ich bin grade dabei ein kleinen java game zu bauen aber habe folgendes problem:

ich muß einen if befehl bauen das wenn ein button geklickt wird ein neues bild im panel ladet. ich habe es von aufbau so wie bei den Text if befehlen probiert geht aber leider nicht

also mein versuchter Code lautet:

if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
g.drawImage(img[1],0,0,breite,hoehe,this);

Bitte um hilfe danke für schnelle antwort im vorraus.

Gruß

Blitzmaus
 
Erst einmal würde mich interessieren, wo dein Code steht (welche Methode) und wo dein Graphics-Objekt herkommt.

Ich würde das mit dem Panel so machen, dass ich mir in einer Referenzvariable eine Referenz auf das aktuelle Bild speichere. Wenn auf den Button geklickt wird, dann wird nur die Referenz auf ein anderes Bild gesetzt. Der Panel macht nichts anderes, als stur das zu Zeichnen, was er bekommt.
 
g.drawImage gibt ein boolean Wert zurück. Ich kann mir kaum vorstellen, dass dein panel ebenfalls ein boolean ist und nehme deswegen streng an, dass diese Auswertung immer zu "false" führen wird.
 
ok dann schicke ich mal den code, habe nur die ausschnitte vom den Bildern genommen da der Code hier nicht rein passt.^^

nur vorab gesagt ich bin der totale java neuling und muß das in der schule bis morgen abgeben daher habe ich auch keine strings gemacht da ich sie nicht hinbekommen habe.

Die Striche habe ich gemacht damit Sie den befehl schneller finden.


public NewFrame() {
initComponents();

img = new Image[8];
String imgpath="c:/bilder/";
// Toolkit das Funktionen zum Laden von Bilder zur Verfügung
breite = panel.getWidth();
hoehe = panel.getHeight();
Toolkit kit = getToolkit();
// Startbild nur Galgen
img[0] = kit.getImage(imgpath+"galgen0.jpg");
panel.prepareImage(img[0],breite,hoehe, this);
// Bild nach erstem Fehler
img[1] = kit.getImage(imgpath+"galgen1.jpg");
panel.prepareImage(img[1],breite,hoehe, this);
// Bild nach zweitem Fehler
img[2] = kit.getImage(imgpath+"galgen2.jpg");
panel.prepareImage(img[2],breite,hoehe, this);
// Bild nach dritten Fehler
img[3] = kit.getImage(imgpath+"galgen3.jpg");
panel.prepareImage(img[3],breite,hoehe, this);
// Bild nach viertem Fehler
img[4] = kit.getImage(imgpath+"galgen4.jpg");
panel.prepareImage(img[4],breite,hoehe, this);
// Bild nachh fünften Fehler
img[5] = kit.getImage(imgpath+"galgen5.jpg");
panel.prepareImage(img[5],breite,hoehe, this);
// Bild nach sechstem Fehler
img[6] = kit.getImage(imgpath+"galgen6.jpg");
panel.prepareImage(img[6],breite,hoehe, this);
// Bild Verloren
img[7] = kit.getImage(imgpath+"galgen7.jpg");
panel.prepareImage(img[7],breite,hoehe, this);

g = panel.getGraphics();
}

....

private void bStartActionPerformed(java.awt.event.ActionEvent evt) {

textfeld.setText("****");
g = panel.getGraphics();
g.drawImage(img[0],0,0,breite,hoehe,this);

.....

_________________________________________________________________
private void bQMouseClicked(java.awt.event.MouseEvent evt) {
if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
g.drawImage(img[1],0,0,breite,hoehe,this);
}
__________________________________________________________________

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewFrame().setVisible(true);
}
});
 
Dieser Code ist für mich ein bisschen schwierig nachzuvollziehen.

Was genau soll die Funktion bQMouseClicked bezwecken?
Wo ist nun der Button, der geklickt wird?
Aufrufe wie [c]g = panel.getGraphics();[/c] musst du unbedingt vermeiden!!! Das ist gleicht einem Schwerverbrechen.

//EDIT:
Setz in Zukunft bitte [java) ... [/code] Tags rund um deinen Code, so wird es leserlicher.
 
Also es ist soll ein kleines Hangman darstellen da ich aber mit sternchen setzen und so klar kam habe ich mich entschieden das ich einfach nur ein Word nehme und das Ebend für if befehle erfrage.

Die buttons sind sogesehn das Alphabet.

die buchstaben die im wort vorkommen haben folgenden befehl:

Java:
private void bWMouseClicked(java.awt.event.MouseEvent evt) {                                
    if (textfeld.getText ().equals("****"))
    textfeld.setText("W***");
    if (textfeld.getText ().equals("*A**"))
    textfeld.setText("WA**");
    if (textfeld.getText ().equals("*AL*"))
    textfeld.setText("WAL*");
    if (textfeld.getText ().equals("*ALD"))
    textfeld.setText("WALD");
    if (textfeld.getText ().equals("**L*"))
    textfeld.setText("W*L*");
    if (textfeld.getText ().equals("*A*D"))
    textfeld.setText("WA*D");
    if (textfeld.getText ().equals("**LD"))
    textfeld.setText("W*LD");
    if (textfeld.getText ().equals("***D"))
    textfeld.setText("**LD");
    }

und jetzt brauche ich für die anderen buchstaben einen fehl das sich der Galgen weiter aufbaut bis zum verloren und den galgen habe ich in 8 jpegs gemacht die bei einer falschen Taste weiter gehen sollen.

und jetzt fehlt mir halt der befehl das das bild sich dann ändert.

wo ich den beschriebenen befehl probiert habe:

Java:
private void bQMouseClicked(java.awt.event.MouseEvent evt) {
if (panel.equals(g.drawImage(img[0],0,0,breite,hoehe,this)))
   g.drawImage(img[1],0,0,breite,hoehe,this);
    }
 
ach sonst klappt auch alles das das wort ich von **** in WALD ändert, nur das bild ändern ebend nicht 🙁
 
Dein einziges Problem ist eigendlich, dass du dir ein Graphics-Objekt speicherst und dieses dann mitführst und darüber zeichnest. Das funktioniert nicht.

Überschreibe dir lieber die "paint"-Methode deines Panels mache dir eine globale Variable mit dem aktuellen Bild und setzte auf deinem Button immer nur dieses Bild um.

[Java]ublic class SwitchImage extends JPanel implements Runnable {

private BufferedImage currentImage = null;

public SwitchImage() {
new Thread(this).start();
}

@Override
public void run() {
while (true) {
repaint();
try {
Thread.sleep(60);
} catch (Exception e) {
e.printStackTrace();
}
}
}

@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (currentImage != null)
g2.drawImage(currentImage, 0, 0, this);
}

public BufferedImage getCurrentImage() {
return currentImage;
}

public void setCurrentImage(BufferedImage currentImage) {
this.currentImage = currentImage;
}
}[/Java]
 
@Steev

das verstehe ich leider grade nicht wie ich es einbinden soll und wie ich dann sagen kann wenn bild a angezeigt ist lade bild b usw. bis zum Verloren Bild (8te Bild)
 
Es ist eigentlich gar nicht unbedingt notwendig, alle 60ms das ganz neu zu zeichnen. Du kannst auch einfach bei setCurrentImage noch ein repaint() rein schreiben und dann die run-Methode löschen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben