Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[JAVA] Timer videogame

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[JAVA] Timer videogame

Messaggioda caralu » mar set 05, 2006 6:45 pm

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
Avatar utente
caralu
Aficionado
Aficionado
 
Messaggi: 43
Iscritto il: mer dic 28, 2005 4:13 pm

Messaggioda Silver Black » mer set 06, 2006 7:36 am

Servirà sicuramente un thread che si occupa del cronometraggio o, almeno, un timer che lavora in secondo piano. Io lavoro in Delphi e lo farei con un thread che conta i millisencodi trascorsi, superati i quli (limite impostato in un'apposita proprietà della classe del bonus che apparirà sullo schermo) faccio sparire il bonus. Per contare i millisecondi trascorsi userei l'API GetTickCount.

Altrimenti con un oggetto Timer che si occuperà sempre di contare i millisecondi trascorsi, che lavora in background (anche se non è un vero e proprio thread) e che non abbisogna, come punto a suo favore, di alcuna API poichè conta i millisencodi trascorsi dalla sua attivazione.
Sergio Pappalardo aka Silver Black
CyberInstaller - www.silvercybertech.com - http://silvercybertech-labs.com/cyberblog
Avatar utente
Silver Black
Silver Member
Silver Member
 
Messaggi: 1147
Iscritto il: gio gen 06, 2005 8:50 pm
Località: Bassano del Grappa (VI)

Messaggioda caralu » mer set 06, 2006 9:52 am

Silver Black ha scritto:Servirà sicuramente un thread che si occupa del cronometraggio o, almeno, un timer che lavora in secondo piano. Io lavoro in Delphi e lo farei con un thread che conta i millisencodi trascorsi, superati i quli (limite impostato in un'apposita proprietà della classe del bonus che apparirà sullo schermo) faccio sparire il bonus. Per contare i millisecondi trascorsi userei l'API GetTickCount.

Altrimenti con un oggetto Timer che si occuperà sempre di contare i millisecondi trascorsi, che lavora in background (anche se non è un vero e proprio thread) e che non abbisogna, come punto a suo favore, di alcuna API poichè conta i millisencodi trascorsi dalla sua attivazione.

Grazie per il consiglio!
Ho implementando un 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: Seleziona tutto
//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
Avatar utente
caralu
Aficionado
Aficionado
 
Messaggi: 43
Iscritto il: mer dic 28, 2005 4:13 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising