2016-06-30 3 views
-1

Недавно я решил начать изучать, как делать 2D-игры с JAVA (eclipse), поэтому я нашел учебник онлайн, в котором показано, как сделать игру superMari с java, я написал тот же самый код, который он написал, и Я шаг за шагом последовал за тем, что он сделал, о чем было не о чем поговорить, к сожалению, он показывает код, после исключения, окно с двумя изображениями, в то время как мое показывает только окно без изображений, я гарантирую, что я импортировал два изображения и помещал их в один пакет, чтобы избежать всех проблем, но он все еще ничего не показывает.Изображения не отображаются в моей программе java

мой код имеет два класса, «основной» и «сцена», вот он, надеюсь, кто-то найдет решение для меня, спасибо вам, ребята!

Main.java:

package AiMEUR.AMiN.jeu; 

import javax.swing.JFrame; 

public class Main { 

    public static Scene scene; 

    public static void main(String[] args) { 

     JFrame fenetre = new JFrame("Naruto in mario World!!"); 
     fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     fenetre.setSize(700, 360); 
     fenetre.setLocationRelativeTo(null); 
     fenetre.setResizable(false); 
     fenetre.setAlwaysOnTop(true); 

     scene = new Scene(); 


     fenetre.setContentPane(scene); 
     fenetre.setVisible(true); 

    } 

} 

Scene.java:

package AiMEUR.AMiN.jeu; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class Scene extends JPanel{ 

    private ImageIcon icoFond; 
    private Image imgFond1; 

    private ImageIcon icoMario; 
    private Image imgMario; 

    private int xFond1; 

    public Scene(){ 

     super(); 

     this.xFond1 = -50; 

     icoFond = new ImageIcon(getClass().getResource("/Images/fond.gif")); 
     this.imgFond1 = this.icoFond.getImage(); 
     icoMario = new ImageIcon(getClass().getResource("/Images/1.png")); 
     this.imgMario = this.icoMario.getImage(); 
    // paintComponent(this.getGraphics()); 
    } 

    public void paintCompenent(Graphics g){ 

     super.paintComponent(g); 
     Graphics g2 = (Graphics2D)g; 

     g2.drawImage(this.imgFond1, this.xFond1, 0, null); 
     g2.drawImage(imgMario, 300, 245, null); 
    } 

} 
+0

Я хотел бы проверить, что 'icoFond = новый ImageIcon (getClass(). getResource ("/ Images/fond.gif")); 'и другая аналогичная строка фактически загружают ваши изображения. –

+0

извините! но я не понял, что вы имеете в виду! вы думаете, я должен изменить эту строку кода, на которую вы ссылались? –

+0

Нет, это линия, которую вы должны проверить. Попробуйте это позже: 'int status = icoFond.getImageLoadStatus()' - это должен быть один из «MediaTracker.ABORTED», 'MediaTracker.ERRORED' или' MediaTracker.COMPLETE'. См. API по адресу https://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html –

ответ

1

Вы не назвали метод paintComponent правильно, и поэтому оно не отменено.

Правильное название paintComponent не paintCompenent:

public class Example extends JPanel { 

    @Override 
    public void paintComponent(final Graphics g) { 
     super.paintComponent(g); 
    } 
} 
+0

Спасибо! Это был правильный ответ! Теперь работает –

-1

Вы можете определить состояние погрузки в ImageIcon делать что-то вроде этого:

public Scene(){ 

    super(); 

    this.xFond1 = -50; 

    icoFond = new ImageIcon(getClass().getResource("/Images/fond.gif")); 

    int status = icoFond.getImageLoadStatus(); 
    switch (status) { 
     case (MediaTracker.COMPLETE): { 
      System.out.println("icoFond image has successfully loaded"); 
     } 
     case (MediaTracker.ERRORED): { 
      System.out.println("The icoFond image didn't load successfully"); 
      // probably because the image isn't actually at "/Images/fond.gif" 
     } 
    } 


    this.imgFond1 = this.icoFond.getImage(); 
    icoMario = new ImageIcon(getClass().getResource("/Images/1.png")); 
    this.imgMario = this.icoMario.getImage(); 
// paintComponent(this.getGraphics()); 
} 
Смежные вопросы