Skocz do zawartości

[JAVA] Gra na komórke


Max1414

Polecane posty

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

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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...