Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2006, 20:02   #1
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
[JAVA] Timer videogame

Ciao a tutti!
Devo realizzare una classe di un videoGame per fare apparire gli oggetti bonus all'interno di un labirinto. Vi sono diversi tipi di oggetti che compaiono per un periodo di tempo limitato (proporzionale al "valore" dell'oggetto) e poi spariscono. Volevo chiedervi un consiglio per realizzare il timer, come posso fare?
Stavo pensando di memorizzare l'ora dell'orologio di sistema al momento che compare l'oggetto e fare sparire quest'ultimo al momento:
"oraMemorizzata + intervalloScelto".
Mi potete dare qualche consiglio su come implementarlo?
Grazie
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2006, 20:49   #2
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da caralu
Ciao a tutti!
Devo realizzare una classe di un videoGame per fare apparire gli oggetti bonus all'interno di un labirinto. Vi sono diversi tipi di oggetti che compaiono per un periodo di tempo limitato (proporzionale al "valore" dell'oggetto) e poi spariscono. Volevo chiedervi un consiglio per realizzare il timer, come posso fare?
Stavo pensando di memorizzare l'ora dell'orologio di sistema al momento che compare l'oggetto e fare sparire quest'ultimo al momento:
"oraMemorizzata + intervalloScelto".
Mi potete dare qualche consiglio su come implementarlo?
Grazie
potresti "giocare" con i thread.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2006, 21:12   #3
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Quote:
Originariamente inviato da franksisca
potresti "giocare" con i thread.
Scusa, potresti spiegarti meglio? Intendi creare 1 thread che gestisce il tempo?
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2006, 21:46   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Come l'hai pensata va bene, usa System.nanoTime() per ricavare il tempo in nanosecondi.
Tieni presente però che ad eseguire del codice ci si mette del tempo, quindi inserisci anche quello nel conteggio dell'intervallo!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2006, 21:56   #5
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Quote:
Originariamente inviato da MEMon
Come l'hai pensata va bene, usa System.nanoTime() per ricavare il tempo in nanosecondi.
Tieni presente però che ad eseguire del codice ci si mette del tempo, quindi inserisci anche quello nel conteggio dell'intervallo!
Ok, grazie 1000 per le dritte! Domani mattina vedo un po csa ne viene fuori!
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2006, 10:34   #6
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Ho implementando una variabile static di Tipo timer per ogni oggetto Bonus, in modo che siano indipendenti da loro e possano essere richiamati e bloccati in momenti diversi.
Ora ho un altro problema...Come posso fare a richiamare gli oggetti Bonus in maniera casuale sullo schermo? Io ho pensato ad una soluzione di questo genere:
Codice:
//Metodo di richiamo del Bonus (all'interno della classe Game):

private void probabilitàPremio()
     {
      //Il numero dei premi visualizzabili deve essere > di quelli visualizzati
      if(MAX_NUM_PREMI > premiVisualizzati)
                {
                    Random rand = new Random();
                    //Genero un numero da 0 a 99
                    probabilità = rand.nextInt(100);
               //Ho il 30% delle probabilità che in un ciclo venga visualizzato 1 Bonus
                    if(probabilità > 70)
                        {
         //I premi sono già memorizzati su un'arrayList e caricati in una mappa
         //ma sono "Invisibili" fino a che non si esegue il metodo eseguiPremio();
         //Scelgo un premio in maniera Random fra quelli esistenti
                            int nPremioRandom = rand.nextInt(premi.size());
                            Bonus bonus = (Bonus) premi.get(nPremioRandom);
                            //Rendo visibile il premio
                            bonus.eseguiPremio();
                            premioEsecuzione = true;
                        }
                }
}
---------------------------------------------------------------------------------------------------
//eseguiPremio (all'interno della classe Bonus) invece è questo:

public void eseguiPremio()
        {
        this.visibile = true;
    
        try {
            Timer timer = new Timer();
            TimerTask task = new MyTask();
            // aspetta 10 secondi prima di sparire
            timer.schedule( task, 10000 );
            }
        catch (Exception e) {}
        
        this.visibile = false;
    }
    
    private class MyTask extends TimerTask
        {
        public void run() {}
        }
Questa è la prima soluzione che mi è venuta in mente ma mi sembra un po grossolana.. Il gioco è diventato molto "pesante" (gli oggetti animati si muovono in maniera meno fluida) e non riesco nemmeno a far comparire i premi! C'è sicuramente qualche soluzione più fine per raggiungere questo scopo, sapete consigliarmi qualcosa? Grazie
caralu è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2006, 10:59   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Allora, i timer che usi sono a tutti gli effetti dei thread, e credo proprio che non siano quello che stai cercando! Se crei molti thread concorrenti il gioco diventa pesante ovviamente!Ricorda che nella maggior parte dei casi per avere buone prestazioni occorre fare tutto in un thread.

Visto che abbiamo gli oggetti usiamoli, ti crei una bella classe che si occupa di contare il tempo, ad esempio ad ogni ciclo ti sa dire quanto tempo è passato dal passaggio precedente, ad esempio:
Codice:
public class ContaTempo{
   
   private static long inizio=0,fine=0;

   public ContaTempo(){
   }

   public static void setInizio(){
        inizio=System.nanoTime();
   }

   public static long tempoTrascorso(){
       fine=System.nanoTime()-inizio;
       setInizio();
       return fine;
   }
}
In questo modo puoi sapere il tempo in nanosecondi per eseguire un determinato blocco di codice.
Ora non ti resta che far sapere questo tempo agli oggetti che vuoi siano soggetti a mutamenti durante il tempo, come nel tuo caso gli oggetti bonus che impigano il tempo per sapere quanto devono restare sullo schermo.

Questa è la parte di codice all'interno della classe bonus:
Codice:
double tempoTrascorso=0,tempoDiPermanenza=0;

public void eseguiPremio(double tempoDiPermanenza){
   this.tempoDiPermanenza=tempoDiPermanenza;
   this.visibile = true;
}
    
public void tempoChePassa(double delay){
    tempoTrascorso+=delay; //incrementi il tempo trascorso di quanto tempo è effettivamente trascorso!
    if(tempoTrascorso>=tempoDiPermanenza) visible=false;
}
In questo modo la cosa è semplicissima, quando vuoi rendere un oggetto visibile ti basta chiamare il metodo eseguiPremio passandolgi quanto tempo vuoi che resti visibile, e nel tuo ciclo di gioco devi chiamare empre il metodo tempoChePassa passandolgi quanto tempo impieghi a fare un ciclo, ad esempio:
Codice:
ContaTempo.setInizio();
public void gameLoop(){
     while(loop){
          ----- fai le tue cose----
          bonus.tempoChePassa(delay/1E9);
          delay=ContaTempo.tempoTrascorso(); //delay è in nanosecondi per averlo in secondi fai delay/1E9
     }
}
per quanto riguarda il metodo che usi per decidere quale bnous rendere visibile direi che non va male...di sicuro non è quello a renderti pesanti le cose.

Ultima modifica di MEMon : 06-09-2006 alle 11:02.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2006, 11:24   #8
caralu
Member
 
L'Avatar di caralu
 
Iscritto dal: Sep 2004
Città: Sardegna
Messaggi: 98
Grazie 1000! Sei stato veramente chiaro e la tua soluzione mi è piaciuta parecchio!
Ora implemento questa variante, se ho qualche problema (ma non penso, visto i tuoi dettagli di spiegazione!) lo posto qua..grazie ancora!
caralu è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Anthropic: l'IA può far avanzare ...
JBL Quantum TWS, prezzo bassissimo su Am...
SteamOS su Mac Apple Silicon: giochi fun...
Erano finiti, Amazon ha fatto scorta e i...
Scope elettriche Tineco e DREAME, prezzi...
Apple chiude il trimestre fiscale con 11...
Qualcomm HBC supera la validazione in la...
Tachyum avvia la procedura di fallimento...
La sonda spaziale NASA Lucy ha raggiunto...
Le GeForce RTX 5000 scarseggiano, tornan...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v