Obrazek jako tło ramki

Obrazek jako tło ramki
0

No więc zacznę od tego, że na początku programowałem w C++, bla, bla, teraz przeniosłem się na Javę i spróbowałem napisać swoją pierwszą grę - snake..
..no OK, wszystko działa, jest w wersji dla jednego i dwóch graczy, wszystko cacy, **ale problem jest z najważniejszą rzeczą ** (wg. mnie :-) ** - ustawienie tła ramki jako obrazu **. Chciałbym nadać tej grze trochę poziomów, a każdy ma mieć inne tło, lecz problem w tym że nie wiem jak dodać do ramki obraz- z tego powodu napisałem ten temat.
Jak by co, korzystam z ramki javax.swing.JFrame. (Mógłbym dodać JLabel z obrazkiem, ale to koliduje z wężykiem (którego poszczególne części są pochodnymi od JLabel))

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Nadpisz metodę paint dla ramki i narysuj wpierw obrazek z tłem, a potem węża.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
1

Po pierwsze, jeśli nadpisze paint to g**no zobaczy. (w sensie zobaczy samo tło, a komponentów już nie)
nadpisać musi paintComponent i to w taki sposób:

Kopiuj
public void paintComponent(Graphics g)
{
      g.drawImage(background,0,0,null);
      super.paintComponent(g);
}

Po drugie, najważniejsze - skąd tak idiotyczny pomysł, by grę pisać za pomocą komponentów Swinga? Toż to jest framework do GUI, nie do gier!
Rendering gry powinieneś zrobić sam, w Java2D (w metodzie paint() komponentu tj. Canvas czy JPanel), ale rób jak chcesz...

jest 6 rano, więc wybaczcie nastawienie.

Zobacz pozostały 1 komentarz
Kerai
Sam jesteś idiotyczny, wiesz co się dzieje z containerami, gdy podmienisz paint?
Shalom
@Kerai nic sie nie dzieje, bo najpierw malujesz tło a potem wszystkie komponenty...
Olamagato
Kerai ma rację. Trudno krócej i precyzyjniej odpowiedzieć autorowi. ps. Korekta: Bez tego super - on jest zbędny. Super byłby potrzeby w paint().
bogdans
Pisząc o idiotycznej radzie miałem na myśli sekwencję drawImage(), paintComponent(). Wpierw jest rysowany rysunek,a za cwilę jest mazany.
Kerai
Jeśli komponent jest przezroczysty, to nic się nie zmarze... To właściwie z przyzwyczajenia - z JPanelem nie ma sensu, ale jak robiłem tło dla komponentu JTextPane, to właśnie w taki sposób.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Głupoty opowiadasz (jeśli chodzi o rysowanie).
Wystarczy nadpisać paint(), Twój pomysł (wpierw drawImage(), potem super()) jest idiotyczny. Zmaże obrazek, który narysował.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Kerai
Co zmaże? Czym? Usuń tło, ustaw setOpaque(false) ... Jak komponent nie ma tła, to niby czym zmaże?
bogdans
Zamiast pieprzyć od rzeczy uruchom swój kod i zobacz efekty.
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

@bogdans
Użycie paintComponent jest właściwe ponieważ w takim JPanelu mogą byc jeszcze inne komponenty gui (i to wielokrotnie zagnieżdżone). Nadpisanie paint spowoduje, że trzeba będzie ręcznie odpalać paintChildren, ręcznie paintComponent (choć dla JPanela nie robi to nic poza wypełnieniem go kolorem tła) oraz paintBorder, ponieważ taki JPanel mimo wszystko może mieć zmiennego focusa (np. obok może być osobny panel z jakimiś opcjami czy czymkolwiek).
Dopiero co był wątek, w którym jakiś newbie próbował też painta i dziwił się, że komponenty w panelu pokazują mu się dopiero jak na nie najedzie myszą.
Inna sprawa, że jeżeli ktoś chce w gołym panelu tylko malować grafikę oraz tło, to zwykły paint mu wystarczy. Ale tego tutaj nie można założyć bo nie widać kodu, jednak na pewno autor używa komponentów Swinga bo pisze o tym, że wąż jest robiony z JLabeli. A więc paintChildren jest niezbędny. Dlatego najtaniej jest użyć paintComponent.

Krótko mówiąc: Albo paintComponent z wymalowaniem wyłącznie obrazka, albo paint z użyciem super.paint i przedefiniowanie paintComponent na taki, który nic nie robi (pusty).


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
edytowany 2x, ostatnio: Olamagato

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.