Max1414 Napisano Sierpień 10, 2008 Zgłoś Share Napisano Sierpień 10, 2008 Ogólnie to narazie nie mam zbyt dużego pojęcia o javie więc tylko tak sobie próbuje i gier nigdy wcześniej nie pisałem. zrobiłem sobie w timerze coś takiego : public void run() { Graphics g = getGraphics(); g.fillRect(0, 0, getWidth(), getHeight()); sp.move(-5, -5); sp.paint(g); sprite.paint(g); if (sp.getX() <= -5 || sp.getY() <= -5){ cancel(); } flushGraphics(); } gdzie sp i sprite to Sprite. Timer przesuwa wystrzelony pocisk, zamalowując najpierw wszystko i odrysowując go w innym miejscu, dalej odrysowuję statek. Tylko mam taki problem: jeżeli wystrzele więcej niż jeden pocisk to wszystko "miga" przez to zamalowywanie. Jak mogę sobie z tym poradzić, żeby nie migało? Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Sierpień 10, 2008 Zgłoś Share Napisano Sierpień 10, 2008 powinienes rysowac w zdarzeniu paint canvasa a w timerze wywolywac repaint canvasa www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Sierpień 10, 2008 Autor Zgłoś Share Napisano Sierpień 10, 2008 nie sądzę, żeby to miało większe znaczenie gdzie co rysuje... dziedzicze po GameCanvas tam się robi raczej swoją prockę rysująca (przynajmniej z tego co wyczytałem), no ale dobra... zrobiłem tak jak mówiłeś protected synchronized void mypaint(){ Graphics g = getGraphics(); boolean koniec = true; do{ /* przesniecie wszystkich pociskow i odrysowanie * zaczekanie 90ms * nastepnie odrysowanie statku na srodku * i znowu przesuniecie pociskow ... dopoki wszystkie Sprite'y w * tablicy nie beda == null */ koniec = true; for (int i = 0; i < pociski.length; i++){ if (pociski[i] == null) continue; else koniec = false; pociski[i].move(-5, -5); pociski[i].paint(g); if (pociski[i].getX() < -5 || pociski[i].getY() < -5) pociski[i] = null; } flushGraphics(); try { wait(90); } catch (InterruptedException ex) { ex.printStackTrace(); } g.setColor(0x000000); g.fillRect(0, 0, getWidth(), getHeight()); sprite.paint(g); flushGraphics(); } while (koniec == false); } tylko jest kolejny problem... żeby wywołać "wait" musi być procka synchronizowana, bo bez synchronizacja gdy wywołam ją drugi raz to wywala exception. A znowu gdy jest synchronizowana to tylko jeden pocisk na raz moge wystrzelić. Po drugie dalej miga, nawet jeżeli jeden pocisk leci. Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Bluebat Napisano Sierpień 11, 2008 Zgłoś Share Napisano Sierpień 11, 2008 Nie jestem specem od J2ME, ale na moje oko trzeba wywalic to flushGraphics na końcu (ma być tylko jedno). Druga opcja (lepsza): zamalowujesz na bialo rysujesz wszystkie pociski rysujesz statek flushGraphics() wait(90) Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Sierpień 12, 2008 Autor Zgłoś Share Napisano Sierpień 12, 2008 drugi sposób podziałał na mruganie, dzieki ale jak zrobić, żeby można było strzelać kilkoma pociskami naraz? bo w "wait(90)" musi być synchronizowane, bo inaczej wywala exception, a jak jest synchronizowane to dwóch naraz sie nie wystrzeli Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 12, 2008 Zgłoś Share Napisano Sierpień 12, 2008 to może zamiast wait'a spróbuj zastosować metodę z fps'ami http://www.dreamincode.net/code/snippet335.htm nie testowałem ale powinno działać Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Sierpień 13, 2008 Autor Zgłoś Share Napisano Sierpień 13, 2008 coś lepszego znalazłem, demo gry w NetBeans dużo rzeczy wyjaśnia i pokazuje jak za pomocą tamtego GameDesign gierke zrobić ^^ Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.