Witam wszystkich
Mam pytanie do bardziej doswiadczonych kolegow, mianowicie: pisze prosta gre (arkanoid), w ktorej to do obslugi pileczki zaprzegam watek, gdy pileczka zleci na dol(opusci ekran) chce ja ustawic w punkcie startu na rakietce na dole ( na tym od czego pileczka sie odbija) i tutaj pojawia sie problem mianowicie pileczka ustaia sie tak jak chce losowo, a na taki hazard nie moge sobie pozwolic. Probowalem uruchomic inny watek aby te pileczke doprowadzic na miejsce tez z marnym skutkiem. Pod spodem wkleilem kod zr. Bardzo prosze o pomoc to moje pierwsze zetkniecie z wielowatkowoscia
final Runnable r1=new Runnable(){
public void run(){
synchronized(this){
try {
//rozgrywka();
while(zycia>0){
if(gra&&start){
pil.lot_pilki(0);
//pil.nas();
sprawdz_kostki();
odbicie_od_odb();
sprawdzsciany();
Thread.sleep(40);
}
repaint();
}
} catch (InterruptedException ex) {
Logger.getLogger(panel_gra.class.getName()).log(Level.SEVERE, null, ex);
}
}}
};
powyzej kod odpowiedzialny za ruch i odbicia pileczki, ponizej z kolei odpowiedzialny za reset pilki i rakietki
Runnable r2=new Runnable(){
public void run(){
synchronized(t1){
--zycia;
start=false;
odb=new odbijacz(pnt,(int)dim_kost.getWidth()*2,new Color(70,50,0),15);
pil=new pilka(Color.WHITE,odb.getSr(),15,getWidth(),getHeight());
t2.notifyAll();
}
}
};
dodam ze t1 to watek zadeklarowany do obslugi interface'u r1, a t2 do r2.
Efekt, ktory chcialbym uzyskac to zatrzymanie t1, t2 robi swoje i ponowne uruchomienie/wznowienie t1, dodam, ze watki dziela zasoby.
Z gory dzieki za cenne wskazowki