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))

0

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

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:

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.

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ł.

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).

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