Migajace obrazki

0

Witam. Mam mały problem.

Tworze aplety w javie w przegladarce internetowej. Mam problem podczas nakladania obrazka na obrazek. Problem tkwi w tym ze obrazek nakladany (*.gif) miga.
Domyslam sie ze to moze najlepiej rozwiazac za pomocą tzw. podwojnego buforowania (tak to sie robilo w innych jezykach). Czyli tworzylo by sie obraz (bufor) na ktorym by sie rysowalo obiekty, a potem wyswietlilo by sie caly obrazek na ekranie.

Jak sprawic abym mogl sobie wyswietlic ten obrazek na obrazku tak aby nie migal?

0

Wrzucaj obrazek na panel, ktory ma podwojne buforowanie.

0

CZesc napisz jak mozesz w skrocie jak to zrobic, chcocby komendy. A super jakbys dal przykladowy kod :) dzieki

jdk mam, ale nie moge cos tego ujarzmic. dzieki

0

Cos w stylu:

JPanel panel = new JPanel(true);//true czyli buforowanie wlaczone
panel.add(obrazek); 
//itp.
0

o wielkie dzieki :)

Tak mam jeszcze pytanie. Jestem poczatkujacym w Javie/apletach. Programowalem wczesniej C++,DirectX, OpenGl i wiem co nieco, wiec mysle ze se poradze bez problemu.

Chciailem sie zorientowac o potencjale Javy w internecie. Wydae mi sie za rzadko ona jest stosowana, szczerze mowiac widze samego Flasha, JavaScripta, php, xml, cgi, mysql.

1.Ale sama java jako aplety jakos mało chyba, czy to dopiero sie rozprzestrzenia?
2.Czy mozna nawiazac polaczenie mysql, zapewne tak :) Jaka klasa jest do tego?
3.Czy gra-netowa (multiplayer) w javie to dobry pomysl i czy cos z tego wychodzi (chodzi o szybkosc, jakosc tego co wyjdzie)?

pozdrooo :)
dziekuje za pomoc :)

0

Aplety sa faktycznie średnio popularne z wyjatkiem rożnych czatów dostępnych przez przegladarke tu sa po prostu (prawiewie) nie zastąpione. Potegi javy na codzien nie wiedzisz ale sadze ze czesto z niej kozystasz. Java w sieci to przede wszystkim JEE, servlety, JSP, JSF. Portal http://www.cdm.net.pl stoi na JBossie.

połaczenie z mysql: zapoznaj sie z pakietem javax.sql i odpowiednie JDBC Drivers

Kod natywny jest szybszy od javy ale tak naprawde nie robi to duzej rożnicy. poza tym java to crossplatform każdy odpali ;) niezaleznie od OS'u.
zobacz sobie gre RoboCode http://robocode.sourceforge.net/

Pozdrawiam BookaYashee

0

Tak na szybko sobie cos takiego zrobilem.
http://www.tpascal.ovh.org/projekty/aplet/aplet01.html
i jak? nie ma jeszcze podwojnego buforowania.

Chodzi mi w ogóle o zrobienie gry Rpg multiplayer cos w stylu Final Fatasy, ale dla graczy z calego swiata. Tylko nie wiem czy Java ma odpowiedni potencjał do takiego przedswiewzielcia. Chodzi mi o jave w apletach w przeglarkach internetowych, nie chce robic jako osobny plik *.exe ;) tylko wlasnei mi zalezy na tym by chodzilo to w przeglarace i byla by mozliwa taka gra.

Boje sie ze to moze byc strasznie wolne, choc wydaje m isie ze nie powinn. Serwer stalby np na mym kompie :)

0

tro.ol moglbys pokazac jak uzyles tego Jpanela ? bo prawde mowiac mam ten sam problem a nie mam pojecia jak tego uzyc w aplecie

0

Witam, odświeżę temat, bo mam problem z (prawdopodobnie) podwójnym buforowaniem.

Tworzę program (JWindow, w nim JComponent, na którym rysuję), podwójne buforowanie włączam zarówno dla JWindow jak i dla JComponent (dla JComponent setDoubleBuffered(true); w konstruktorze, a dla JWindow przez: createBufferStrategy(2); strategia = getBufferStrategy(); a w metodzie rysującej pobieram kontekst graficzny ze zmiennej 'strategia' (pod koniec strategia.show();). Prawdopodobnie ustawianie DoubleBufferingu dla JComponent nie jest potrzebne, w poprzednich programach wystarczyło deklarować to wyżej (w JFrame, do której zazwyczaj wsadzałem JComponent czy JPanel, czy tutaj: w JWindow).
Teraz: o co chodzi? Podwójne buforowanie działa ładnie, .gif'y wyświetlają się bez migania, etc. Jednak program ma możliwość 'ukrycia go', a następnie 'przywrócenia' - następuje to za pomocą po prostu: setVisible(true/false);. Nic nie miga do momentu ukrycia, po 'przywróceniu' (setVisible(true);) wszystko miga (podczas przełączania się klatek .gif'a miga cały panel, całe JWindow praktycznie). Sprawdzałem przez metodę 'isDoubleBuffered()', czy nie zmienia się na false po 'ukryciu' - nie zmienia się, zarówno przed jak i po JComponent jest podwójnie buforowany. Czy podczas zmiany widoczności coś się dodatkowo wyłącza/przełącza w parametrach, o czym nie wiem, co może skutkować takim efektem? Zaznaczam, że po włączeniu programu wszystko działa jak należy, dopiero po 'przywróceniu' (po setVisible(true); dla niewidocznego programu) przestaje.

0

Problem częściowo rozwiązałem - zamiast chować program (setVisible(false)), po prostu robię setBounds(par), odpowiednio od aktualnego DisplayMode, żeby program schował się poza granicami monitora ;], po uzależnieniu metod rysujących od aktualnego stanu programu (widoczny/niewidoczny) program (a raczej same rysowanie) i tak nie obciąża systemu.
Pojawia się jednak inny problem, podobny do tego wyżej... Tylko tym razem jest on jakby, bardziej 'losowy'. Raz włączę program i nic nie miga (w takiej sytuacji już do końca trwania tej sesji nic nie miga zazwyczaj, nieważne czy go ukrywam, przywracam, etc.), ale drugi, czy trzeci raz włączę (nie znalazłem na to żadnego wzoru :]) to już miga. Program włącza się zawsze tak samo (przynajmniej jeśli chodzi o ustawienia rysowania, podwójnego buforowania, etc.), nie rozumiem dlaczego czasem miga, a czasem nie.

Czy ktoś z Was spotkał się kiedyś z czymś takim?

EDIT: i jeszcze, przy okazji jedno pytanie: program co jakiś czas (także losowo - czasem tak, a czasem nie), w momencie pobierania kontekstu graficznego ze zmiennej np.Graphics g = zmienna.getDrawGraphics(); wyrzuca nullPointerException (czyli, jakby źle stworzył bufor: zmienna 'zmienna' wcześniej: createBufferStrategy(2); zmienna = getBufferStrategy();). J/w czy ktoś z Was się z czymś takim spotkał, ew. jak to obejść.

EDIT2: z problemem w 'EDIT' sobie poradziłem, napiszę w jaki sposób, może komuś się przyda w przyszłości :). W metodzie rysującej, zamiast: Graphics g = zmienna.getDrawGraphics();, wstrzelcie coś w ten deseń:

Graphics g=null;
    try {g = zmienna.getDrawGraphics();} catch (Exception e1) {
        int proba = 0;
        while (g==null) {proba++;
            createBufferStrategy(2);
            zmienna = getBufferStrategy();
            try {g = zmienna.getDrawGraphics();} catch (Exception e2) {
                if (proba>10) System.exit(0); //aby wyeliminować zwiechę, jeżeli z jakiegoś powodu system naprawdę nie będzie mógł stworzyć bufora
            }
        }
    }

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