Max1414 Posted August 10, 2008 Report Share Posted August 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 to comment Share on other sites More sharing options...
Blind Posted August 10, 2008 Report Share Posted August 10, 2008 powinienes rysowac w zdarzeniu paint canvasa a w timerze wywolywac repaint canvasa www.blinder.pl - Blog Link to comment Share on other sites More sharing options...
Max1414 Posted August 10, 2008 Author Report Share Posted August 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 to comment Share on other sites More sharing options...
Bluebat Posted August 11, 2008 Report Share Posted August 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 to comment Share on other sites More sharing options...
Max1414 Posted August 12, 2008 Author Report Share Posted August 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 to comment Share on other sites More sharing options...
sazian Posted August 12, 2008 Report Share Posted August 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 to comment Share on other sites More sharing options...
Max1414 Posted August 13, 2008 Author Report Share Posted August 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.