Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Timer (cronometro) JAVA

    Salve a tutti, è la mia prima discussione su questo forum, avrei bisogno di aiuto, stò implementando un giochino che consiste nello sparare ad alcuni bersagli mediante il clic del mouse, dopo ogni centro il bersaglio si sposta random, una volta raggiunti i 10 centri il gioco finisce, mi servirebbe un timer che inizi a contare appena inizia il gioco, ovvero al clic su un bottone, e che finisca appena raggiungo i 10 centri e mi dica il tempo totale per fare una sorta di record, per quanto rigurada i 10 centri ho fatto, ho usato una variabile che quando arriva a 10 fa apparire un messaggio dove è scritto che ho vinto e fa terminare il programma, però oltre a dirmi che ho vinto mi dovrebbe visualizzare anche il tempo totale impiegato, inoltre mi servirebbe visualizzare il tempo che scorre anche mentre gioco, e anche il numero di centri azzeccati in tempo reale sempre mentre gioco, in questo caso ho usato una JLabel ma non riesco a farla visualizzare sullo sfondo (che è un'immagine JPG), per quanto riguarda il cronometro non avrei proprio idea di come implementarlo. Grazie in anticipo a tutti!!
    Ultima modifica di domenicodr; 12-06-2014 a 14:49

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da domenicodr Visualizza il messaggio
    mi servirebbe un timer che inizi a contare appena inizia il gioco, ovvero al clic su un bottone, e che finisca appena raggiungo i 10 centri e mi dica il tempo totale per fare una sorta di record
    Detto così .... non serve alcun "timer" (nel senso di: nulla che faccia cose o generi "eventi" per conto suo).
    Semplicemente all'inizio prendi il tempo A, alla fine prendi il tempo B e quindi fai B-A.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie per la risposta, potrebbe essere una soluzione, però non saprei come implementarla, però così non ho il tempo reale che scorre mentre gioco, o sbaglio?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da domenicodr Visualizza il messaggio
    Grazie per la risposta, potrebbe essere una soluzione, però non saprei come implementarla, però così non ho il tempo reale che scorre mentre gioco, o sbaglio?
    Ah beh, se vuoi far vedere il tempo impiegato man mano, allora sì, c'è bisogno di un timer che ogni tot di tempo (un secondo o anche meno per avere più precisione) faccia il calcolo B-A dove B appunto varia fino alla fine. E visto che si tratta di aggiornare la UI, in questo caso: javax.swing.Timer. Ma è solo un aspetto in più. Devi comunque prendere il tempo A e poi alla fine di tutto, il B.

    In Java System.currentTimeMillis() ti dà il long dei millisecondi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    A questo punto potrei anche fare il contrario, ovvero avviare il timer all' inizio del gioco e usarlo come countdown, per esempio da 30 secondi, e quando arriva alla fine fa terminare il gioco e mi fa vedere quanti centri ho fatto in quei 30 secondi, mi sembra più semplice o no?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da domenicodr Visualizza il messaggio
    A questo punto potrei anche fare il contrario, ovvero avviare il timer all' inizio del gioco e usarlo come countdown, per esempio da 30 secondi, e quando arriva alla fine fa terminare il gioco e mi fa vedere quanti centri ho fatto in quei 30 secondi, mi sembra più semplice o no?
    Ma ora hai "girato" la cosa nell'altro senso, ovvero stabilire un timeout invece che determinare una durata senza alcun particolare limite.
    Comunque ok, fai pure così. Con il criterio del "timeout" in effetti è anche più semplice. I timer (specialmente quello di Swing) non sono super precisi, per cui se fai generare 1 evento solo dopo 30 secondi, potrebbero essere es. 30,05 ... non credo sia un grosso problema, giusto?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    No nessun problema ovviamente, penso che questa sia la soluzione migliore, ora però non capisco come far avviare il timer, praticamente io ho un bottone su un pannello, premendo quel bottone si passa ad un altro pannello che è il campo di gioco, io dovrei far avviare il countdown appena premo quel bottone, e dovrei visualizzare il tempo in diretta su una label da mettere però sul secondo pannello, ovvero quello di gioco, e poi gestire l' evento della fine del countdown con la comparsa di un messaggio e quindi la fine del programma, non capisco come far avviare il countdown e visualizzarlo sull' altro pannello

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Innanzitutto dovresti capire bene come funziona il Timer di Swing. C'è il tutorial ufficiale: How to Use Swing Timers

    E in questo post avevo fornito un piccolo esempio completo di "cronometro" da cui puoi prendere spunto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Stavo guardando il tuo esempio, invece di far contare il timer in avanti come posso farlo contare all' indietro?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da domenicodr Visualizza il messaggio
    Stavo guardando il tuo esempio, invece di far contare il timer in avanti come posso farlo contare all' indietro?
    Nel mio esempio la differenza era: millisecondiCorrenti - millisecondiIniziali. A te potrebbe bastare: 30000 - (millisecondiCorrenti - millisecondiIniziali)
    Che effettivamente fa andare all' "indietro".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.