2D Game

Panda9296

Bekanntes Mitglied
Ich habe ein Problem im Code den ich nicht finde : Es soll praktisch ein Bild für ein 2d Game gemacht werden:

Ich bekommen folgenden Fehler:

at java.desktop/java.awt.Container.add(Container.java:436)
at d2D.java.GUI.<init>(GUI.java:19)
at d2D.java.Main.main(Main.java:6) //Gui was falsch?? oder stimmt was mit dem Bild nicht?

MAIN:
Code:
package d2D.java;

public class Main {

    public static void main(String[] args) {
        new GUI();
        new Variabeln();
        new Steuerung();
        new Label();
    }

}

GUI:
Code:
package d2D.java;
import javax.swing.JFrame;

public class GUI {
    
    public GUI() {
    
        Variabeln.jf1= new JFrame();
        Variabeln.jf1.setSize(Variabeln.screenwidth,Variabeln.screenheight);
        Variabeln.jf1.setLocationRelativeTo(null);
        Variabeln.jf1.setLayout(null);
        Variabeln.jf1.setTitle("Miguel sein 2D-Spiel");
        Variabeln.jf1.setResizable(false);
        Variabeln.jf1.requestFocus();
        
        
        Variabeln.lbl1 = new Label();
        Variabeln.lbl1.setBounds(0,0,Variabeln.screenwidth,Variabeln.screenheight);
        Variabeln.lbl1.add(Variabeln.lbl1);
        Variabeln.lbl1.setVisible(true);
        
    }
 
}
LABEL:

package d2D.java;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JLabel;

public class Label extends JLabel {
private static final long serialVersionUID=1L;

protected void paintcom(Graphics g) {
super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(Variabeln.ib1,0,Variabeln.backroundgroundY1,800,600,null);
g.drawImage(Variabeln.ib1,0,Variabeln.backroundgroundY1,800,600,null);

repaint();

}
}


Variable(ja ich weiß falsch geschrieben kein Bock mehr es zu ändern :D

Code:
package d2D.java;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Variabeln {
    
     static JFrame jf1;
     static int screenwidth = 800;
     static int screenheight = 600;
     static int backroundgroundY1 = 0, backgroundY2 =-600;
  
     static boolean moveup=false,movedown=false,moveleft=false,moveright=false;
     static Label lbl1;
    
     static BufferedImage ib1,ib2;
     public Variabeln() {
         try {
            
             ib1 = ImageIO.read(new File("obd/b1.jpg"));
             ib2 = ImageIO.read(new File("obd/b1.jpg"));
         }catch(IOException e) {
             e.printStackTrace();
             System.err.println("Bilder konnten nicht geladen werden");
         }
     }

}

oh man ich will nix durcheinander bringen :D

Code:
package d2D.java;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Steuerung  implements KeyListener{

    @Override
    public void keyTyped(KeyEvent e) {   
    }

    @Override
    public void keyPressed(KeyEvent e) {
        
        if(e.getKeyCode()==KeyEvent.VK_UP) {
            Variabeln.moveup=true;
        }
        if(e.getKeyCode()==KeyEvent.VK_DOWN) {
            Variabeln.movedown=true;
        }
        if(e.getKeyCode()==KeyEvent.VK_LEFT) {
            Variabeln.moveleft=true;
        }
        if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
            Variabeln.moveright=true;
        }
        
    }

    @Override
    public void keyReleased(KeyEvent e) {
        
        if(e.getKeyCode()==KeyEvent.VK_UP) {
            Variabeln.moveup=false;
        }
        if(e.getKeyCode()==KeyEvent.VK_DOWN) {
            Variabeln.movedown=false;
        }
        if(e.getKeyCode()==KeyEvent.VK_LEFT) {
            Variabeln.moveleft=false;
        }
        if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
            Variabeln.moveright=false;
        }
        
    }

    
}

Ich bin sehr dankbar für eine Hilfestellung
 
K

kneitzel

Gast
Also bitte beim nächsten Mal auch die Fehler-Details (Exception) mit bringen. Dun die Zeile etwas besser markieren. Sonst wird es immer ein raten.

Also die Zeile macht so keinen Sinn:
Code:
Variabeln.lbl1.add(Variabeln.lbl1);

Du willst das Label lbl1 dem Label lbl1 hinzufügen?
Das sollte wohl eher sowas sein:
Code:
Variabeln.jf1.add(Variabeln.lbl1);
Variabeln.jf1.setVisible(true);

Aber das ist schrecklicher Code. Diese Static Variablen in der Klasse Variablen... Du hast doch eine Klasse GUI - wieso machst Du da nicht das Frame und Label als Instanzvariablen rein?

Also sowas in der Art:

Java:
package d2D.java;
import javax.swing.JFrame;

public class GUI {
    
     private JFrame jf1;
     private Label lbl1;

    public GUI() {
    
        jf1= new JFrame();
        jf1.setSize(Variabeln.screenwidth,Variabeln.screenheight);
        jf1.setLocationRelativeTo(null);
        jf1.setLayout(null);
        jf1.setTitle("Miguel sein 2D-Spiel");
        jf1.setResizable(false);
        jf1.requestFocus();
        
        
        lbl1 = new Label();
        lbl1.setBounds(0,0,Variabeln.screenwidth,Variabeln.screenheight);
        jf1.add(Variabeln.lbl1);
        jf1.setVisible(true);   
    }
}

Beim Label auch ähnlich, wobei die Frage ist, ob das eine Klasse sein muss oder ob es nicht ausreicht, direkt eine Instanz von JLabel zu nehmen ...

Also die Klasse Variablen komplett weg und die static Elemente wanden non static in die Klassen, in die diese gehören ...

Und wenn man schon dabei ist; Variablen sinnvoll benennen. jf1 wäre evtl. mainFrame oder so. lbl1 dann etwas, wozu dieser Label da ist.
 

Panda9296

Bekanntes Mitglied
Also bitte beim nächsten Mal auch die Fehler-Details (Exception) mit bringen. Dun die Zeile etwas besser markieren. Sonst wird es immer ein raten.

Also die Zeile macht so keinen Sinn:
Code:
Variabeln.lbl1.add(Variabeln.lbl1);

Du willst das Label lbl1 dem Label lbl1 hinzufügen?
Das sollte wohl eher sowas sein:
Code:
Variabeln.jf1.add(Variabeln.lbl1);
Variabeln.jf1.setVisible(true);

Aber das ist schrecklicher Code. Diese Static Variablen in der Klasse Variablen... Du hast doch eine Klasse GUI - wieso machst Du da nicht das Frame und Label als Instanzvariablen rein?

Also sowas in der Art:

Java:
package d2D.java;
import javax.swing.JFrame;

public class GUI {
   
     private JFrame jf1;
     private Label lbl1;

    public GUI() {
   
        jf1= new JFrame();
        jf1.setSize(Variabeln.screenwidth,Variabeln.screenheight);
        jf1.setLocationRelativeTo(null);
        jf1.setLayout(null);
        jf1.setTitle("Miguel sein 2D-Spiel");
        jf1.setResizable(false);
        jf1.requestFocus();
       
       
        lbl1 = new Label();
        lbl1.setBounds(0,0,Variabeln.screenwidth,Variabeln.screenheight);
        jf1.add(Variabeln.lbl1);
        jf1.setVisible(true);  
    }
}

Beim Label auch ähnlich, wobei die Frage ist, ob das eine Klasse sein muss oder ob es nicht ausreicht, direkt eine Instanz von JLabel zu nehmen ...

Also die Klasse Variablen komplett weg und die static Elemente wanden non static in die Klassen, in die diese gehören ...

Und wenn man schon dabei ist; Variablen sinnvoll benennen. jf1 wäre evtl. mainFrame oder so. lbl1 dann etwas, wozu dieser Label da ist.
ok ja das mit variablen zu variablen schreiben hab ich schon entdeckt aber du hast recht ich hab schon überlegt ob ich es nicht anders machen kann. Das Thema ist ich möchte ein bewegliches Hintergrundbild das quasi in Schleife läuft also mach ich aus dem einen Bild ein zweites und sage er soll es durchlaufen lassen und dann mit dem zweiten Bild anfangen und dann wieder beim ersten ich denke man kann es probieren . Ich versuche es morgen direkt mal. danke
 

Panda9296

Bekanntes Mitglied
Rechtsklick -> (Refactor ->) Rename -> "Variable" :p

Das ist aber IMO das geringste Problem, viel schlimmer ist dieses Youtube Tutorial... Das hält sich wie die Pest.
Wie meinst du :D? ich lerne gerade den grafischen Aufbau =P es hat auch ganz gut funktioniert... Allerdings habe ich es diesmal wie oben empfohlen abgeändert und so ist es viel übersichtlicher
 

mihe7

Top Contributor
Das Problem dieses "Tutorials" ist, dass dort gezeigt wird, wie man es nicht macht: Konstruktoren als Methoden missbrauchen, statische Variablen (=globaler Zustand) an jeder Ecke, falsch angewandte Vererbung (bzw. falsche Bezeichner) usw. Die Klassen existieren dort doch nur, weil das Framework es fordert. So schreibt man weder objektorientierten noch Java-Code.

Allerdings habe ich es diesmal wie oben empfohlen abgeändert und so ist es viel übersichtlicher
Eben.

es hat auch ganz gut funktioniert...
Ja, natürlich funktioniert das. Java und seine Frameworks sind keine Garanten für guten Code. Und, versteh mich nicht falsch, ich würde auch jedem zugestehen, so etwas Quick & Dirty in der Weise zu implementieren; das stelle ich aber doch bitte nicht als Tutorial für Anfänger ins Netz.

Für die GUI-Entwicklung ist etwas Know-How erforderlich, das über die absoluten Java Basics hinausgeht. Insbesondere wäre hier der Event Dispatch Thread zu nennen. Die Funktionsweise ist nicht kompliziert, aber für das Verständnis unabdingbar. Ohne dieses kommt man leicht auf naheliegende Ideen, die aber nicht funktionieren können (z. B. Animation in einer Schleife, die in einem Listener/Swing Timer ausgeführt wird).
 

Panda9296

Bekanntes Mitglied
Das Problem dieses "Tutorials" ist, dass dort gezeigt wird, wie man es nicht macht: Konstruktoren als Methoden missbrauchen, statische Variablen (=globaler Zustand) an jeder Ecke, falsch angewandte Vererbung (bzw. falsche Bezeichner) usw. Die Klassen existieren dort doch nur, weil das Framework es fordert. So schreibt man weder objektorientierten noch Java-Code.


Eben.


Ja, natürlich funktioniert das. Java und seine Frameworks sind keine Garanten für guten Code. Und, versteh mich nicht falsch, ich würde auch jedem zugestehen, so etwas Quick & Dirty in der Weise zu implementieren; das stelle ich aber doch bitte nicht als Tutorial für Anfänger ins Netz.

Für die GUI-Entwicklung ist etwas Know-How erforderlich, das über die absoluten Java Basics hinausgeht. Insbesondere wäre hier der Event Dispatch Thread zu nennen. Die Funktionsweise ist nicht kompliziert, aber für das Verständnis unabdingbar. Ohne dieses kommt man leicht auf naheliegende Ideen, die aber nicht funktionieren können (z. B. Animation in einer Schleife, die in einem Listener/Swing Timer ausgeführt wird).
danke für den tipp da ich neben der Umschulung einen Grundlagenkurs mit OOP zur Auffrischung gerade nochmal absolviere(auch weil es privat ist und ich ein Zertifikat bekomme) und ich das Spiel erstmal funktionstüchtig hinbekommen möchte werde ich mir das als nächstes aufjedenfall auf die toDo- liste setzen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Wizzard-Game Java Basics - Anfänger-Themen 3
Jxhnny.lpz bouncing Ball (Brick-Breaker-Game) Java Basics - Anfänger-Themen 1
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
X Game of Life Nachbarn zählen Java Basics - Anfänger-Themen 20
P Moore Nachbarschaft-Game of Life Java Basics - Anfänger-Themen 1
B Verwirrender Game Loop Java Basics - Anfänger-Themen 6
L Conways Game of Life Java Basics - Anfänger-Themen 4
J Game of life Java Basics - Anfänger-Themen 3
B "Snake"-Game verbuggt Java Basics - Anfänger-Themen 0
K Game of live Java Basics - Anfänger-Themen 4
F Java Collectors Game Hilfe Java Basics - Anfänger-Themen 4
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
B Wer kennt einen Link für vollständiges, leichtverständliches "Game of Life"? Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
C Game of life Java Basics - Anfänger-Themen 14
K Gutes Java 3D Game Tutorial gesucht Java Basics - Anfänger-Themen 6
Java-Insel Game-Konzept Java Basics - Anfänger-Themen 10
G Game Loop Problem Java Basics - Anfänger-Themen 9
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
V Start ins Java Game Development Java Basics - Anfänger-Themen 22
I Programm Game & AR Java Basics - Anfänger-Themen 13
P Game of Life Java Basics - Anfänger-Themen 18
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
D Game of Life - Nachbarn zählen Java Basics - Anfänger-Themen 8
Developer_X Game of Life Java Basics - Anfänger-Themen 10
L Game of life in einem FensterVisualisieren Java Basics - Anfänger-Themen 2
D Game of Life Java Basics - Anfänger-Themen 14
T Anagram Game - warum ist es auf 2 Packages aufgeteilt? Java Basics - Anfänger-Themen 3
S 3d-game java3d/eigene API Java Basics - Anfänger-Themen 4
C Pong Game Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben