Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-08-2008, 16:57   #1
Donbabbeo
Senior Member
 
L'Avatar di Donbabbeo
 
Iscritto dal: Jul 2006
Messaggi: 8152
[J2ME]Gestire eventi pausa/stop applicazione

Sto creando un'applicazione sempliciotta (uno space invaders clone) tramite j2me: il gioco funziona, riesco anche a salvare gli highscore senza richiedere permessi (scrivo sul recordstore).
Il problema è che non mi piace quello che accade alla mia morte! Mi spiego meglio, mostrando una parte del codice:

Codice:
public void run()
	{
		Graphics g = getGraphics();
		
		while(inGioco == true)
		{
			if (inPausa == false)
			{
				input();
			
				tick();
				
				render(g);
			
				try{Thread.sleep(sleepTime);
				}catch(InterruptedException ie) {}
			}
			
			else
			{
				if (getKeyStates() != 0)
					inPausa = false;
			}
		}
		//if (getKeyStates() != 0)
			//torna al menù principale
	}
Questo è il thread in esecuzione, input gestisce i miei movimenti, thick gestisce i movimenti della flotta di alieni e render disegna a schermo. Ad ogni morte vado in pausa fino alla pressione di un nuovo tasto, in modo da avere un attimo di tempo per riorganizzarmi
Il problema è che spesso mentre vengo colpito sto già premendo un tasto, di conseguenza la pausa non avviene per niente... Ed inoltre non capisco perchè, non riesco a far apparire un messaggio in sovraiscrizione! Vorrei sostituirlo con qualcosa del tipo:
Codice:
if (HaiPersoUnaVita == true)
{

	//SCRIVI A SCHERMO -> "HAI PERSO UNA VITA!"
       //ATTENDI 2 SECONDI
	
}
Seconda domanda: al game over il gioco mi rimane bloccato al punto della morte (ovvio, imposto lo stop del thread)... Io vorrei però che mi tornasse al menù! Tipo:
Codice:
if (SeiMorto == true)
{

	//SCRIVI A SCHERMO -> "GAMEOVER!"
       //ATTENDI 2 SECONDI
       //TORNA AL MENU
}
Qualche consiglio?

Io gestisco il tutto così, ma ovviamente non funziona (non mi scrive a schermo):

Codice:
public void stop()
	{
Graphics g = getGraphics();		

if (fleet.size() > 0 && vite > 0)
		{
			g.setColor(0xFFFFFF);
			g.drawString("HAI PERSO UNA VITA", getWidth()/4, getHeight()/2, 0);
			inPausa = true;
		}
		else if (fleet.size() > 0 && vite <= 0)
		{
			g.setColor(0xFFFFFF);
			g.drawString("HAI PERSO! IL TUO PUNTEGGIO E': " + score, getWidth()/4, getHeight()/2, 0);
			high = getHighScore();
			if (score > high)
			{
				g.drawString("COMPLIMENTI! HAI FATTO IL NUOVO HIGHSCORE", getWidth()/4, getHeight()/2, 0);
				setHighScore(score);
			}
			inGioco = false;
		}
		else if (fleet.size() <= 0 && vite > 0)
		{
			g.setColor(0xFFFFFF);
			g.drawString("HAI VINTO! IL TUO PUNTEGGIO E': " + score, getWidth()/4, getHeight()/2, 0);
			high = getHighScore();
			if (score > high)
			{
				g.drawString("COMPLIMENTI! HAI FATTO IL NUOVO HIGHSCORE", getWidth()/4, getHeight()/2, 0);
				setHighScore(score);
			}
			inGioco = false;
		}
	}

Ultima modifica di Donbabbeo : 19-08-2008 alle 17:09.
Donbabbeo è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2008, 19:37   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
aspè...
ma il getGraphics() lo stai chiamando sulla canvas corretta?
E sei sicuro di essere all'interno del thread grafico?
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-08-2008, 20:38   #3
Donbabbeo
Senior Member
 
L'Avatar di Donbabbeo
 
Iscritto dal: Jul 2006
Messaggi: 8152
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
aspè...
ma il getGraphics() lo stai chiamando sulla canvas corretta?
E sei sicuro di essere all'interno del thread grafico?
volendo potrei metterlo nel thread ma non riesco a visualizzarlo comunque
Codice:
public void run()
	{
		Graphics g = getGraphics();
		
		while(inGioco == true)
		{
			if (inPausa == false)
			{
				input();
			
				tick();
				
				render(g);
			
				try{Thread.sleep(sleepTime);
				}catch(InterruptedException ie) {}
			}
			
			else
			{
				g.setColor(0xFFFFFF);
			        g.drawString("HAI PERSO UNA VITA", getWidth()/4, getHeight()/2, 0);
                               if (getKeyStates() != 0)
					inPausa = false;
			}
		}
		//if (getKeyStates() != 0)
			//torna al menù principale
	}
Ad esempio se faccio così mi fa tutto correttamente, va in pausa, ma la scritta non la fa...
Donbabbeo è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2008, 00:11   #4
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
Quote:
Originariamente inviato da Donbabbeo Guarda i messaggi
volendo potrei metterlo nel thread ma non riesco a visualizzarlo comunque
Codice:
public void run()
	{
		Graphics g = getGraphics();
		
		while(inGioco == true)
		{
			if (inPausa == false)
			{
				input();
			
				tick();
				
				render(g);
			
				try{Thread.sleep(sleepTime);
				}catch(InterruptedException ie) {}
			}
			
			else
			{
				g.setColor(0xFFFFFF);
			        g.drawString("HAI PERSO UNA VITA", getWidth()/4, getHeight()/2, 0);
                               if (getKeyStates() != 0)
					inPausa = false;
			}
		}
		//if (getKeyStates() != 0)
			//torna al menù principale
	}
Ad esempio se faccio così mi fa tutto correttamente, va in pausa, ma la scritta non la fa...
ecco..
allora avevo intuito bene..
quel metodo run fa parte di un altro thread diverso dal thread grafico e in java, come in praticamente tutti gli alitri linguaggi esistenti, è assolutamente necessario modificare lo stato degli oggetti grafici dallo stesso thread che gestisce la grafica..Se provi ad eseguire dei cambiamenti sugli oggetti grafici da un thread diverso ottieni degli errori o comunque, nel caso migliore, hai un risultato imprevedibile, come nel tuo caso mi sa
Esegui l'aggiornamento dal thread grafico.
In J2SE si usa SwinUtilities.invokeLater() per effettuare delle chiamate asincrone da un thread diverso che verrano instradate sull' EDT grafico...
con J2ME sinceramente non ho mai fatto una cosa del genere e non so se esiste qualcosa di simile, anche se immagino di si.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2008, 11:59   #5
Donbabbeo
Senior Member
 
L'Avatar di Donbabbeo
 
Iscritto dal: Jul 2006
Messaggi: 8152
Grazie!

Finalmente (quasi) funziona!

Ho pure aggiunto un temporizzatore per i messaggi e rimosso il check sulla pressione del tasto, quindi ora funziona esattamente come volevo.
Grazie ancora

Oggi pomeriggio un pò di pulizia generale del codice, aggiungo qualche commento qua e là ed ho fatto!
Donbabbeo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
Multa milionaria per un data center del ...
F-Droid 2.0 si aggiorna con una nuova gr...
Microsoft ridisegna Copilot: dalla chat ...
Volkswagen porterà 20 videogiochi...
Troppa IA storpia: OpenAI licenzia in tr...
Marathon, Bungie svela i contenuti dell'...
Autunno, tempo di potature: i tagliasiep...
Meta Muse, due sviluppatori riescono a o...
Google AI Pro gratis: festa a sorpresa p...
MacSync colpisce macOS usando i calendar...
L'agente IA cancella 48 mila file in 103...
Jensen Huang avverte: l'AI può aiutare a...
Elettrico Renault in arrivo in Spagna: 6...
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: 00:58.


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