Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    3

    [JAVA] Problema con realizzazione di un gioco in Java-Utilizzo del multithreading

    Ciao a tutti,
    sto realizzando un gioco in java come progetto di un esame. Il gioco è simile a Super Pang, ma dopo essere riuscita a far sdoppiare una pallina, le altre due ottenute non riesco a farle muovere contemporaneamente.
    Spero possiate aiutarmi!! Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    [sarcasmo mode on]ci hai presi per indovini? [sarcasmo mode off]

    allora detta così non possiamo dirti niente, non c'è codice, non c'è riferimento a quello che fai...insomma, come andare dal medico e dire "mi fa male qualcosa".

    Dettaglia bene la richiesta, mettendo anache del codice (non tutto il progetto, innanzi tutto la parte che credi dia problemi) e poi ne riparliamo
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    3
    Hai ragione.
    Allora ho Pannello2 che rappresenta il pannello della pallina da creare
    Creo un array di pannelli che andrò ad aggiornare ogni volta che creo una pallina
    Dopo di che creo un array di thread ognuno dei quali gestisce il movimento della pallina dell' indice corrispondente

    codice:
            private Pannello2[] pan;
            public static Thread[] thread;
    
            pan[0] = new Pannello2(new ImageIcon("C:/Users/ACER 10/Desktop/bolla.gif").getImage());
            pan[0].setLocation(0,0);
            this.add(pan[0]);
            this.pan[0].DimEPos(0, 0, 120, 120);
    
    //Ora il problema lo da nel momento in cui creo il thread[1] dal momento che la pallina pan[1] nn si muove
    
            pan[1] = new Pannello2(new ImageIcon("C:/Users/ACER 10/Desktop/bolla.gif").getImage());
            pan[1].setLocation(0,0);
            this.add(pan[1]);
            this.pan[1].DimEPos(0, 0, 120, 120);
    
            this.thread[0] = new Thread(new MovimentoPallina(0));
            
            this.thread[0].start();
            this.thread[1] = new Thread(new MovimentoPallina(1));
            
            this.thread[1].start();
    
    private class MovimentoPallina implements Runnable {
            
            private int direzioneO=Pannello2.DESTRA;
            private int direzioneV= Pannello2.GIU;
            private int pos;
       
          public MovimentoPallina(int a){
          pos=a;}
            
            @Override
            public synchronized void run() {
    
    
                 try {
                while (true) {
                      
                        int posizionePallina = pan[pos].getPosizioneX();
                        int posizionePallinaY = pan[pos].getPosizioneY();
                        int dimensionePallina = pan[pos].getDimensioneL();
                        int dimensionePallinaH = pan[pos].getDimensioneH();
                        
                        
                        if (posizionePallina + dimensionePallina >= LPannelloProva)
                        {posizionePallina=LPannelloProva+dimensionePallina;
                        direzioneO = pan[pos].SINISTRA;}
                       
                        else if (posizionePallina <= 0)
                        direzioneO = pan[pos].DESTRA;
                         
                        if (posizionePallinaY + dimensionePallinaH >= HPannelloProva-5)
                        {
                       
                            posizionePallinaY = HPannelloProva-dimensionePallinaH-5;  
                            pan[pos].incY=-(pan[pos].incY*0.97);
                            direzioneV= pan[pos].SU;
                         
                         }
                        
                        
                         
                        if (posizionePallinaY + dimensionePallinaH<= 50)
                            {
                                 
                         posizionePallinaY = HPannelloProva+dimensionePallinaH;        
                               
                         
                         direzioneV = pan[pos].GIU;
                         
                            }
                               
                        if (direzioneO==pan[pos].DESTRA)        
                        {pan[pos].muovi();
                        
                        }
                        else if (direzioneO==pan[0].SINISTRA)
                            {pan[pos].muovi2();
                            
                            }
                        
                        repaint();
                        
                        Thread.sleep(35);
                        }
    
                    } catch (InterruptedException ex) {
                } 
            
            }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    Come espressamente richiesto dal Regolamento interno (che già ti avevo linkato e pregato di leggere), il codice va postato all'interno degli appositi tag CODE, in modo da mantenerne l'indentazione e la formattazione, altrimenti metti in difficoltà chi sta cercando di aiutarti.

    Li ho aggiunti io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come pensavo ci sono due errori:

    1. progettazione, la pallina, graficamente, non è un thread
    2. di implementazione, la grafica va gestita dall'EDT.

    quella che indica la posizione della pallina è un thread, ogni votla che è aggiornata la notifica all'EDT. Sarà il tuo main a contenere i 10 pannelli e ad aggiornare di conseguenza.
    Ti consiglio di guardare bene l'event handling in java e di lasciare nel thread solo la logica, non la parte grafica
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.