PingPongBall wird nicht angezeigt

dichter

Mitglied
Hallo liebe java-forum- community,

aufregung! mein erster Beitrag:)

zu meinem problem: ich bin gerade dabei ein simples pingpong zu programmieren.
dazu habe folgende Klassen: Display, Ball und die Panels

Mein Problem ist nun, dass ich in der Displayklasse voher folgende Zeile hatte:
g.drawImage(ball, ( PingPong.getXSIZE() / 2 ) - ball.getWidth() , ( PingPong.getYSIZE() / 2 ) - ball.getHeight() , null);
welches mir den ball in der Mitte des spielfeldes angezeigt hatte.

da ich aber für die bewegung des Balls mit xpos und ypos klar machen möchte, wurde
folgende Zeile draus: g.drawImage(ball, ball.xpos, ball.ypos, null);

Nun die panels werden noch angezeigt. der Ball allerdings nicht. Auch eine Ausgabe von ball.xpos und ball.ypos ergibt sinnvolle werte.

hat jemand ne idee woran es liegen könnte, dass die XY-Werte in ordnung sind aber der ball dennnoch nicht gezeichnet wird?

mfg dichter

Java:
import java.awt.Graphics;

import javax.swing.JPanel;

public class Display extends JPanel{
    
    Ball ball;
    Panel panel_player1, panel_player2;
        
    public Display(){
        
        ball = new Ball();
        panel_player1 = new Panel();
        panel_player2 = new Panel();
                    
    }
    
    public void paintComponent(Graphics g){
        
        //Spielfläche
        g.drawRect(0, 0, PingPong.getXSIZE() - 1 , PingPong.getYSIZE() - 1 );
        //Ball
        g.drawImage(ball, ball.xpos, ball.ypos, null);
        System.out.println(ball.xpos + " " + ball.ypos);
        //Panels
        g.drawImage(panel_player1, 0 , ( PingPong.getYSIZE() / 2 ) - panel_player1.getHeight() , null);
        g.drawImage(panel_player2, PingPong.getXSIZE() -  panel_player1.getWidth(), (PingPong.getYSIZE() / 2 ) -  panel_player2.getHeight() , null);
        
    }

Klasse Ball
Java:
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Ball extends BufferedImage {

    public int xpos = 0, ypos = 0;
    public int speed = 3;
    
    public Ball() {
        super(48, 47, BufferedImage.TYPE_INT_ARGB);    
        
        xpos = ( PingPong.getXSIZE() / 2 ) - this.getWidth();
        ypos = ( PingPong.getYSIZE() / 2 ) - this.getHeight();
                
        try {
            ImageIO.read(getClass().getResource("ball.png") );
             
            //weiß transparent machen
            for (int i = 0; i < getWidth() ; i++) {
                for (int j = 0; j < getHeight(); j++) {
            
                    int rgb = getRGB(i, j);
                    
                    int alpha = (rgb & 0xFF000000) >>> 24;
                    int red = (rgb & 0x00FF0000) >>> 16;
                    int green = (rgb & 0x0000FF00) >>> 8;
                    int blue = (rgb & 0x000000FF) >>> 0;
            
                    if (red == 255 && green == 255 && blue == 255) {
                        int new_rgb = (0 << 24) | (red << 16) | (green << 8) | blue;
                        setRGB(i, j, new_rgb);
            
                    }
                }
            }
            
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        
    }
}
 

dichter

Mitglied
hä wie in variable gespeichert?


die panelbilder sind ja auch nicht in extra variablen gespeichert und werden angezeigt.
ausserdem dachte ich durch extends bufferedimage ist es doch schon ein bild, welches mit ball = new Ball() erzeugt wird oder irre ich?

mfg dichter
 

Major_Sauce

Bekanntes Mitglied
Tach,

1. also erstmal solltest du dich informieren, wann man extends benutzt.
Du erweiters das BufferedImage nicht, also sei so gut und speicher das einfach in dem Ball und ruf es danach mit ball.image auf oder mach nen Getter.

2. Das mit dem weiß zu transparent machen geht normalerweise schöner, da du auch direkt in den Pixeln der Images rumfummeln kannst, dann sparst du dir den getRGB und setRGB aufruf welcher auch noch ein wenig Zeit frisst, ist aber nicht wichtig.

3. Was ist PingPong.getXSIZE ?

4. Wo genau das Problem liegt kann ich dir im Moment nicht wirklich sagen.
Aber versuch doch mal folgendes:
Du sagst vorher gings, dann lass das Programm mal laufen, und schau was der dir für Koordinaten ausgibt.
Wenn du findest dass die Koordinate ok sein sollte, dann hardcode sie mal in die drawImage-Methode.
Wenn der Ball dann nicht zu sehen ist, dann weißt du dass die Koordinaten nicht stimmen.

Ach ja, ich denke dass die Koordinaten einfach nicht passen.
z.B PingPong.getXSIZE ist null, dann is das Bild im negativen gerendert...

mfg major
 
Zuletzt bearbeitet:

Major_Sauce

Bekanntes Mitglied
Ach ja, ich würde dir außerdem davon abraten mit JPanels zu arbeiten, Canvas mit doublebuffering ist wesentlich Performanter.
Wenn du da Probleme mit hast kannst du mich gerne anschreiben, dann leiste ich mal nen bisschen Live-Support.

mfg Major
 

dichter

Mitglied
hmm habs nun hinbekommen mit
Java:
this.getGraphics().drawImage(ImageIO.read(getClass().getResource("ball.png")), 0, 0, null);
statt
Java:
ImageIO.read(getClass().getResource("ball.png") );

hab aber heute morgen irgendwas gelesen dass getGraphics nicht gemacht werden sollte. warum auch immer?

zu 1. noch nicht:), ich hab mir aber gedacht, dass man das hier vielleicht als grundgerüst für son breakout spiel werden könnte. und wenn ich da die blockfarbe ändern will, wäre es schon gut wenn ich ein bild habe in den ich rumfuschen kann

zu 2. da hast du warscheinlich recht. das stückchen ist von google gemopst

zu 3. PingPong.getXSIZE sollte eigentlich der statische abruf der spielgröße sein, die in der hier nicht geposteten klasse PingPong enthalten ist. ich hab da die final static ints reingemacht

achso wenn ich statt JPanel canvas nehme habe ich in der PingPongklasse( da liegt der frame drin) das problem dass ich setContentPane(display), was ja dann nen canvas wäre, nicht machen kann, vorschläge seitens eclipse mit rootpane und layeredpane hats leider nicht geklappt.

danke dir trotzdem:)
mfg dichter
 
Zuletzt bearbeitet:

Major_Sauce

Bekanntes Mitglied
Du hast ganz oben beschrieben dass du nur die Koordinaten der drawImage()-Methode verändet hast, klar funktioniert
Java:
ImageIO.read(getClass().getResource("ball.png") );
nicht, da du da nur ein Bild lädst es aber nirgends Speichers, da müsste dann noch ein this = davor...

Öhm, zu 1:
Du kannst das Image später immer noch verändern, dafür gibt es Reader und ähnliches.

zu 3: Kann ich nicht wissen, wie gesagt habe angenommen dass du nur die Koordinaten verändert hast.

Zu dem Canvas Ding:
Ich kann dir nur raten eine Engine zu nutzen, die funktionieren recht gut und haben meißt schon relativ gute Render-Techniken.
Da kann ich dir als Einsteiger aber leider nichts ans Herz legen, wüsste nicht welche wirklich Anfängerfreundlich ist.
Auf jeden fall is Canvas besser als die JPanels, kannst wenn du willst mal meine Engine anschauen, vielleicht ist die ja was für dich, stehe natürlich für Fragen zur Verfügung.

IndieEngine :
https://bitbucket.org/indieversestudios
Falls du sie ausprobieren willst: Ich bin mir nicht sicher ob IndieEngine II schon fertig war, ich glaube ja, da sind auf jeden Fall auch schon Animationen mit drin.

mfg Major
 

dichter

Mitglied
hallo major,

ich hab leider nicht wirklich ne vorstellung davon was eine Engine macht. soweit ich das verstanden habe, handelt es sich um eine ansammlung, die es dem programmierer einfacher machen zb mit xyz.animate() statt erst noch mit schleifen bilderarrays durchlaufen zu müssen.

hatte ganz am anfang mal sone JavaGameGrid (APLU (Aegidius Pluess) Homepagejgamegrid) rum probiert aber irgendwie nicht gecheckt wie mans richtig benutzt:)
ist das sowas?

mfg dichter
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
kodela BufferStrategy wird nicht gefunden AWT, Swing, JavaFX & SWT 5
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S ImageView wird dem Gridpane nicht zugefügt AWT, Swing, JavaFX & SWT 1
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
S JavaFX Wird es überhaupt genutzt? AWT, Swing, JavaFX & SWT 3
FRI3ND GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Controller wird zu groß, was tun ? AWT, Swing, JavaFX & SWT 5
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
zhermann JavaFX Main App wird nicht geöffnet AWT, Swing, JavaFX & SWT 6
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
K JavaFX Stage wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Liste - ListView wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
N JavaFX TextArea Updaten bevor Prozess gestartet wird AWT, Swing, JavaFX & SWT 7
B HBox wird nicht im Bottom angezeigt AWT, Swing, JavaFX & SWT 8
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben