Rysowanie po JFrame czy JPanel?

0

Witam.
Zabieram sie za pisanie prostej gierki i pytanie mam czy rysować wszystko na JFrame czy JPanel? Oraz jakie są zalety tych rozwiązań? O tym żeby rysować po JFrame czytałem w książce "Java Tworzenie gier" jednak jest to książka z przed 9 lat wiec nie wiem czy jest to nadal aktualne.
Pozdrawiam

0

Moim zdaniem nie ma to znaczenia, ale jest jedna sprawa, o której należy pamiętać. Ja osobiście nie polecam rysowania po JFrame lub JPanel, ponieważ tak rysowane treści są ulotne. Oznacza to, że jeżeli okno swojej aplikacji zminimalizujesz lub zasłonisz oknem innej aplikacji, to rysunek zniknie.

Najlepiej jest rysować po obiekcie klasy BufferedImage i wyświetlać obiekt BufferedImage jako etykieta na oknie, wtedy to, czy będzie JPanel, czy JFrame nie będzie miało znaczenia. Oczywiście wyświetlenie musi następować za każdym razem, kiedy rysunek ma się zmienic na ekranie.

Samo wyświetlenie wygląda następujaco:

    public static void DisplayPicture(JLabel L, BufferedImage Pic)
    {
        L.setText("");
        L.setIcon(new ImageIcon(Pic));
    }

Można próbować wyświetlać obraz BufferedImage poprzez namalowanie całego obrazu na JPanel, ale tak naniesiony obraz również będzie ulotny, chyba, że napiszesz własną metodę "OnPaint" zastępującą oryginalną metodę "OnPaint" klasy JComponent, która będzie zawierać namalowanie obrazu, jednak ja osobiście takiego sposobu nie próbowałem.

Nie wiem, jaką grę piszesz, ale w takich grach jak "tetris" lub "snake" lub "space invaders" nie będzie odczuwalnego spadku wydajności aplikacji.

0

A czy jeżeli zrobiłbym w trybie pełnoekranowym to wtedy moge po JFrame bo nic mi go nie przysłoni? A poza tym jezeli aktualizuje ekran i rysuje na nowo załóżmy 100 razy na sekunde to chyba moge zostac przy JFrame?

0
krasnolud_kolo napisał(a):

A czy jeżeli zrobiłbym w trybie pełnoekranowym to wtedy moge po JFrame bo nic mi go nie przysłoni?

Ewentualnie mogą być wyskakujące okienka, jak zakończenie pobierania plików w Firefox, nowa wiadomość na GG, dymek z powiadomienia systemowego, ale czy takie okienka zaszkodzą, to musiałbyś zrobić próbę.

krasnolud_kolo napisał(a):

A poza tym jezeli aktualizuje ekran i rysuje na nowo załóżmy 100 razy na sekunde to chyba moge zostac przy JFrame?

Moim zdaniem może być po JFrame. Jeżeli aktualizacja ekranu polega na namalowaniu całego obrazu, to problem z wyświetlaniem i zasłanianiem odpada.

1 użytkowników online, w tym zalogowanych: 0, gości: 1