Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
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 midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
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


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...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
C'è un motivo se OpenAI non chiede un eu...
11 novità rilevanti nella nostra ...
Il tempo non è mai stato misurato...
Le auto elettriche sono più longe...
Stardock Snipboard: il dock che vuole ma...
Logitech G PRO X SUPERLIGHT 2 e SE, mous...
Supporto Linux in arrivo anche per i not...
Ninja MAX, la friggitrice ad aria da 6,2...
Poche scorte rimaste: Mini PC con Ryzen ...
Adobe Premiere è disponibile anche su An...
Sorpresa su Amazon: ora sono 2 le e-bike...
Galaxy S27, svelate le configurazioni di...
Gli studenti americani voltano le spalle...
Mercedes-Benz e Wayve si uniscono: guida...
Meta Muse Charm: sembra un Tamagotchi, m...
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: 09:23.


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