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

- Rejestracja:ponad 16 lat
- Ostatnio:ponad 2 lata
- Lokalizacja:London
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.

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
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ł.


- Rejestracja:ponad 16 lat
- Ostatnio:około 2 miesiące
- Lokalizacja:Polska, Warszawa
- Postów:1058
@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).
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.
KeraiShalomKerai