Seite 1 von 3 123 LetzteLetzte
Like Tree2Danke
ERLEDIGT
NEIN
ANTWORTEN
43
ZUGRIFFE
2437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Hallo Leute!
    Ich habe ein kleines Problem, nämlich, dass ich die Klasse in der ich das .drawImage() habe einfügen will.
    Wie geht das, oder besser gesagt, geht das überhaupt?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    package Game;
      
    import javax.swing.*;
     
    public class Frame {
     
            public Frame(){
                    JFrame frame = new JFrame();
                    frame.add(new Level());
                    frame.setTitle("GotT");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setSize(700,365);
                    frame.setVisible(true);
                    frame.setLocationRelativeTo(null);
            }
            public static void main(String[] args){
                    new Frame();
            }
    }

    Hier die zweite Klasse:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    
    package Game;
     
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.*;
     
     
    public class Level implements ActionListener {
        
        WorldGenerator2 g;
        Keys k;
        Timer t;
     
        
        Image q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15, q16, q17, q18, q19, q20, q21, q22, q23, q24, q25, q26, q27, q28, q29, q30, q31, q32;
        Image q33, q34, q35, q36, q37, q38, q39, q40, q41, q42, q43, q44, q45, q46, q47, q48, q49, q50, q51, q52, q53, q54, q55, q56, q57, q58, q59, q60;
        
        int x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32;
        int x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60;
     
        int y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11, y12, y13, y14, y15, y16, y17, y18, y19, y20, y21, y22, y23, y24, y25, y26, y27, y28, y29, y30, y31, y32;
        int y33, y34, y35, y36, y37, y38, y39, y40, y41, y42, y43, y44, y45, y46, y47, y48, y49, y50, y51, y52, y53, y54, y55, y56, y57, y58, y59, y60; 
        
        int dx = k.getdx();
        int dy = k.getdy();
        
        public void timer(){
                t = new Timer(5, this);
        }
        public void geti()
        {
            q1 = g.getImage1();
            q2 = g.getImage2();
            q3 = g.getImage3();
            q4 = g.getImage4();
            q5 = g.getImage5();
            q6 = g.getImage6();
            q7 = g.getImage7();
            q8 = g.getImage8();
            q9 = g.getImage9();
            q10 = g.getImage10();
            //holt sich 60 Images aus einer anderen Klasse
        }
     
        public void x(){        //Definiert die x Koordinate
            x1 = 300;
            x2 = 200;
            x3 = 400;
            x4 = 300;
            x5 = 300;
            x6 = 400;
            x7 = 500;
            x8 = 500;
            x9 = 400;
            x10 = 500;
            //auch wieder für 60 Bilder
        }
        
        public void y(){            //Definiert die y Koordinate
            y1 = 300;
            y2 = 300;
            y3 = 400;
            y4 = 400;
            y5 = 500;
            y6 = 400;
            y7 = 200;
            y8 = 300;
            y9 = 500;
            y10 = 400;
            //immer noch 60 Bilder
        }
        
        public void move(){         //Macht es möglich, dass der Hintergrund sich bewegt
            x1 = x1 + dx;
            x2 = x2 + dx;
            x3 = x3 + dx;
            x4 = x4 + dx;
            x5 = x5 + dx;
            x6 = x6 + dx;
            x7 = x7 + dx;
            x8 = x8 + dx;
            x9 = x9 + dx;
            x10 = x10 + dx;
                    // das ganze + dx
     
            y1 = y1 + dy;
            y2 = y2 + dy;
            y3 = y3 + dy;
            y4 = y4 + dy;
            y5 = y5 + dy;
            y6 = y6 + dy;
            y7 = y7 + dy;
            y8 = y8 + dy;
            y9 = y9 + dy;
            y10 = y10 + dy;
            //plus dy
        }
        
        public void paint(Graphics g2){
            Graphics2D g2d = (Graphics2D) g2;       //Sollte eigentlich alles am Bildschirm ausgeben
            
            g2d.drawImage(q1, x1, y1, null);
            g2d.drawImage(q2, x2, y2, null);
            g2d.drawImage(q3, x3, y3, null);
            g2d.drawImage(q4, x4, y4, null);
            g2d.drawImage(q5, x5, y5, null);
            g2d.drawImage(q6, x6, y6, null);
            g2d.drawImage(q7, x7, y7, null);
            g2d.drawImage(q8, x8, y8, null);
            g2d.drawImage(q9, x9, y9, null);
            g2d.drawImage(q10, x10, y10, null);
            //und dann für alle Bilder g2d.drawImage
        }
        public void actionPerformed(ActionEvent arg0) {     //Sorgt dafür, dass move und paint immer upgedated wird
            paint();
            move();
        }
    }
    Ja ich benutze keine ArrayList oder ähnliches für move() in Level.
    Und auch ja, ich bin ein Anfänger.

    Sorry für den langen Post
    javaman
    Geändert von javaman13 (16.03.12 um 19:23 Uhr) Grund: Verbesserungswürdig
     

  2. #2
    genodeftest ist offline Mitglied Smaragd
    Registriert seit
    Jun 2009
    Beiträge
    1.023
    Hi und willkommen im Forum
    1. Dein Code ist Java, also schreib ihn doch bitte auch in java-Tags (siehe meine Signatur).

    2. Zu deiner ersten Klasse: Sind das 2 verschiedene Dateien? Wenn ja, pack sie doch in 2 Code-Blöcke. Wenn nein, hast du da bereits ein paar Fehler, weil du z.B. nicht mehrere Anweisungen 'package xyz' in eine Datei packen kannst. Außerdem hast du 2 mal die gleiche Klasse in einer Datei deklariert, das willst du bestimmt nicht!

    3. Es empfiehlt sich nicht, das Programmieren mit Spielen anzufangen. Vielleicht solltest du erst mal die Grundlagen lernen. Dazu solltest du dir ein Buch über Java besorgen oder http://openbook.galileocomputing.de/javainsel/ größtenteils durcharbeiten

    4. Zu deinem Problem mit den Bildern: Du brauchst erst mal eine Quelle, von der du die Bilder laden willst (Dateiname, Ort im Paket / URL / …). Und dann lädt man Bilder üblicherweise mit ImageIcon oder BufferedImage (je nach Anwendungszweck), wie auch im 2. Band der JavaInsel, http://openbook.galileocomputing.de/java7/ in den Kapiteln 9.3 und 10.6 beschrieben ist.

    5. Ich verstehe zwar nicht, was du machst, aber bei so vielen Bildern rentiert es sich, Arrays, Listen oder ähnliche Datenstrukturen zu verwenden. (Grundlagen)
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.

  3. #3
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Wie du natürlich nicht wissen kannst sind alle bilder schon in einer anderen klasse deklariert und werden nur in die Klasse Level geholt.

    Die Grundlagen beherrsche ich durchaus, zum nachlesen für manche dinge benutze ich auch immer wieder dieses Buch(im Internet). Trotzdem konnte ich in ihm meine Rrage niht beantworten.

    Mit den zwei Klassen und der trennung sollte es jetzt auch passen.

    LG
    javaman
     

  4. #4
    genodeftest ist offline Mitglied Smaragd
    Registriert seit
    Jun 2009
    Beiträge
    1.023
    Zitat Zitat von javaman13 Beitrag anzeigen
    Mit den zwei Klassen und der trennung sollte es jetzt auch passen.
    Nein, dein 1. Code-Block compiliert so nicht mal. Weil du
    • 2 gleichnamige Klassen in einer Datei hast
    • 2 package-Deklarationen in einer Datei hast
    • 2 Klassen der Sichtbarkeit 'public' in einer Datei hast
    und evtl. noch ein paar andere Gründe.

    Und auch der Code der 2. Klasse ist nicht Ok. Warum schreibst du beispielsweise für jedes Bild eigene Variablen, Methoden, etc.? Das ist richtig umständlich und dein Code wird so nicht wiederverwendbar, sondern sehr statisch.

    Zeichnen solltest du deine Elemente in einer paintCompontent()-Methode in einer Klasse, die von JPanel erbt. Dieses JPanel musst du natürlich dem JFrame hinzufügen.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.

  5. #5
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Oh sorry, das doppelte war ein Fehler beim einfügen, da ich zuerts nicht alles kopiert hatte.

    Mit dem zweiten hast du recht, dass werde ich noch ändern müssen, da später noch andere Level dazukommen.
     

  6. #6
    genodeftest ist offline Mitglied Smaragd
    Registriert seit
    Jun 2009
    Beiträge
    1.023
    Achtung:
    Du solltest zum Zeichnen die paintComponent()-Methode eines JPanels überschreiben. Das Zeichnen wird mit repaint() angestoßen. Und bewege deine Objekte doch, bevor du sie zeichnest.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.

  7. #7
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Was meinst du denn mit:
    "Und bewege deine Objekte doch, bevor du sie zeichnest."
    Sonst danke
     

  8. #8
    genodeftest ist offline Mitglied Smaragd
    Registriert seit
    Jun 2009
    Beiträge
    1.023
    move() vor repaint() ausführen. Und die Sachen mit dem Zeichnen sind echt Grundlagen, die du dir am besten erst mal aneignest (aus einem Buch).
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.

  9. #9
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    achso
    Verstehe
     

  10. #10
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Ich habe schon wieder ein problem:
    um repaint ausführen zu können braucht man: super.paint(g)
    so etwa
    Code java:
    1
    2
    3
    
    public void paint(Graphics g){
            super.paint(g); //das hier
            Graphics2D g2d = (Graphics2D) g;

    Das problem dabei ist, das Eclipse mir folgenden Fehler schreibt:
    The method paint(Graphics) is undefined for the type Object.

    warum****?
     

  11. #11
    Avatar von Akeshihiro
    Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    726
    Von welcher Komponente erbt denn deine?
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  12. #12
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    oh genau... danke, ich hatte vergessen bei der Klasse JPanel einzufügen.
     

  13. #13
    Avatar von Akeshihiro
    Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    726
    Trotzdem sollst du bei Swing nicht paint(Graphics), sondern paintComponent(Graphics) überlagern.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

  14. #14
    javaman13 ist offline Mitglied
    Registriert seit
    Mar 2012
    Beiträge
    22
    Das habe ich gemacht, trotzdem gibt es immer noch nichts aus, der frame ist leer!
     

  15. #15
    Avatar von Akeshihiro
    Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    726
    Also ich habe jetzt mal ein lauffähiges Programm aus dem gebastelt, was du uns gepostet hast. Ich musste aber paar Sachen ändern und dazubasteln, weil sehr viel fehlt. Wie wäre es, wenn du vielleicht den gesamten Code postest oder das Projekt als Anhang einfügst? Das würde uns einiges erleichtern.

    Das Problem ist zum einen, dass wir nicht wissen, was du vor hast und zum anderen, dass du entweder die Grundlagen noch nicht richtig verinnerlicht hast oder dich mit GUI-Programmierung noch nicht richtig vertraut gemacht hast oder aber damit einfach nicht klar kommst. Ist kein Angriff oder sowas, aber irgendwo muss man ansetzen können, damit das voran kommt.
     
    Man sagt, das Schwert eines Samurai sei seine Seele ...

    Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.

    Das Schmieden ist eine Kunst; Das Schreiben auch ;)

Thema nicht erledigt
Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. JFrame durch Menüpunkt in einem anderen JFrame aufrufen
    Von TDS95 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 11.01.12, 07:59
  2. Problem mit JFrame
    Von Code46 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 22.04.10, 10:52
  3. Aus einem JFrame anderes JFrame starten
    Von maddos im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.08.07, 12:24
  4. Ein JFrame aus einem anderem JFrame aufrufen!
    Von Lautsprecher im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.11.05, 09:37
  5. Antworten: 2
    Letzter Beitrag: 07.09.05, 12:16

Stichworte