Ajuda com threads

2 respostas
R

Olá pessoal,
bem eu estou criando um game, e parei na parte de pausar o jogo, pois bem, eu consigo pausar a minha nave(THREAD) só que no momento em que eu acesso outra THREAD em outra classe (INIMIGO) para também pausar o mesmo eu não consigo!
para ficar mais esclarecido observe o código abaixo:

Classe Inimigo:

public class Inimigos {

    boolean pausarInimigo;
    Image imagem;
    int x, y;
    boolean visivel;
    int largura, altura;
    int velocidade = 1;
    long tempo;
    private int alturaTela = 500;

    public Inimigos() {
        //costrutor sem paramentros
    }
   
   public Inimigos(int x, int y, final long tempo) {  
        
        this.x = x;
        this.y = y;
        this.tempo = tempo;

        pausarInimigo = true;
        ImageIcon objetoInimigo = new ImageIcon("arquivo/raptor.png");
        imagem = objetoInimigo.getImage();

        //deve ter alguma forma de melhorar isso
        this.largura = 40;
        this.altura = 40;


        //visivel = false;
        //isVisivel();


        //É NESTE TRECHO QUE NÃO ESTOU CONSEGUINDO ACESSAR EM OUTRO CLASSE PARA DAR UM PAUSE NA THREAD
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    while(pausarInimigo) {
                        mexer();
                        Thread.sleep(tempo);                        
                    }
                } catch (InterruptedException ex) {
                }
            }
        });

        t.start();

    }

Classe JFrame:

public class NewJFrame extends javax.swing.JFrame {
    
    Fase fase1;
    Inimigos pauseThread;
    boolean continuar;
    Inimigos pausarInimigo;
    Inimigos pausarIni = new Inimigos();

    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        continuar = false;
        initComponentsP();
        setSize(800, 650);
        setVisible(true);
        setLocationRelativeTo(null);
    }


    //AQUI O BOTÃO QUE FAZ AS THREADS FICAREM EM PAUSE

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        
            
            try {
                Fase.ThreadA.sleep(5000);                
                pauseThread.pausarInimigo = false;
            } catch (InterruptedException ex) {
                Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }       
        
    }

como eu disse eu até consigo pausar a Thread que faz a minha nave se movimentar, porém não consigo fazer a thread do inimigo pausar!

Obs. direto dele eu consigo (matar ele)!

agradeceria muito a ajuda de vocês!

Att,
Ramatís Reis

2 Respostas

ViniGodoy

Essa é uma arquitetura bastante estranha para um jogo. Normalmente, todo game loop, e todos os agentes, são controlados por uma única thread.

De qualquer forma, para resolver seu problema, eu criaria uma variável estática volátil chamada pausado e faria todos os agentes testarem-na.
Na prática isso é depender de uma (ugh) global, mas não vejo uma forma mais limpa de fazer agora que o estrago já está feito.

R

Boa idéia!
bom eu resumi a classe para mostrar qual o trecho de código não estava de forma alguma se comunicando com a thread Inimigo!
na verdade só criei outra thread porque o inimigo tem um comportamento diferente, mas mesmo assim está classe(Inimigo) é chamada em uma única Thread!

obrigado pela sua opinião! vou implementa-lo no meu projeto e assim que ficar pronto retorno uma resposta!

Att,
Ramatís Reis

Criado 2 de julho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 2
Participantes 2