Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[JAVA] Problem migoczącego ekranu

#1
[JAVA] Problem migoczącego ekranu
Siemka=]

Piszę sobie gierkę w javie na zaliczenie i mam problem. po dodaniu zamiast statycznych obrazków ruchome gify obraz strasznie zaczął mi migotać. nie bardzo wiem co się dzieje bo robiłem sobie podwójne buforowanie...

a może obyłoby się bez tego podwójnego buforowania? kumpel coś mi mówił o tym że np każda kura może być osobnym wątkiem no ale to dla mnie już kompletnie czarna magia...

mogłby ktoś rzucić okiem i jakoś pomóc mi? piszę w Eclipse.

dzięki=]

>>ZIP z projektem<<
Zapraszam do mojej małej galerii;)

>>Galeria<<
 System operacyjny: windows_vista Przeglądarka: firefox
#2
RE: [JAVA] Problem migoczącego ekranu
Zredukuj migotanie przeslaniajac odpowiednio metode update.
 System operacyjny: windows_2000 Przeglądarka: firefox
#3
RE: [JAVA] Problem migoczącego ekranu
dzięki za odpowiedź.

a mógłbyś mi konkretniej i jaśniej powiedzieć co i jak mam zrobić? bo że podwójne buforowanie powinno być to wiem tyle że ja z javy zielony jestem i nie wychodzi mi implementacja tego buforowania;/
Zapraszam do mojej małej galerii;)

>>Galeria<<
 System operacyjny: windows_vista Przeglądarka: firefox
#4
RE: [JAVA] Problem migoczącego ekranu
Kod:
@Override public void update(Graphics g)
{
paint(g);
}
Nie widzialem projektu, poniewaz pisze z psp.
 System operacyjny: windows_2000 Przeglądarka: firefox
#5
RE: [JAVA] Problem migoczącego ekranu
u mnie metoda update ani paint nie przyjmują żadnych argumentówYsz

Kod:
import javax.swing.JFrame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JPanel;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.image.BufferStrategy;
import java.util.ArrayList;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;



public class KurkaWodna extends Canvas implements Stage{
    
    public long usedTime;
    public BufferStrategy strategia;
    private SpriteCache spriteCache;
    private ArrayList actors;
    public Image tlo;
    Timer timer1 = new Timer();
    
    public KurkaWodna(){
        spriteCache = new SpriteCache();
        JFrame okno = new JFrame("..::Kurka Wodna::..");
        JPanel panel = (JPanel)okno.getContentPane();
        setBounds(0,0,Stage.SZEROKOSC,Stage.WYSOKOSC);
        panel.setPreferredSize(new Dimension(Stage.SZEROKOSC,Stage.WYSOKOSC));
        panel.setLayout(null);
        panel.add(this);
        okno.setBounds(0,0,Stage.SZEROKOSC,Stage.WYSOKOSC);
        okno.setVisible(true);
        okno.addWindowListener( new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
        actors = new ArrayList();
        okno.setResizable(false);
        createBufferStrategy(2);
        strategia = getBufferStrategy();
        requestFocus();
        
        TimerRuch timer1_task = new TimerRuch();
        timer1.schedule (timer1_task, 0, 150);
    }
    
    
    
    public void initWorld(){
        int ktory;
        
        //if(actors.size()<15){
            ktory = (int) (1+Math.random()*2);
            Kurka k = new Kurka(this,ktory);
            k.setX(SZEROKOSC);
            k.setY( (int)( Math.random()*(Stage.WYSOKOSC-250) ) );
            k.setVx( (int)(Math.random()*15)+10);
            //k.setVx(50);
            actors.add(k);
            
        //}
    }
    
    
    public void paintWorld(){
        Graphics2D g = (Graphics2D) strategia.getDrawGraphics();
        tlo = Toolkit.getDefaultToolkit().getImage("img/tlo.jpg");
        g.drawImage(tlo,0,0,this);
        
        for (int i=0;i<actors.size();i++){
            Actor k = (Actor)actors.get(i);
            k.paint(g);
            if(k.x < -200){
                actors.remove(k);
            }
        }
        
        g.setColor(Color.white);
        if(usedTime > 0)
            g.drawString(String.valueOf(1000/usedTime) + " fps", 5, WYSOKOSC-30);
        else
            g.drawString("--- fps",5,WYSOKOSC-30);
        
        strategia.show();
        
    }
    
    public void updateWorld(){
        for(int i=0;i<actors.size();i++){
            Actor k=(Actor)actors.get(i);
            k.act();
            if(k.x<-200){
                actors.remove(i);
                
                //k.x=Stage.SZEROKOSC-5;
            //System.out.println("$$"+actors.size());
            
            
            }
        }        
    }
    
    @Override public void update(Graphics g)
    {
    paint(g);
    }
    
    public SpriteCache getSpriteCache(){
        return spriteCache;
    }
/****************  GŁÓWNA PĘTLKA GRY   *****************/    
    public void game(){
        usedTime=1000;
        //while(1==1){
            initWorld();
            while (isVisible()){
                long startTime = System.currentTimeMillis();
                updateWorld();
                paintWorld();
                usedTime = System.currentTimeMillis()-startTime;
                try{
                    Thread.sleep(Stage.SZYBKOSC);
                }catch (InterruptedException e) {}
                
            //}
        }
    }
    
class TimerRuch extends TimerTask{
        
        public void run(){
            if(new Random().nextInt(5)==1){
                initWorld();
                
            }
        }
    }
    
    
/**********************   MAIN  ****************************/    
    public static void main (String[] args){
        KurkaWodna inv = new KurkaWodna();
        inv.game();
    }
    
    

}

to jest moja główna klasa...
kumpel w ogóle z buforowania nie korzystał i nie widziałem u niego najmniejszego przecięcia no ale niestety jego projektu nie da się adaptować do mojego...;/
Zapraszam do mojej małej galerii;)

>>Galeria<<
 System operacyjny: windows_vista Przeglądarka: firefox
#6
RE: [JAVA] Problem migoczącego ekranu
Za kazdym obiegiem petli wczytujesz plik tla - to muli.
 System operacyjny: windows_2000 Przeglądarka: firefox
#7
RE: [JAVA] Problem migoczącego ekranu
przeciez musze je wczytywać żeby latające kury nie zostawiały za sobą smugi. robiąc osobną metodę

Kod:
public void tlo(){
        Graphics2D g = (Graphics2D) strategia.getDrawGraphics();
        tlo = Toolkit.getDefaultToolkit().getImage("img/tlo.jpg");
        g.drawImage(tlo,0,0,this);
    }

i wywołując ją w:

Kod:
public void game(){
        usedTime=1000;
        //while(1==1){
            tlo();
            initWorld();
            while (isVisible()){
                long startTime = System.currentTimeMillis();
                updateWorld();
                paintWorld();
                usedTime = System.currentTimeMillis()-startTime;
                try{
                    Thread.sleep(Stage.SZYBKOSC);
                }catch (InterruptedException e) {}
                
            //}
        }
}

tworzą się właśnie te smugi a poza tym obraz jak migotał tak migocze;/ (kury błyskają)
Zapraszam do mojej małej galerii;)

>>Galeria<<
 System operacyjny: windows_vista Przeglądarka: firefox
#8
RE: [JAVA] Problem migoczącego ekranu
Ja pisalem kilka gier z animacjami, plansza bedaca panelem byla odpowiednia zmodyfikowana [przeslonieta metoda update oraz paintComponent] a miganie nie wystepowalo.
Blyska ekran czy kury?, bo juz nie rozumiem.
 System operacyjny: windows_2000 Przeglądarka: firefox
#9
RE: [JAVA] Problem migoczącego ekranu
niestety tu się chyba nie da przesłonić metody paint tak jak podałeś...

jak zrobiłem tło w osobnej metodzie wczytywanej tylko raz to pojawiło się na chwilę a później znikło i tyło tylko hmm surowe okienko po którym latały migocząc kury zostawiając za sobą ślad
Zapraszam do mojej małej galerii;)

>>Galeria<<
 System operacyjny: windows_vista Przeglądarka: firefox
#10
RE: [JAVA] Problem migoczącego ekranu
Moge dac Ci kod jakiegos projektu java.Jak chcesz to pisz na pw.
 System operacyjny: windows_2000 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([JAVA] Problem migoczącego ekranu)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Java początkujący problem ze zrozumieniem kodu MatL70 6 8023 20.06.2017, 12:24
Ostatni post: MatL70
  [Java] Implementacja listy jednokierunkowej (problem przy dodawaniu). Chudy2000 3 8324 28.08.2016, 12:33
Ostatni post: sh0cker
Ściana JAVA problem z keyListenerem FastCod3r 2 6363 05.05.2015, 13:31
Ostatni post: FastCod3r

Skocz do:


Wybrane wątki ([JAVA] Problem migoczącego ekranu)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  kompilacja biblioteki Agui - cmake jurek2 0 8785 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 9488 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 12142 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 9939 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 11063 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 9998 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 10507 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 11715 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 10360 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 11144 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 2696 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 11648 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 12058 19.06.2018 23:24
Ostatni post: broda99
  Potwierdzenie na maila po wysłaniu pliku coci 0 11009 13.06.2018 20:37
Ostatni post: coci
  Pieczętowanie Archiwum Jar - Po co? wanhelsing 3 11556 19.05.2018 20:55
Ostatni post: koneton